我從一年半前開(kāi)始學(xué)習(xí)Java至今,從開(kāi)始學(xué)習(xí)Java的時(shí)候,我開(kāi)始跑到j(luò)ava版去看,從一開(kāi)始的看別人的問(wèn)題,慢慢到了后來(lái)的回答別人的問(wèn)題,一年下來(lái)在學(xué)習(xí)方面真的感觸良多
現(xiàn)總結(jié)了一些Java學(xué)習(xí)過(guò)程中個(gè)人認(rèn)為的重點(diǎn),拿出來(lái)分享,也希望可以幫助后來(lái)者少走彎路,將有限精力集中起來(lái),趕緊走入Java的大門
從開(kāi)始學(xué)沒(méi)多久我就開(kāi)始使用Thinking in Java 2nd,個(gè)人還是比較喜歡這本書(shū)的,雖然到現(xiàn)在還未看完 ^_^
當(dāng)然因?yàn)楦魅说膶W(xué)習(xí)方法各不一樣,也有人喜歡看Core Java或者Java How to Program,這些都是好書(shū),選擇一本適合自己的看就是了 ^_^
主要說(shuō)說(shuō)Java的幾大塊吧,無(wú)法說(shuō)得很細(xì),因?yàn)槠鋵?shí)每一塊拿出來(lái)都能說(shuō)很多,我就說(shuō)一下這幾塊學(xué)習(xí)的時(shí)候的重點(diǎn)或者應(yīng)該注意的東西
數(shù)值類型:
雖然是面向?qū)ο蟮恼Z(yǔ)言,但是在使用上數(shù)值類型還是必不可少的,如果在C的學(xué)習(xí)中已經(jīng)掌握了C的數(shù)值計(jì)算和轉(zhuǎn)換規(guī)則,那我想這里應(yīng)該沒(méi)有什么問(wèn)題,只有兩點(diǎn)需要注意:1、14.0這樣的浮點(diǎn)常量被認(rèn)為是double型,只有加上f后綴才是float型的;2、整數(shù)常量說(shuō)起來(lái)被認(rèn)為是int型,但是在編譯時(shí),可以認(rèn)為編譯器將其看作能表示該數(shù)的最小數(shù)值,因此byte b = 100;不會(huì)報(bào)錯(cuò)
引用類型:
我也是從C/C++轉(zhuǎn)過(guò)來(lái)的,其實(shí)所謂引用類型在C++中已有體現(xiàn),就是傳參的時(shí)候有一種引用類型,從C來(lái)考慮,它就是一個(gè)指針,只不過(guò),我們不能對(duì)它進(jìn)行指針上的硬操作。所以這里的重點(diǎn)是:1、Java里所有的對(duì)象都是在堆中生成的,所以需要類似指針的東西指向它,那就是引用;2、我們通過(guò)引用操作的是引用所指向的對(duì)象,除了賦值操作外,應(yīng)該就沒(méi)有什么操作是針對(duì)引用本身的了,這一點(diǎn)是C的指針與Java的引用區(qū)別所在。
類和對(duì)象:
這是一個(gè)大塊,有很多東西,不展開(kāi)講了,就說(shuō)幾個(gè)重點(diǎn):1、類方法、類屬性與成員方法、成員屬性在加載、初始化、使用上的異同;2、在構(gòu)造函數(shù)中,this()和super()的用法;3、子類的加載過(guò)程、初始化過(guò)程和構(gòu)造過(guò)程;4、方法的重載和覆寫;5、覆寫所引出的多態(tài)問(wèn)題(注意:多態(tài)之應(yīng)用在方法上,對(duì)屬性沒(méi)有作用)
函數(shù)調(diào)用的參數(shù)傳遞:
如果把引用類型所記錄的地址值,就看作是引用類型變量的值的話,那么,Java的所有方法調(diào)用的時(shí)候,都是采用的值傳遞——數(shù)值類型傳數(shù)值,引用類型傳地址。
IO流:
與C比起來(lái),Java的輸入輸出,尤其是輸入是非常麻煩的,也許是因?yàn)槌鲇诿嫦驅(qū)ο蟮目紤]吧?不知道。Java提供了很多的IO流,但是我們并不必將各種IO都搞清楚,我們只需要了解字節(jié)流與字符流各有什么功能,字符流是如何在字節(jié)流之上構(gòu)造的,幾乎所有的字符流構(gòu)造的時(shí)候都是建立在一個(gè)已有的字節(jié)流的基礎(chǔ)上的,并且它的這種設(shè)計(jì)使得我們可以像套管子一樣,將IO流一節(jié)一節(jié)套起來(lái),直到得到我們想使用的IO對(duì)象(例:BufferedReader的使用)。在我們以后使用的時(shí)候,我們可以再去查API,我覺(jué)得主要要看的幾個(gè)類是:FileReader、FileWriter、BufferedReader,再配合上System.out對(duì)象,對(duì)于文本的輸入、輸出來(lái)說(shuō),就足夠用了,至于其他的,我覺(jué)得不考試的話,沒(méi)有必要看那么多,用的時(shí)候再看了(我使用Java一年半來(lái),基本上就在使用BufferedReader和System.out)
容器:
個(gè)人認(rèn)為,這是Java編程的一大利器,我最愛(ài)用的類是:ArrayList(List)作為可變長(zhǎng)數(shù)組、HashMap(Map)用來(lái)建立查找表,Set我很少用,只在HashMap的使用中連帶用過(guò)一些。通過(guò)對(duì)這兩個(gè)類的熟悉,能夠?qū)ist、Set和Map三大類的基本用法掌握。另外它的幾個(gè)輔助類要掌握:Iterator和Collections。Collections類提供容器的一些通用工具,比如排序。而說(shuō)到排序,就牽扯出了比較器:Comparator。能夠熟練使用Comparator類,可以讓你為自己的需求和自己的類定制排序方案。
AWT和SWING:
個(gè)人認(rèn)為,Java在圖形界面的制作上有著非常好的封裝性,我以前曾經(jīng)試圖學(xué)過(guò)MFC,MFC在生成圖形界面的時(shí)候會(huì)幫助你生成一些代碼,然后讓你在這些代碼的指定位置添加代碼以實(shí)現(xiàn)功能,我這個(gè)人有個(gè)習(xí)慣,如果讓我看到了一些東西,那么我不搞清除為什么這么寫,就不會(huì)往下走,看到那許多代碼,自然就想弄清楚那些是什么,結(jié)果引出來(lái)好多知識(shí),后來(lái)我才知道其中有些是調(diào)用WinAPI,結(jié)果我到現(xiàn)在還是不會(huì)用MFC。這里并不是貶低MFC,我相信MFC有其過(guò)人之處,只不過(guò)個(gè)人認(rèn)為它的封裝性做得不好,暴露出了太多東西,也許能夠提高靈活性,不過(guò),可能我跟它無(wú)緣:(。在這方面Java就做得不錯(cuò),給你一個(gè)類,你用就是了,它將圖形界面的低層實(shí)現(xiàn)隱藏的很好,將其作為一個(gè)對(duì)象給你,而你只需要在這個(gè)對(duì)象上修修改改,挺方便的 ^_^
作為初學(xué)者,我覺(jué)得AWT的重點(diǎn)在于它的幾個(gè)Listener的用法,還有布局格式,然后就是那許多的Component的用處和用法(不過(guò),我覺(jué)得,等到用的時(shí)候再去找合適的Component進(jìn)行學(xué)習(xí)應(yīng)該也不算太遲 ^_^)
不過(guò),因?yàn)槲覀(gè)人使用的原因,所以至今AWT和SWING都用得很少,所以這方面也就不便多說(shuō)了,抱歉 ^_^
寫這些并不是告訴大家怎么解決問(wèn)題,因?yàn)槊恳粋(gè)都有很多可寫,只是希望能給初學(xué)者一點(diǎn)參考,希望能夠幫助初學(xué)者們有的放矢地看書(shū)。
第一次寫這么多東西,歡迎大家探討、指正。謝謝 ^_^