中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

Android開(kāi)發(fā)必知的java嵌套類

2018-07-20    來(lái)源:編程學(xué)習(xí)網(wǎng)

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

嵌套類指定義在另一個(gè)類的內(nèi)部的類,嵌套類的存在只是為了他的外圍類。嵌套類有四種:靜態(tài)成員類,非靜態(tài)成員類,匿名類,局部類。

  • 靜態(tài)成員類是最簡(jiǎn)單的一種嵌套類。最好把它看做是一個(gè)普通的類,只是恰好定義在另一個(gè)類的內(nèi)部。靜態(tài)成員類可以訪問(wèn)外圍類的所有成員,包括那些私有的變量。靜態(tài)成員類同樣遵守可訪問(wèn)性規(guī)則,如果將它定位私有,它就指在外圍類的內(nèi)部才能訪問(wèn)到。

    1. 在Android中 最為熟悉listview的ViewHolder我們通常使用的就是靜態(tài)成員類,通常作為一個(gè)公有的輔助類。作為L(zhǎng)istview的緩存變量緩存view中布局。

    2. 私有靜態(tài)成員類,用來(lái)代表外圍類所代表的對(duì)象的組件。

      代碼如下

    public class PhotoListAdapter extends RecyclerView.Adapter<PhotoListAdapter.ImageVH> {
    static class ImageVH extends RecyclerView.ViewHolder {
           //代碼省略
        }
    }

    ?

  • 非靜態(tài)成員類與靜態(tài)成員類的語(yǔ)法區(qū)別在于是否有修飾符static 。盡管它們的語(yǔ)法很像,但是兩者的區(qū)別很大。非靜態(tài)成員類的每個(gè)實(shí)例都隱含這與外部類的一個(gè)外圍實(shí)例相關(guān)聯(lián),非靜態(tài)成員類實(shí)例方法內(nèi)部,可以調(diào)用外圍實(shí)例上的方法,只有靜態(tài)成員類的實(shí)例可以在外圍類獨(dú)立存在,沒(méi)有外圍實(shí)例的情況下,無(wú)法創(chuàng)建非靜態(tài)成員類的實(shí)例。

    當(dāng)非靜態(tài)成員類的實(shí)例創(chuàng)建,它與外圍實(shí)例之間的關(guān)聯(lián)也隨之被建立,而且這種關(guān)聯(lián)關(guān)系以后不能被修改。 這個(gè)關(guān)聯(lián)通常發(fā)生在外圍類的某個(gè)實(shí)例方法調(diào)用了非靜態(tài)成員類的構(gòu)造器時(shí)。 這種關(guān)聯(lián)關(guān)系需要消耗非靜態(tài)成員類實(shí)例的空間,并增加了構(gòu)造的時(shí)間開(kāi)銷(xiāo)。 如果成員類不需要訪問(wèn)外圍類實(shí)例 請(qǐng)加上static修飾詞 。

    public class PhotoListAdapter extends RecyclerView.Adapter<PhotoListAdapter.ImageVH> {
     class ImageVH extends RecyclerView.ViewHolder {
               // 真是對(duì)外部類的實(shí)例持有,在Android開(kāi)發(fā)中很大部分activity中的context的內(nèi)存泄露因?yàn)檫@個(gè)原因。
        }
    }

    ?

  • 匿名類不同與JAVA的其他語(yǔ)法單元,匿名類沒(méi)有名字,它不是外圍類的一個(gè)成員,它不與其他的成員一起被申明,而是在使用的同時(shí)被聲明實(shí)例化。匿名類可以出現(xiàn)在代碼任何存在表達(dá)式的地方。只有匿名類出現(xiàn)在非靜態(tài)的環(huán)境中,他才有外圍實(shí)例,即使它聲明在靜態(tài)的環(huán)境中,也不可能擁有任何靜態(tài)成員。

    imageView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                       // 代碼省略
                    }
                });

    ?

  • 局部類在任何"可以聲明局部變量"的地方聲明。同樣遵守作用域規(guī)則,1. 局部類擁有名字,可以被重復(fù)使用。2. 與匿名類,只有當(dāng)局部類是在非靜態(tài)環(huán)境定義的時(shí)候,才有外圍實(shí)例,不能包含靜態(tài)成員。

    public class mainActivity extends Activity{ 
    private Handler handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
               // 此處同樣可能引起context持有導(dǎo)致的內(nèi)存泄露
            }
        };
      }

    ?

 

來(lái)自:http://www.jianshu.com/p/907758c2a63f

 

標(biāo)簽: 代碼

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:如何隨apk一起打包并使用SQLite

下一篇:新手學(xué)習(xí)Python時(shí)常見(jiàn)的錯(cuò)誤