內部類之成員內部類

2022-01-28 14:58:11 字數 1578 閱讀 3035

一、位置

成員內部類是最普通的內部類,它定義在乙個類的內部

二、內部類的結構

1.可以定義非靜態屬性和方法,不可以定義static修飾的屬性和方法,可以定義static final修飾的編譯期變數【不用載入類的位元組碼】

1.1為什麼不可以定義static修飾的屬性和方法?

首先內部類是外部類的乙個成員,只有當外部類初始化的時候,內部類才能初始化,靜態變數屬於類級別,在類載入的時候就初始化,

所以兩者本身在語法上就有矛盾。

1.2為什麼可以定義static final修飾的變數?

首先要先知道sttaic final修飾的變數叫做常量,常量分為編譯期常量和非編譯期常量

編譯期常量:在程式編譯階段【不需要載入類的位元組碼】,就可以確定常量的值

非編譯期常量:在程式執行階段【需要載入類的位元組碼】,可以確定常量的值

public

class

outterclass

public

static

void

main(string args)

}

b屬性是靜態的,它需要載入類的位元組碼inner類,由於它是在outterclass內部,需要外部類例項化才能載入,但是呼叫處沒有例項化外部類,所以inner也不會類載入,所以報錯!!

c屬性是編譯期常量,它不需要載入類的位元組碼inner類,所以不會報錯

d屬性是非編譯期常量。它需要載入類的位元組碼inner類,所以報錯!!

2.內部類可以被任何訪問修飾符修飾

因為它也是類的成員

三、內部類訪問外部類

1.可以訪問任何屬性和方法【包括私有的、靜態的】

訪問方式有2種 :直接寫屬性名或者是外部類.this.屬性【方法】

1.1直接寫屬性名

這種方式有個缺點:如果內部類定義的屬性【方法】和外部類一樣,會發生隱藏現象,取得的是內部類的值,若想取得外部類的值,採用外部類.this.屬性【方法】

1.2若採用直接寫屬性名獲得外部類值,其實本質還是外部類.this.屬性

原始碼:

public

class

outter

}}

反編譯後的原始碼:outter.class【編譯成產生了2個位元組碼檔案outter.class和outter$inner.class】

public

class

outter

class

inner

}}

四、外部類訪問內部類

1.訪問普通屬性和方法

class

outter

}public

static

void

main(string args)

}

2.訪問常量

class

outter

public

static

void

main(string args)

}

以上是我對成員內部類的總結,如果有不對的地方還請指出,大家共同進步!!

內部類 成員內部類 區域性內部類 匿名內部類

public class 外部類 private int num 0 外部類如果要訪問內部類的成員,則需要通過內部類的物件訪問 使用方式 1.外部類使用內部類,主函式再使用外部類 2.通過new的方式 外部類.內部類 物件名 new 外部類 new 內部類 定義在方法內部的類,就是區域性內部類,只有...

內部類(成員內部類 靜態內部類 方法內部類)

一 成員內部類 最常見的內部類就是成員內部類,也稱作普通內部類 2 inner類中定義的test 方法可以訪問outer類中的資料,不受訪問控制符的影響。3 定義了成員內部類後,必須使用外部類物件來建立內部類物件,而不能直接去 new 乙個內部類物件,即 內部類 物件名 外部類物件.new 內部類 ...

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

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