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