Java 的匿名內部類 非靜態內部類 靜態內部類

2021-08-18 23:41:24 字數 1438 閱讀 5483

首先先說一下非靜態內部類靜態內部類

這兩者斗是依附於乙個外部類的,然後在該外部類裡面實現自身的定義,在實現上的區別就是static修飾與否的區別:

public

class innerclasstest

public

void

somemethod()

//非靜態內部類

class nonstaticclass

}//靜態內部類

static class staticclass

}}

在非靜態內部類中,可以直接呼叫外部類的方法(包括成員方法與靜態方法),因為非靜態內部類預設持有外部類的引用,呼叫外部類的方法就是通過該引用實現的,但是靜態內部類就不一樣了,它無法直接引用外部類的非靜態方法,因為它不持有外部類的引用。這個跟類的成員方法與靜態方法有點類似。

然後就是匿名內部類了,實現如下:

new thread(new runnable() 

}).start();

//或者如下

runnable runnable = new runnable()

}

其中初始化thread時傳入的引數new runnable() {}就是乙個匿名內部類,只能使用一次(這裡說的使用一次不是說只能引用或者傳遞給其他方法一次,而是說每次例項化的時候都需要重新實現所有邏輯)這裡所說的匿名不是因為沒有給例項設定顯示的引用變數名,而是說該類在例項的時候沒有像下面那樣正常的定義(簡單的說就是沒有定義類名),而是直接實現。

class

myrunnable

implements

runnable

}

new

thread(new myrunnable()).start();

就像myrunnable就是正常的定義與實現,然後在thread中直接例項化。

當然,需要注意的是,當以匿名內部類直接實現時,該內部類也預設持有外部類的引用,所以,需要注意記憶體洩露的問題。

1、匿名內部類沒有正常的類名,一般都是直接繼承某個類或實現某個介面,而(非)靜態內部類有正常的類名、正常的定義與實現

2、匿名內部類每次例項化都要重現實現邏輯,而(非)靜態內部類可以直接使用定義的類名例項化

3、匿名內部類與非靜態內部類都持有外部類的引用,而靜態內部類沒有

Java內部類 區域性 匿名 成員 靜態內部類

我們所說的內部類,官方的叫法是巢狀類 nested classes 巢狀類包括靜態內部類 static nested classes 和內部類 inner classes 而內部類分為成員內部類,區域性內部類 local classes 和匿名內部類 anonymous classes 內部類是乙個...

內部類(非靜態 區域性 靜態 匿名)

目錄 內部類 非靜態 區域性 靜態 匿名 一 非靜態內部類 1.建立非靜態內部類 2.在外部類中訪問內部類 3.在外部類外訪問內部類 4.在內部類中訪問外部類 5.補充 二 區域性內部類 1.區域性內部類的建立 2.在區域性內部類中訪問外部類成員變數 3.在區域性內部類中訪問外部類的區域性變數 4....

成員內部類,區域性內部類,靜態內部類,匿名內部類

成員內部類 class demo1 innerclass a 內部類概述 b 內部類訪問特點 a 內部類可以直接訪問外部類的成員,包括私有。b 外部類要訪問內部類的成員,必須建立物件。外部類名.內部類名 物件名 外部類物件.內部類物件 class outer class demo2 innercla...