學(xué)習(xí)java怎么開始
Java語言的學(xué)習(xí)開始,很多同學(xué)不知道從哪入手?下面學(xué)習(xí)啦小編收集了一些關(guān)于開始學(xué)習(xí)Java方法,希望對你有幫助
從零開始學(xué)Java方法
1明確面向?qū)ο蟮姆懂?/p>
我們必須明確一個大方向,也就是說現(xiàn)在面向?qū)ο蟮木幊谭懂牎1M管人工智能曾經(jīng)有所浪潮(看看Borland為什么有Turbo Prolog),但未來5-10年工業(yè)界廣泛承認(rèn)并接受的將是面向?qū)ο笫降木幊獭?/p>
工業(yè)界目前最流行的面向?qū)ο缶幊陶Z言就是C++和Java。所以基本上鎖定這兩個方向就可以了。而且完全可以同時掌握。
2掌握J(rèn)ava的精華特性
掌握J(rèn)ava的精華特性的同時,一定要知道為什么。比如,Interface和multi-thread。用interface是更好的多繼承的模型,而多線程則是設(shè)計(jì)到語言一級的重要特性。要完全理解interface是為什么,用多線程又有幾種常用的編程模型。
3開始進(jìn)行設(shè)計(jì)
理解了語言的特性是為什么了之后,就可以試著上升到設(shè)計(jì)這個層次,畢竟學(xué)習(xí)語言是要用的。目前比較好的開發(fā)模式是采用自定向下的面向?qū)ο蟮脑O(shè)計(jì),加上MVC的模式(你可以看一下我介紹的關(guān)于MVC的內(nèi)容)。首先要找出最頂層的對象(這往往是最難的),然后一層一層往下遞歸,記住每次應(yīng)符合7+/-2的原則,因?yàn)槲覀內(nèi)说亩逃洃浘褪沁@樣。一般有圖形用戶界面的應(yīng)從界面開始設(shè)計(jì)。
4學(xué)習(xí)設(shè)計(jì)模式
有了基本設(shè)計(jì)模型后,可以學(xué)一些設(shè)計(jì)模式(Design Pattern)。這是目前證明很有效的。比如體系結(jié)構(gòu)模式(Layering分層,Pipe/Filter管道或過濾器),設(shè)計(jì)模式(有很多,比如對象池Object Pool、緩沖池Cache等),編程模式(比如Copy-on-Write)。
懂了這些模式之后,就會對系統(tǒng)的整體結(jié)構(gòu)有很好的把握,而學(xué)術(shù)上也有傾向一個系統(tǒng)完全可以由各種模式組合而成。前面提到的MT實(shí)際上就有好幾種模式,掌握后就不用自己花很多時間去試了。另外一個很重要的領(lǐng)域就是并行和分布式計(jì)算領(lǐng)域,大概有20種左右。
5進(jìn)行編程實(shí)踐
接下來就不能紙上談兵了,最好的方法其實(shí)是實(shí)踐。一般教科書上的例子并不能算是實(shí)踐,只能算是讓你掌握語言特性用的。而提倡做實(shí)際的Project也不是太好,因?yàn)槟氵€沒有熟練的能力去綜合各種技術(shù),這樣只能是你自己越來越迷糊。
我認(rèn)為比較好的方法是找一些比較經(jīng)典的例子,每個例子比較集中一種編程思想而設(shè)計(jì)的,比如在我的實(shí)踐當(dāng)中,我曾經(jīng)學(xué)習(xí)過一個很經(jīng)典的例子就是用Java實(shí)現(xiàn)的HotDraw(源自SmallTalk),你可以用rolemodel或hotdraw在搜索引擎上找一下,我記不大清楚了。好象 是個網(wǎng)站,上面有原代碼和一些基本設(shè)計(jì)的文檔。
另一個來源可以到 是個不錯的文檔基地。從HotDraw上我學(xué)到了什么是Framework,以及如何用rolemodel的方式來構(gòu)造,這樣我就可以應(yīng)用到其他的地方。順便說一句,這個例子你絕對不會覺得小,只會覺得大,并且他還是真正的商用的Framework。
6學(xué)習(xí)修改經(jīng)典例子
結(jié)合前面學(xué)到的設(shè)計(jì)模式你就可以很好的理解這些經(jīng)典的例子。并且自己可以用他來實(shí)現(xiàn)一些簡單的系統(tǒng)。如果可以對他進(jìn)行進(jìn)一步的修改,找出你覺得可以提高性能的地方,加上自己的設(shè)計(jì),那就更上一個層次了,也就會真正地感到有所收獲。
好象以上談的跟Java沒什么關(guān)系,其實(shí)我們早就應(yīng)該從單純的學(xué)習(xí)語言到真正的學(xué)習(xí)好編程的領(lǐng)域。學(xué)習(xí)技術(shù)是沒有止境的,你學(xué)習(xí)第一種語言可能要半年時間,以后每種語言都不應(yīng)該超過兩個月,否則你會覺得學(xué)習(xí)語言是包袱,是痛苦。
7學(xué)以致用
學(xué)習(xí)是為了用的,是為了讓你的程序產(chǎn)生價值,把握住這個原則會比較輕松點(diǎn)。
Java學(xué)習(xí)的20個常見誤區(qū)與細(xì)節(jié)
1. true、false和null在IDE中雖然以不同的顏色顯示,但是并不是關(guān)鍵字,而是“字面常量”,就和String類型的abc一樣。
2. String類是非可變類,其對象一旦創(chuàng)建,就不可銷毀。String類那些看似修改字符序列的方法實(shí)際上都是返回新創(chuàng)建的String對象,而不是修改自身對象。
3. 由于String對象是不可改變的,因此具有線程安全性,可以自由地實(shí)現(xiàn)共享。
4. 在String類內(nèi)部,是使用一個字符數(shù)組(char[])來維護(hù)字符序列的。String的最大長度也就是字符數(shù)組的最大長度,理論上最大長度為int類型的最大值,即2147483647.在實(shí)際中,一般可獲取的最大值小于理論最大值。
5. 在Java中,數(shù)組也是類,數(shù)組聲明的引用變量指向數(shù)組類型的對象。
6. Unicode碼使用16位字符編碼,在Java中用char類型來表示?,F(xiàn)在Unicode已經(jīng)擴(kuò)展到一百萬個字符,超出16位限制的成為增補(bǔ)字符。所有增補(bǔ)字符都不能用字符常量來表示。
7. 當(dāng)short,byte,char參加運(yùn)算時,結(jié)果為int型,而非與較高的類型相同。如果變量是byte,short,char類型,當(dāng)對其賦予編譯時期的常量,而該常量又沒有超過變量的取值范圍時,編譯器就可以進(jìn)行隱式的收縮轉(zhuǎn)換。這種隱式的收縮轉(zhuǎn)換是安全的,因?yàn)樵撌湛s轉(zhuǎn)換只適用于變量的賦值,而不適用于方法調(diào)用語句,即不適用于方法調(diào)用時的參數(shù)傳遞。
8. 注意char類型,這是一個無符號類型。因此,char與short或char與byte之間的轉(zhuǎn)換必須顯示地使用類型轉(zhuǎn)換。 從byte到char的轉(zhuǎn)換為擴(kuò)展收縮轉(zhuǎn)換,該轉(zhuǎn)換比較特殊,即先將byte擴(kuò)展轉(zhuǎn)換到int,然后再收縮到char。
9. 在整型數(shù)據(jù)間的擴(kuò)展轉(zhuǎn)換中,如果操作數(shù)是char類型(無符號類型),則進(jìn)行無符號擴(kuò)展,擴(kuò)展位為0.如果操作數(shù)是byte,short或int(有符號類型),則進(jìn)行有符號擴(kuò)展,擴(kuò)展位為該變量的符號位。
10. float類型可以保留7~8個有效數(shù)字,而double類型可以保留15~16個有效數(shù)字,因而當(dāng)int類型或long類型數(shù)值多于double或float地有效數(shù)字時,該值的一些最低有效位就會丟失,從而造成精度丟失,這時,就會采用IEEE754最近舍入模式,提取與該整型值最接近的浮點(diǎn)值。盡管整型向浮點(diǎn)型的轉(zhuǎn)換屬于擴(kuò)展轉(zhuǎn)換,但當(dāng)數(shù)值很大或很小(絕對值很大)時,就會產(chǎn)生一定的精度丟失。
11. 浮點(diǎn)的相除與求余運(yùn)算不同與整型的相除與求余運(yùn)算,當(dāng)除數(shù)為0時,浮點(diǎn)運(yùn)算不會產(chǎn)生ArithmeticException異常。
12. main()方法在表現(xiàn)行為上,與其他方法基本相同,可以重載,由其他方法調(diào)用,繼承,隱藏,也可以拋出異常,帶有類型參數(shù)。我們也可以在一個程序中通過反射來調(diào)用main方法(或其他方法)。
13. 當(dāng)兩個或多個方法的名稱相同,而參數(shù)列表不同時,這幾個方法就構(gòu)成了重載。重載方法可以根據(jù)參數(shù)列表對應(yīng)的類型與參數(shù)的個數(shù)來區(qū)分,但是,參數(shù)的名稱、方法的返回類型,方法的異常列表與類型參數(shù)不能作為區(qū)分重載方法的條件。
14. 構(gòu)造器是遞歸調(diào)用的,子類的構(gòu)造器會調(diào)用父類的構(gòu)造器,直到調(diào)用Object類的構(gòu)造器為止。
15. 構(gòu)造器沒有創(chuàng)建對象,構(gòu)造器是使用new創(chuàng)建對象時由系統(tǒng)調(diào)用的,用來初始化類的實(shí)例成員。從順序上說,先是創(chuàng)建對象,然后再調(diào)用構(gòu)造器的。(構(gòu)造器并沒有產(chǎn)生新的對象)
16. 默認(rèn)的構(gòu)造器不為空,該構(gòu)造器會調(diào)用父類的無參構(gòu)造器,并可能執(zhí)行實(shí)例成員變量的初始化。所以,默認(rèn)的構(gòu)造器至少調(diào)用了父類的構(gòu)造器,它做的工作還可能更多,包括實(shí)例變量聲明初始化與實(shí)例初始化塊,都是在構(gòu)造器中執(zhí)行的。
17. 當(dāng)==或!=運(yùn)算符的兩個操作數(shù)的類型一個是基本數(shù)據(jù)類型,另一個是包裝類引用類型時,將引用類型拆箱轉(zhuǎn)換為基本數(shù)據(jù)類型,然后比較兩個基本數(shù)據(jù)類型的值是否相等。
18. 接口是完全抽象的設(shè)計(jì),不能實(shí)例化。使A用new方式創(chuàng)建的借口類型,實(shí)際上是創(chuàng)建了一個匿名類,該匿名類實(shí)現(xiàn)了接口類型。
19. 如果兩個接口聲明了相同的變量x,則當(dāng)某接口同時繼承這兩個接口,或者某類同時實(shí)現(xiàn)這兩個接口時,通過簡單名稱訪問會產(chǎn)生編譯錯誤。
20. 如果兩個接口中聲明了相同名稱的方法m,并且兩個方法沒有構(gòu)成重載,則當(dāng)某接口能夠同時繼承這兩個接口,或者某類能夠同時繼承這兩個接口時,必須存在一種方法簽名,使得該簽名同時為兩個m方法簽名的子簽名,并且在方法的返回類型上,必須存在一種類型,使得該類型同時為兩個m方法返回類型的可替換類型。
猜你感興趣: