首先我們來看一下,android中有哪些地方使用到了靜態(tài)內(nèi)部類:
十載的銅山網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整銅山建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)從事“銅山網(wǎng)站設(shè)計”,“銅山網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實執(zhí)行。
靜態(tài)內(nèi)部類的主要特點:
1 不持有外部類的引用(普通內(nèi)部類持有)
2 可以直接創(chuàng)建實例,不需要先創(chuàng)建外部類(普通內(nèi)部類需要)
3 可以有靜態(tài)成員變量、方法(普通內(nèi)部類不行)和非靜態(tài)成員變量、方法
4 只可以直接訪問外部類靜態(tài)成員,不可以直接訪問外部類的非靜態(tài)成員(普通內(nèi)部類可以),需要通過傳入外部類引用的方式才能訪問
外部類與內(nèi)部類有很強的聯(lián)系,需要通過內(nèi)部類的方式維持嵌套的可讀性。
內(nèi)部類可以單獨創(chuàng)建。
內(nèi)部類不依賴于外部類,外部類需要使用內(nèi)部類,而內(nèi)部類不需使用外部類(或者不合適持有外部類的強引用)。
為什么不直接使用兩個類,而要使用內(nèi)部類?
1 維持兩者之間密切的聯(lián)系
2 保持嵌套可讀性
Context。
1、Context提供了關(guān)于應(yīng)用環(huán)境全局信息的接口。
2、它是一個抽象類,它的執(zhí)行被Androidstudio系統(tǒng)所提供達(dá)到創(chuàng)建內(nèi)部類MyBaseAdapter繼承自BaseAdap。
不是一定要用static聲明為靜態(tài)類,但是推薦作為內(nèi)部靜態(tài)類,因為內(nèi)部類會隱式持有外部類的引用,有些時候如果代碼處理不對容易造成內(nèi)存泄漏
下面就是個內(nèi)存泄漏的例子
public?class?MainActivity?extends?Activity?{
public?class?MyHandler?extends?Handler{
@Override
public?void?handleMessage(Message?msg)?{
if(msg.what==1){
new?Thread(){
@Override
public?void?run()?{
while(true){
//do?something
}
}
}.start();
}
}
}
public?MyHandler?handler;
@Override
protected?void?onCreate(Bundle?savedInstanceState)?{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//...
handler.sendEmptyMessage(1);
finish();
}
}
如上面代碼所示,在onCreate方法里發(fā)送了一條消息給handler處理然后finish方法關(guān)閉activity,但是代碼并不能如愿,因為在handler收到消息啟動了一個線程并且是死循環(huán),
這時候Thread持有handler的引用,而handler又持有activity的引用,這就導(dǎo)致了handler不能回收和activty也不能回收,所以推薦使用靜態(tài)內(nèi)部類,因為靜態(tài)內(nèi)部類不持有外部類的引用,可以避免這些不必要的麻煩
匿名內(nèi)部類可以不取名字,多好;嵌套內(nèi)部類可以隱藏實現(xiàn),也不錯;另外,內(nèi)部類從某種程度上可以實現(xiàn)多重繼承,建議google下。
創(chuàng)建項目:
1、File----New-----java Project
2、src右鍵添加 New----Package(添加一個包,命名為“成員內(nèi)部類”)
3、包右鍵添加New-----class/interface
注: 有main(String[] agre)函數(shù)的就是運行文件,如果要作為一般類使用,將注釋及main(String[] agrs)函數(shù)刪除。
4、運行:找到相對應(yīng)的運行文件,右鍵 Run as -----java Appliaction
因為上面已經(jīng)建了一個"成員內(nèi)部類"包,所以包右鍵添加New-----class
一、內(nèi)部類: 內(nèi)部類是定義在另一個類中的類,使用它的原因主要有3個: 內(nèi)部類方法可以訪問該類定義所在的作用域中的數(shù)據(jù),包括私有的數(shù)據(jù); 內(nèi)部類可以對同一個包中的其他類隱藏以來; 當(dāng)想要定義一個回調(diào)函數(shù)且不想編寫大量代碼時,使用匿名內(nèi)部
本文名稱:android內(nèi)部類,android 匿名內(nèi)部類
路徑分享:http://www.chinadenli.net/article2/dseddoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、品牌網(wǎng)站設(shè)計、商城網(wǎng)站、定制網(wǎng)站、、網(wǎng)頁設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)