掌握 Java 絕非易事,因為許多概念非?;逎?,非常復雜

大概每個人在學生時代開始就使用Java了,我們一直在學習Java,但Java中總有一些概念含混不清,不論是對初級還是高級程序員都是如此。所以,這篇文章的目的就是弄清楚這些概念。讀完本文你會對這些概念有更深入的了解,還能弄清楚一切灰色的東西。在本書中,我們將討論匿名內(nèi)聯(lián)類、多線程、同步和序列化。
匿名類的用法多線程同步的實現(xiàn)序列化
匿名類
Java匿名類很像局部類或內(nèi)聯(lián)類,只是沒有名字。我們可以利用匿名類,同時定義并實例化一個類。只有局部類僅被使用一次時才應該這么做。匿名類不能有顯式定義的構(gòu)造函數(shù)。相反,每個匿名類都隱含地定義了一個匿名構(gòu)造函數(shù)。
創(chuàng)建匿名類有兩種方法:
擴展已有的類(可以是抽象類,也可以是具體類)創(chuàng)建接口理解代碼的最好方法就是先閱讀,所以我們首先來看看代碼。
interfaceFootball{voidkick();}classAnnonymousClass {publicstatic Football football = new Football() {?@Overridepublicvoidkick() {?System.out.println("Nested Anonymous Class.");?}?};publicstaticvoidmain(String[] args){// anomynous class inside the methodFootball footballObject = new Football()?{?@Overridepublicvoidkick(){System.out.println("Anonymous Class");?}?};?footballObject.kick();AnnonymousClass.football.kick();?}?}
匿名類可以在類和函數(shù)代碼塊中創(chuàng)建。你也許知道,匿名類可以用接口來創(chuàng)建,也可以通過擴展抽象或具體的類來創(chuàng)建。上例中我先創(chuàng)建了一個接口Football,然后在類的作用域和main()方法內(nèi)實現(xiàn)了匿名類。Football也可以是抽象類,也可以是與interface并列的頂層類。
Football可以是抽象類,請看下面的代碼。
publicabstractclassFootball{?abstractvoidkick();}
匿名類不僅可以是抽象類,還可以是具體類。
// normal or concrete classpublic classFootball{ public void kick(){}}// end ofclassscope.
如果Football類沒有不帶參數(shù)的構(gòu)造方法怎么辦?我們可以在匿名類中訪問類變量嗎?我們需要在匿名類中重載所有方法嗎?
// normal or concrete classpublicclassFootball {protectedint score;publicFootball(int score){this.score = score;?}publicvoidscore(){?System.out.println("Score "+score);};publicvoidkick(){}publicstaticvoidmain(String[] args) {?Football football = new Football(7)?{?@Overridepublicvoidscore() {?System.out.println("Anonymous class inside the method "+score);?}?};?football.score();?}}// end of class scope.
創(chuàng)建匿名類時可以使用任何構(gòu)造方法。注意這里也使用了構(gòu)造方法的參數(shù)。匿名類可以擴展頂層類,并實現(xiàn)抽象類或接口。所以,訪問控制的規(guī)則依然適用。我們可以訪問protected變量,而改成private就不能訪問了。由于上述代碼中擴展了Football類,我們不需要重載所有方法。但是,如果它是個接口或抽象類,那么必須為所有未實現(xiàn)的方法提供實現(xiàn)。匿名類中不能定義靜態(tài)初始化方法或成員接口。匿名類可以有靜態(tài)成員變量,但它們必須是常量。匿名類的用途:
更清晰的項目結(jié)構(gòu):通常我們在需要隨時改變某個類的某些方法的實現(xiàn)時使用匿名類。這樣做就不需要在項目中添加新的*.java文件來定義頂層類了。特別是在頂層類只被使用一次時,這種方法非常好用。UI事件監(jiān)聽器:在圖形界面的應用程序中,匿名類最常見的用途就是創(chuàng)建各種事件處理器。例如,下述代碼:button.setOnClickListener(new View.OnClickListener() {publicvoidonClick(View v) {// your handler code here?}?});
我們創(chuàng)建了一個匿名類,實現(xiàn)了setOnClickListener接口。當用戶點擊按鈕時會觸發(fā)它的onClick方法。
多線程
Java中的多線程能夠同時執(zhí)行多個線程。線程是輕量級的子進程,也是處理的最小單位。使用多線程的主要目的是最大化CPU的使用率。我們使用多線程而不是多進程,因為線程更輕量化,也可以共享同一個進程內(nèi)的內(nèi)存空間。多線程用來實現(xiàn)多任務。
除了以上的內(nèi)容的內(nèi)容以外,還有很多是為我們需要記住并且疑惑的事情。
合肥北大青鳥一元校區(qū)是隸屬于北大青鳥旗下的一家IT培訓機構(gòu),這里有豐富的Java教育資源,完善的教育體系,和多個大型企業(yè)擁有合作,學員學完課程之后推薦就業(yè)【北大青鳥一元校區(qū) www.kgcbdqn.com】百度搜索“北大青鳥一元校區(qū)”,即可領取試聽課程,這里有專業(yè)的講解,幫你撥開云霧,解決你的疑惑