第一篇:關(guān)于Java不適做主要編程教學(xué)語言
關(guān)于Java不適做主要編程教學(xué)語言.txt38當(dāng)烏云布滿天空時,悲觀的人看到的是“黑云壓城城欲摧”,樂觀的人看到的是“甲光向日金鱗開”。無論處在什么厄運中,只要保持樂觀的心態(tài),總能找到這樣奇特的草莓。最近有一篇文章,說兩位退休的美國大學(xué)教授上書反對將Java作為編程教學(xué)語言,對此我表示高度認同。對于Java,我并不反感,而且相信它在工業(yè)應(yīng)用中的地位不可取代,但是,我一直反對將Java作為主要的編程教學(xué)語言,因為教學(xué)語言承擔(dān)著與生產(chǎn)語言不同的任務(wù),它必須能夠幫助學(xué)生奠定堅實的技術(shù)基礎(chǔ),塑造核心技術(shù)能力。在這方面,Java不能夠勝任。
1990年代中期以前,美國的計算機編程入門教育以Pascal為主。我的一位美國程序員朋友至今還懷念他與Pascal為伴的高中年代。到了1990年代中后期,由于ANSI C語言“糾正”了早期C語言的一些不適合編程教學(xué)的問題,因此成為很多美國高中和大學(xué)編程入門課的教學(xué)語言。1998年,美國指導(dǎo)編程教學(xué)的一個協(xié)會推薦將C++作為入門教學(xué)語言,在當(dāng)時引起很大的反響,認為是編程教育方面的一個重要進步。但遺憾的是,C++非常復(fù)雜,而當(dāng)時C++語言的教育體系又非常不成熟,因此很多地方的教學(xué)方法不得當(dāng),把學(xué)生迅速拖入無邊無際的語言細節(jié)當(dāng)中,引起了學(xué)生痛苦的抱怨。大約經(jīng)過兩三年不成功的實踐之后,在本世紀初,美國計算機教育界普遍接受Java作為編程入門語言。此后在很短的時間里,Java迅速成為美國高中和大學(xué)里的首選編程教學(xué)語言,老師教得輕松,學(xué)生學(xué)得甜蜜,所以這個局面一直持續(xù)到現(xiàn)在。
而在中國,BASIC語言及其變體一直到1990年代中期都還是“算法語言”課程的主要教學(xué)內(nèi)容,充分折射出當(dāng)時中國計算機教學(xué)與工業(yè)應(yīng)用之間的脫節(jié)。只是到了1990年代后期,C語言才確立了在中國工科計算機編程入門教育中的主流地位。到現(xiàn)在為止,大部分工科學(xué)生都“必修”“C程序設(shè)計語言”這門課程。不過事實上,根據(jù)我的了解,這門課程的總體教學(xué)質(zhì)量相當(dāng)糟糕,大部分學(xué)生可以說是滿懷希望而來,兩手空空而去。在這種情況下,中國高校計算機編程入門教育已經(jīng)開始悄悄向Java過渡了。據(jù)我所知,有一些名校已經(jīng)開始將Java設(shè)為編程入門課程,并且認為這是與國際接軌進步標志。
在我的朋友圈子里,大多數(shù)真正的一線開發(fā)者和技術(shù)領(lǐng)導(dǎo)者,對于將Java作為入門教學(xué)語言的“發(fā)展方向”都持質(zhì)疑態(tài)度。他們中很多人目前主要的工作都集中在Java上,因此這種態(tài)度并非來自所謂語言宗教情緒,而是來自他們招聘和實際工作中的感受。他們發(fā)現(xiàn),只學(xué)習(xí)Java、C#、VB等“現(xiàn)代”編程語言的學(xué)生,精于拿來主義,長于整合和快速開發(fā),思維活躍,生產(chǎn)效率高,讓他們來做直截了當(dāng)?shù)?、有章可循的、非研究性和非?chuàng)新性的工作比較合適,但是基礎(chǔ)不扎實,對計算機系統(tǒng)的理解薄弱,處理細節(jié)和矛盾的能力不足,一旦他們熟悉的套路用不上,則缺少自主分析問題、解決問題的知識、能力和經(jīng)驗。
今天看到兩位教授的“上書”,才知道原來他們也有同感。只不過這兩位教授說的更直白,直接反對將Java作為入門編程語言,而是冒天下之大不韙,公然號召開歷史倒車,要求退回到C、C++、Lisp和Ada去。
我是支持兩位教授的。我認為,Java、C#、VB和其它虛擬機之上的語言都不適合作為專業(yè)程序員的入門教學(xué)語言。在中國還非常缺乏具有創(chuàng)新和獨立解決問題的高水平程序員的局面下,我們應(yīng)該認真做好的事情是努力提高C/C++的教學(xué)質(zhì)量,而不是圖快活轉(zhuǎn)向Java。
教學(xué)語言的選擇是至關(guān)重要的事情。作為大多數(shù)學(xué)生第一種需要認真學(xué)習(xí)理解的編程語
言,教學(xué)語言將會成為他們中間很多人的“編程母語”,深深地烙印在學(xué)生的思維方式中。這個編程母語要幫助學(xué)生破除計算機和軟件的神秘感,建立對于程序的基本認識和對計算機模型的最初理解。在后續(xù)專業(yè)基礎(chǔ)課和專業(yè)課程的學(xué)習(xí)中,這門編程語言應(yīng)該作為主要工具貫穿始終,幫助學(xué)生認識計算機系統(tǒng),掌握算法與數(shù)據(jù)結(jié)構(gòu)技能,熟悉操作系統(tǒng)概念,理解編譯原理知識,理解軟件抽象及軟件設(shè)計的基本思想,完成一定量的課程及課外項目實踐,建立正確的軟件開發(fā)實踐習(xí)慣。不但如此,這種教學(xué)語言必須是工業(yè)界的主流語言,否則學(xué)生學(xué)非所用,學(xué)習(xí)動力無法保證。
按照這個標準來衡量,Java適合于作為主要的編程教學(xué)語言嗎?我不這么認為。首先,我承認Java在教學(xué)上有一些優(yōu)勢,比如其開發(fā)環(huán)境和工具支持非常成熟,有助于培養(yǎng)學(xué)生正確的編程習(xí)慣;Java是當(dāng)今第一工業(yè)主流語言,標準類庫非常全面,可以迅速地開發(fā)具有實際用途的程序,有助于激發(fā)和保持學(xué)生的興趣;而在數(shù)據(jù)結(jié)構(gòu)、算法、編譯原理的教學(xué)方面,Java也毫不落于下風(fēng),在軟件抽象設(shè)計(面向?qū)ο螅┓矫?,Java還有著明顯的優(yōu)勢;特別是在并行編程的教學(xué)方面,Java 1.5 concurrency包提供的優(yōu)勢是壓倒性的。盡管有如上這些優(yōu)勢,但Java作為教學(xué)語言存在著一個致命的缺陷,即它是一個虛擬機語言,這一點就足以把它從教學(xué)語言的名單上去掉。
作為一個虛擬機語言,Java對開發(fā)者隔絕了下層的真實系統(tǒng),從而構(gòu)造了一個近乎完美的環(huán)境,在這個環(huán)境里,世界上只有一種機器,一個操作系統(tǒng),內(nèi)存是無限的,所有的機器都具有相同的字節(jié)順序和一致的類型約定,為了設(shè)計的優(yōu)美而犧牲速度永遠是正義行為,從反射到運行時自動加載,從完備的容器類到統(tǒng)一字符編碼,一大堆漂亮的功能都可以不費吹灰之力唾手而得。要是這個世界上每臺計算機都是一個Java機器,每項編程任務(wù)都可以在這樣一個近乎完美的環(huán)境中開發(fā),那毫無以為,Java是最合適的編程教學(xué)語言。但是事實上呢?這樣一個完美的環(huán)境是Java力量的源泉,但這卻不是真實的世界。在真實世界里,我們可能面對非常原始的環(huán)境,苛刻的運行時限制,復(fù)雜多變的系統(tǒng)環(huán)境,令人窒息的細節(jié)魔鬼,要對付這些東西,需要開發(fā)者具有在應(yīng)對復(fù)雜性,自己構(gòu)造環(huán)境,在諸多限制條件下尋找解決方案的能力。而這種能力,被無數(shù)人無數(shù)次地證明是軟件開發(fā)、特別是軟件創(chuàng)新的核心能力。把Java作為教學(xué)語言,恰恰會導(dǎo)致這種核心能力的缺失。除此之外,如果耐心觀察的話,不難發(fā)現(xiàn),幾乎在任何軟件領(lǐng)域里的創(chuàng)新性成果都首先是由C/C++語言實現(xiàn)的,原因很簡單,Java是站在C/C++基礎(chǔ)之上的,只有C/C++先把大路趟開,Java才能夠順勢而上。
相反,盡管C/C++語言作為教學(xué)語言有很多的不足,比如不同環(huán)境下開發(fā)模式差異大,細節(jié)繁多,開發(fā)效率低,容易犯錯,測試和調(diào)試困難,學(xué)習(xí)者難以保持動力,等等,但是這些問題都可以解決。而C/C++的關(guān)鍵優(yōu)點,是能夠讓學(xué)習(xí)者在真實的計算機抽象上、在大量的細節(jié)和矛盾中學(xué)會思考,學(xué)會解決問題,學(xué)會了解真實的系統(tǒng),知輕重,明生死,從而建立核心能力。掌握了C/C++語言,再去學(xué)習(xí)和理解Java、C#、Python、Ruby和其它語言,就比較容易達到更高的境界。反之,如果習(xí)慣了舒舒服服躺在完美世界里當(dāng)闊少,那就很難有勇氣面對真實的世界。當(dāng)然,很多開發(fā)者認為,現(xiàn)在更重要的能力是理解業(yè)務(wù)、整合現(xiàn)有資源的能力,而不是處理底層細節(jié)的技術(shù)。這種說法放在個人身上沒有問題,但是不能成為整個編程教育的指導(dǎo)思想。我們需要各個層面上的人才,精通業(yè)務(wù)和設(shè)計的架構(gòu)師固然很重要,但能夠在底層作出創(chuàng)新成果的編程高手實際上更為稀缺和珍貴,很多時候也能夠創(chuàng)造更大的價值。而且,更重要的是,一個精通系統(tǒng)知識的開發(fā)者在往上走的時候不會遇到大的障礙,而一個只知道拼裝組合的“高級設(shè)計師”,往往連往下看的勇氣都沒有。
Java的另外一個問題,是其所倡導(dǎo)的繁瑣設(shè)計風(fēng)格,一個對象套一個對象,一個對象疊一個對象,概念之間彼此橫七豎八地互相依賴,人為制造出一大堆貌似精美、實則累贅的所謂設(shè)計。這個問題我已經(jīng)批評過多次,并且相信這股歪風(fēng)一定會最終被人們拋棄,Java最終會歸于質(zhì)樸。但是在這一天到來之前,Java對于初學(xué)者來說,很可能蒙住他們的雙眼,使他們看不到軟件設(shè)計中最可貴的簡單性和優(yōu)美的統(tǒng)一,體會不到數(shù)據(jù)和程序的統(tǒng)一。在這一點上,C表現(xiàn)的非常好,而C++如果教學(xué)得體,可以做的更好。
當(dāng)然,這并不是為現(xiàn)在的C/C++教學(xué)辯護。恰恰相反,從我了解的情況來看,目前普通高校的C/C++教學(xué)質(zhì)量非常令人擔(dān)憂。學(xué)生學(xué)不會,而且越學(xué)越?jīng)]有興趣,老師則感到教起來很棘手,迫于現(xiàn)實情況往往選擇敷衍了事。反而是教Java,無論如何學(xué)生還能學(xué)到一點東西,對就業(yè)也有直接的幫助。至于學(xué)生的核心能力確實,發(fā)展后勁不足等問題,就讓他們在現(xiàn)實工作中自己解決吧。坦率地說,這種想法也很有道理。不過,從教學(xué)角度來說,我認為老師們還是應(yīng)該積極考慮如何提高C/C++的教學(xué)質(zhì)量。畢竟學(xué)生階段是十分寶貴的,基礎(chǔ)不在這個時期夯實,將來想彌補,就算不是完全不可能,也將付出十倍的代價。本著對學(xué)生職業(yè)生涯的負責(zé)態(tài)度,還是應(yīng)該幫助學(xué)生達到這個階段應(yīng)該達到的目標。在兩位教授的公開信里,也充分表達出這個意思。
我贊成的編程教育過程,應(yīng)當(dāng)是以C/C++(基本上是C)為主線,貫穿起算法、數(shù)據(jù)結(jié)構(gòu)、系統(tǒng)原理、編譯和數(shù)據(jù)處理、軟件設(shè)計和組件技術(shù)等關(guān)鍵知識領(lǐng)域,讓學(xué)生能夠從根本上理解現(xiàn)代軟件系統(tǒng)的原理和構(gòu)造,并通過有效的練習(xí)建立正確的軟件設(shè)計觀念和良好的工程實踐習(xí)慣。在這個基礎(chǔ)上,無論將來是深入學(xué)習(xí)C++,還是進入Java的繁榮世界,或者擁抱Python、Ruby,甚至于走向Web開發(fā),都會心領(lǐng)神會,勢如破竹。
第二篇:Java編程語言面試題
西安英泰移動通信學(xué)院S2級Java編程語言測試題 1
Java編程語言面試題
一、簡答題
1、簡述用Java編程語言編寫、編譯、解釋和執(zhí)行過程。
2、簡述在Java JDK中,java.exe程序的作用。
3、簡述Java編程語言中的數(shù)組和C編程語言中定義數(shù)組有什么區(qū)別。
4、簡述類與對象的關(guān)系。對象的方法和類的方法是否為一回事?
5、JVM在解析代碼Person p1=new Person()和new Person()時有什么區(qū)別?
6、簡述this關(guān)鍵字的四中用途。
7、簡述構(gòu)造函數(shù)的作用。
8、分別簡述static和final關(guān)鍵字的意義。
9、簡述抽象類和接口的區(qū)別,并闡明抽象類和接口的用途。
10、簡述多態(tài)的概念和意義。
11、簡述異常和錯誤的區(qū)別。
12、簡述如何創(chuàng)建和啟動一個線程的兩種方法
13、簡述棧內(nèi)存和堆內(nèi)存分別用來做什么。
14、簡述throw關(guān)鍵字在程序中拋出的是什么。
15、在一個類的public static void method()中,能夠直接使用該類什么類型的成員。
二、計算題
1、在類Runner中定義一個方法move(),要求這個方法的參數(shù)是一個實現(xiàn)了接口Runnable的匿名內(nèi)部類的對象,該接口中的方法中的內(nèi)容自己可以決定。
2、類Outer中與方法屬性平行定義的內(nèi)部類為Inner{ public void doStuff(){}},寫出在另一個類TestInner的public static void main(String s)中調(diào)用方法doStuff()的代碼。
3、類Book{ public void insert(String id)throws Exception{…}}中的方法被類TestBook中public void testInser()方法調(diào)用,寫出該方法中的主要代碼。
4、兩個頂級包test1和test2,需要將它們壓縮成一個文件myjava.jar,再用WinRaR打開時,會在瀏覽器上看到下列層次;
◎META-INF
◎test1
◎test2
注:◎為文件夾
請寫出操作過程,并寫出運行的命令行程序(提示:用jar.......).5、同一個線程類ThreadTest中定義了:
public synchronized void sale(){...}
synchronized(str){...}
寫出能使這兩個類成員保持同步的改進代碼。
6、解釋類class Q{
private String name=“李四”;
private String sex=“女”;
boolean bFull=false;
public synchronized void put(String name,String sex){
if(bFull)
try{
wait();
this.name=name;
}catch(InterruptedException e){}
try{
Thread.sleep(10);
}catch(Exception e){
System.out.println(e.getMessage());
}
this.sex=sex;
bFull=true;
notify();
}
public synchronized void get()
{
if(!bFull)
try{
wait();
}catch(InterruptedException e){}
System.out.println(name + “----” + sex);
bFull=false;
notify();
}
}
中wait()、notify()、sleep()諸方法的作用。
7、在類class TestInteger{
public static void main(String[] args){
int w =。。。。。。。。。。。。。。。。。。。。// 將args[0]轉(zhuǎn)換int型的方法
int h =。。。。。。。。。。。。。。。。。。。。//將args[1]轉(zhuǎn)換int型的另一種方法//int h = Integer.valueOf(args[1]).intValue();//第三種方法
for(int i=0;i StringBuffer sb=new StringBuffer(); for(int j=0;j sb.append('*'); } System.out.println(sb.toString()); } } } 中,args[0]的值為:“1234”,args[1]的值為:“5678”,請上面代碼塊中的……………處填寫代碼。 8、下面類 import java.util.*; public class TestVector{ public static void main(String [] args){ int b=0; Vector v=new Vector();System.out.println(“Please Enter Number:”); while(true){ try{ b= System.in.read();//……….} catch(Exception e){ System.out.println(e.getMessage()); } if(b=='r' || b== 'n') break; else{ int num=b-'0'; v.addElement(new Integer(num));//………..} } int sum=0; Enumeration e=v.elements();//………………… while(e.hasMoreElements()){ Integer intObj=(Integer)e.nextElement();//………………..sum += intObj.intValue(); } System.out.println(sum); } } 中,請在諸單行注釋//。。。。中解釋其左邊一行代碼的意義。 9、下面類 import java.io.*; public class DataStreamTest{ public static void main(String[] args){ try{ FileOutputStream fos=new FileOutputStream(“c:hello.txt”);//…….BufferedOutputStream bos= new BufferedOutputStream(fos);//…… DataOutputStream dos= new DataOutputStream(bos);//……..dos.writeUTF(“ab中國”);//……… dos.writeBytes(“ab中國”); dos.writeChars(“ab中國”); dos.close();//………… FileInputStream fis=new FileInputStream(“hello.txt”);//…….BufferedInputStream bis=new BufferedInputStream(fis);//…….DataInputStream dis=new DataInputStream(bis);//…….System.out.println(dis.readUTF()); dis.close(); }catch(Exception e){ System.out.println(e.getMessage()); } } } 中,請在諸單行注釋//。。。。中解釋其左邊一行代碼的意義。 10、已知接口:interface PCI { voidstart(); voidstop(); } 要求:寫兩個類:NetWorkCard,SoundCard分別實現(xiàn)上面接口的方法(內(nèi)容自編),并寫第三個類MainBoard,該類中的方法install(PCI p)應(yīng)用NetWorkCard,SoundCard兩個類對象的方法。根據(jù)上面的要求,填寫下面的代碼: class Assembler { public static void main(String []args) { //在下面寫代碼….} } class NetWorkCard ….{ } class SoundCard…………{ } class MainBoard…………………………………..{ install(PCI p){ } } 第一章初識Java 1.程序是為了讓計算機執(zhí)行某些操作或解決某個問題而編寫的一系列有序指令的集合。 2.Java包括編程語言和相關(guān)的技術(shù)。 3.Java主要用于開發(fā),桌面應(yīng)用程序和Internet應(yīng)用程序。4.開發(fā)一個Java應(yīng)用程序的基本步驟:編寫源程序,編譯程序和運行程序。源程序以.java為擴展名,編譯后生成的文件以.class為擴展名。使用javac命令可以編譯.java文件,使用java命令可以運行編譯后生成的.class文件。 5.編寫Java程序要符合Java編碼規(guī)范,為程序編寫注釋可大大增加程序的閱讀性。 6.MyEcplise是一個功能強大的集成開發(fā)環(huán)境(IDE)。它的各種窗口便于Java程序的開發(fā),調(diào)試和管理。 第二章變量、數(shù)據(jù)類型和運算符 1.變量是一個數(shù)據(jù)存儲空間的表示,它是存儲數(shù)據(jù)的基本單元。變量的命名規(guī)則: (1)必須以字母,“_”,“$”開頭。(2)可以包括數(shù)字,但不能以數(shù)字開頭(3)不能包括除“_”,“$”以外的特殊符號(4)不能使用Java語言關(guān)鍵字或者保留字(goto) 2.Java中數(shù)據(jù)類型分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型,基本數(shù)據(jù)類型有整型(int),雙精度浮點型(double),字符型(char)和字符串(String)。3.變量要先聲明并賦值,才能使用。4.Java提供各種類型的運算符,具體如下。 (1)賦值運算(=)(2)算術(shù)運算符(+,-,*,/,%)(3)關(guān)系運算符(>,>=,<,<=,==,!=)(4)條件運算符(條件?表達式1:表達式2)(5)邏輯運算符(&& , || ,!, & , |)&&(短路與)與&的區(qū)別:&&進行判斷時,當(dāng)?shù)谝粋€條件為假,則不需要判斷第二個條件,結(jié)果為假。&進行判斷時,即使第一個條件為假時,也需要判斷完第二個條件才能給出結(jié)果為假。||(短路或)與|的區(qū)別:與上同理(5)位運算符(&, | , << , >> , >>>)5.數(shù)據(jù)類型轉(zhuǎn)換是為了方便不同類型的數(shù)據(jù)之間進行運算 6.數(shù)據(jù)類型轉(zhuǎn)換包括了自動類型轉(zhuǎn)換和強制類型轉(zhuǎn)換,自動類型轉(zhuǎn)換需要滿足類型兼容且目標類型大于源類型的條件 7.Java中使用boolean類型表示真假,boolean類型的兩個值為true和false。 8.Java中的關(guān)系運算符可以用于來比較大小,高低,多少等,比較厚的結(jié)果是boolean類型。 9.Java提供Scanner類,可以實現(xiàn)從控制臺獲取鍵盤上輸入的信息 第三章選擇結(jié)構(gòu)(一)Java中的if選擇結(jié)構(gòu),包括以下形式 (1)基本的if選擇結(jié)構(gòu):可以處理單一或組合條件的情況(2)if-else選擇結(jié)構(gòu):可以處理簡單的條件分支情況(3)多重if選擇結(jié)構(gòu):可以處理連續(xù)區(qū)間的條件分支情況(4)嵌套if選擇結(jié)構(gòu):可以處理復(fù)雜的條件分支情況 第四章選擇結(jié)構(gòu)(二)1.switch選擇結(jié)構(gòu)適用于進行等值判斷 2.switch關(guān)鍵字后面小括號里表達式的值可以是int , short , byte , char , 枚舉 , String(JDK1.7開始支持) 第五章循環(huán)結(jié)構(gòu)(一)1.循環(huán)結(jié)構(gòu)由循環(huán)結(jié)構(gòu)和循環(huán)操作構(gòu)成,只要滿足循環(huán)條件,循環(huán)操作就會反復(fù)執(zhí)行 2.使用循環(huán)結(jié)構(gòu)解決問題問題的步驟:分析循環(huán)條件和循環(huán)操作,套用循環(huán)結(jié)構(gòu)的語法寫出代碼,檢查循環(huán)能否退出 3.while循環(huán)結(jié)構(gòu)是先判斷后執(zhí)行,do-while是先執(zhí)行,后判斷。Do-while至少執(zhí)行一次。 4.debug調(diào)試:設(shè)置斷點,單步運行,觀察變量 第六章循環(huán)結(jié)構(gòu)(二)1.for循環(huán)結(jié)構(gòu)的語法結(jié)構(gòu)如下 for(表達式1:表達式2:表達式3){ } //循環(huán)體 表達式1:循環(huán)結(jié)構(gòu)的初始部分,為循環(huán)變量賦初值 表達式2:循環(huán)結(jié)構(gòu)的循環(huán)條件 表達式3:循環(huán)條件的迭代部分,通常用來修改循環(huán)變量的值 2.用break和continue語句控制流程 (1)break語句用于終止某個循環(huán),程序跳轉(zhuǎn)到循環(huán)體外的下一條語句。Break也可以在switch語句中使用 (2)continue語句用于跳出本次循環(huán),進入下一次循環(huán) (3)return可以結(jié)束當(dāng)前方法的執(zhí)行并退出,返回調(diào)用該方法的語句處 第七章數(shù)組 1.數(shù)組是可以在內(nèi)存中連續(xù)存儲多個元素的結(jié)構(gòu),數(shù)組中的所有元素必須屬于相同的數(shù)據(jù)類型 2.數(shù)組中的元素通過數(shù)組的下標進行訪問,數(shù)組的下標從0開始 3數(shù)組可用一個循環(huán)為元素賦值,或用一個循環(huán)輸出數(shù)組中的元素信息 4.通過數(shù)組名.length可獲得數(shù)組長度 5.利用Arrays.提供的sort()方法可以方便的對數(shù)組中的元素進行排序 6.二維數(shù)組實際上就是一個一維數(shù)組,他的每個元素又是一個一維數(shù)組。 第八章循環(huán)結(jié)構(gòu)進階 1.數(shù)組的輸入排序,選擇排序,冒泡排序 2.在二重循環(huán)中可以使用break、continue語句控制程序的執(zhí)行 選擇排序: 思路:每次循環(huán)得到最小值的下標,然后交換數(shù)據(jù)。如果交換的位置等于原來的位置,則不交換。插入排序: 思路:將數(shù)據(jù)插入到已排序的數(shù)組中。 編程語言Android java C/C++的對比 如果你想成為一名前景光明的程序員,則需選擇一個適合自己同時熱門的編程技術(shù),現(xiàn)在最火的編程技術(shù)無非就是java、ios、android、c++了,那么,我們該如何選擇呢? Android現(xiàn)在待遇略低于Ios,但前景強于Ios 曾幾何時,ios開發(fā)非常的火爆,開發(fā)人才供不應(yīng)求,薪資待遇開的也非常的高,有一些剛剛具備1年工作經(jīng)驗的新手,都能拿到萬元高薪,而同等資歷的java程序員一般在5、6千元左右。由此,各大培訓(xùn)機構(gòu)趕緊想法設(shè)法開設(shè)ios培訓(xùn)班,這幾年過去了,Ios的開發(fā)熱沒有下降,而人才卻比較飽和了,隨著喬布斯的離世,曾經(jīng)風(fēng)風(fēng)光光的蘋果品牌也有所下降,而相反以三星手機為首的android系統(tǒng)卻大放異彩,放眼以后,android的市場需求和空間要更廣闊。 Java依然是最熱的高級編程語言 在高級編程語言中,java無疑是最火爆的,在全世界內(nèi)應(yīng)用最為廣泛,國內(nèi)的java熱更是有增無減。java是所有程序員類招聘職位中職位需求最大的。如果你想做web開發(fā)或者企業(yè)級大型軟件項目的開發(fā),最好學(xué)習(xí)java,無論從當(dāng)前熱度和前景方面來看,都是非常不錯的。同時,Java也比較容易學(xué),許多自制力不強的同學(xué)通過幾個月的java培訓(xùn)就能基本掌握入門知識。 C/C++依然是鉆研型程序員的首選 C/C++開發(fā)要難度大一些,因此大都是科班出身,尤其是名校畢業(yè)的,因為從事C/C++開發(fā),更講究效率和性能,需要更多算法、數(shù)據(jù)結(jié)構(gòu)的知識,實非普通人才適合從事的領(lǐng)域。如若想在該領(lǐng)域有所發(fā)展,則需要比較強的邏輯思維和鉆研能力。 長沙歐柏#泰克#學(xué)院的老師對此有非常豐富的開發(fā)經(jīng)驗,他們建議,對于名??瓢喑錾淼你@研型人才,建議你學(xué)習(xí)C/C++,而對于普通的大中專畢業(yè)生等,建議從事anroid和JAVA領(lǐng)域。 ? JAVA編程心得 計算機3班 竇金霞 20104773 最近幾周一直在弄程序,說實話真的很累,但累中也有成功的快樂。我覺得學(xué)到了很多東西,這是只看課本知識所不能學(xué)到的。 說實話,以前我一直沒學(xué)過JAVA雖然我也知道JAVA的重要性,可是即使上課聽了,不實踐還是掌握不了。因為種種原因,今年我沒有買筆記本。沒有機器,僅僅靠每周一次的上機練習(xí)是絕對不夠的。所以我就插空調(diào)程序,在舍友們不用的時候自己再接她們的電腦調(diào)。 調(diào)上一個WEB版的通訊錄程序時我已經(jīng)感覺到學(xué)的很吃力,好多東西都不懂。這次做的這個學(xué)生成績管理系統(tǒng)更復(fù)雜了,所以一開始調(diào)的時候感覺特別吃力.所以我告訴自己不能放棄,慢慢來,就這樣我從最基本的sql語句session對象開始學(xué)起,我覺得我還有太多不懂得所以要比別人付出更多的努力。就這樣我一點一點的學(xué)著?? 說心里話,在做上一個web版的通訊錄時,我就感覺到成功的喜悅。好多地方我都是一點一點的問的,在問的過程中,我也學(xué)會了很多,像:Servlet和jsp之間跳不過去時有兩種解決辦法,一是關(guān)閉底層類中的db.close;二是將Servlet中的throws Exception改成try catch以捕捉異常;我還學(xué)到了集中查找錯誤的方法,可以加上兩個雙斜杠“//”將具體的方法屏蔽掉,一檢查是方法錯誤還是Servlet錯誤,還有就是寫上System.out.println()將獲得的數(shù)據(jù)輸出,用來檢查數(shù)據(jù)傳輸過程有沒有錯誤等等。 雖然在別人看來,這些方法可能都很常規(guī),但是確實我自己學(xué)會的,我覺得很有成就感。我已經(jīng)做好計劃了,暑假的時候去買本本用自己的本本練習(xí)一下JAVA,雖然下學(xué)期不學(xué)JAVA了,但是我對JAVA的熱情不會因為這個而削減的! 做完這個學(xué)生成績管理系統(tǒng)后,我覺得我對JAVA的看法已經(jīng)改變了。一前總以為JAVA很繁瑣很難,聽同學(xué)說JAVA不好學(xué),開始又有一些聽不懂,所以一直很畏懼JAVA。但真正做了這個系統(tǒng)以后我才感覺到其實任何事都沒有難與不難之分,只要你肯努力的去做,世上無難事只怕有心人! 我現(xiàn)在對java學(xué)習(xí)充滿了熱情,我知道我還有很多的不足 還有很多需要努力的地方,所以我的JAVA之旅將繼續(xù)進行??第三篇:Java編程語言基礎(chǔ)總結(jié)
第四篇:編程語言Android java CC++的對比
第五篇:JAVA編程心得體會