掌握 Java 絕非易事,因?yàn)樵S多概念非秤承玻晦澀,非常復(fù)雜
大概每個(gè)人在學(xué)生時(shí)代開始就使用Java了甲雅,我們一直在學(xué)習(xí)Java解孙,但Java中總有一些概念含混不清,不論是對初級還是高級程序員都是如此抛人。所以弛姜,這篇文章的目的就是弄清楚這些概念。讀完本文你會對這些概念有更深入的了解妖枚,還能弄清楚一切灰色的東西廷臼。在本書中,我們將討論匿名內(nèi)聯(lián)類绝页、多線程荠商、同步和序列化。
匿名類的用法多線程同步的實(shí)現(xiàn)序列化
匿名類
Java匿名類很像局部類或內(nèi)聯(lián)類续誉,只是沒有名字莱没。我們可以利用匿名類,同時(shí)定義并實(shí)例化一個(gè)類屈芜。只有局部類僅被使用一次時(shí)才應(yīng)該這么做。匿名類不能有顯式定義的構(gòu)造函數(shù)属铁。相反,每個(gè)匿名類都隱含地定義了一個(gè)匿名構(gòu)造函數(shù)。
創(chuàng)建匿名類有兩種方法:
擴(kuò)展已有的類(可以是抽象類拼卵,也可以是具體類)創(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)建蟹漓,也可以通過擴(kuò)展抽象或具體的類來創(chuàng)建。上例中我先創(chuàng)建了一個(gè)接口Football嗽交,然后在類的作用域和main()方法內(nèi)實(shí)現(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)建匿名類時(shí)可以使用任何構(gòu)造方法唁盏。注意這里也使用了構(gòu)造方法的參數(shù)。匿名類可以擴(kuò)展頂層類,并實(shí)現(xiàn)抽象類或接口刽严。所以,訪問控制的規(guī)則依然適用倒脓。我們可以訪問protected變量甘晤,而改成private就不能訪問了。由于上述代碼中擴(kuò)展了Football類饲做,我們不需要重載所有方法线婚。但是,如果它是個(gè)接口或抽象類艇炎,那么必須為所有未實(shí)現(xiàn)的方法提供實(shí)現(xiàn)酌伊。匿名類中不能定義靜態(tài)初始化方法或成員接口。匿名類可以有靜態(tài)成員變量缀踪,但它們必須是常量居砖。匿名類的用途:
更清晰的項(xiàng)目結(jié)構(gòu):通常我們在需要隨時(shí)改變某個(gè)類的某些方法的實(shí)現(xiàn)時(shí)使用匿名類。這樣做就不需要在項(xiàng)目中添加新的*.java文件來定義頂層類了驴娃。特別是在頂層類只被使用一次時(shí)奏候,這種方法非常好用。UI事件監(jiān)聽器:在圖形界面的應(yīng)用程序中唇敞,匿名類最常見的用途就是創(chuàng)建各種事件處理器蔗草。例如咒彤,下述代碼:button.setOnClickListener(new View.OnClickListener() {publicvoidonClick(View v) {// your handler code here?}?});
我們創(chuàng)建了一個(gè)匿名類,實(shí)現(xiàn)了setOnClickListener接口咒精。當(dāng)用戶點(diǎn)擊按鈕時(shí)會觸發(fā)它的onClick方法镶柱。
多線程
Java中的多線程能夠同時(shí)執(zhí)行多個(gè)線程。線程是輕量級的子進(jìn)程模叙,也是處理的最小單位歇拆。使用多線程的主要目的是最大化CPU的使用率。我們使用多線程而不是多進(jìn)程范咨,因?yàn)榫€程更輕量化故觅,也可以共享同一個(gè)進(jìn)程內(nèi)的內(nèi)存空間。多線程用來實(shí)現(xiàn)多任務(wù)渠啊。
除了以上的內(nèi)容的內(nèi)容以外输吏,還有很多是為我們需要記住并且疑惑的事情。
合肥北大青鳥一元校區(qū)是隸屬于北大青鳥旗下的一家IT培訓(xùn)機(jī)構(gòu)替蛉,這里有豐富的Java教育資源贯溅,完善的教育體系,和多個(gè)大型企業(yè)擁有合作躲查,學(xué)員學(xué)完課程之后推薦就業(yè)【北大青鳥一元校區(qū) www.kgcbdqn.com】百度搜索“北大青鳥一元校區(qū)”,即可領(lǐng)取試聽課程盗迟,這里有專業(yè)的講解,幫你撥開云霧熙含,解決你的疑惑