內部類(基礎)

2021-08-02 14:39:14 字數 1945 閱讀 8458

內部類可以直接訪問外部類的成員

外部類想要訪問外部類的成員,先需要例項化內部物件也就是(new內部物件)

outer.inner inner=new outer().new inner()
成員內部類持有外部類物件的引用

先建立乙個net類

public class net 

public void loaddata( )

}

然後再建立ui類

public class ui 

class net

}}

ui類裡面有net內部類

再建立乙個測試類test

public class test 

}

輸出結果為:正在更新hello wrold

成員內部類可能出現記憶體洩漏的問題,記憶體越用越少,有些物件沒有釋放完畢。(如果你想釋放外部類物件,但是成員內部類持有外部物件的引用。因此**不了。)

建立靜態內部類

public class helloworld 

}

測試靜態內部類

public static void main(string args) 

}

輸出結果:

訪問外部類中的非靜態變數dynamic_score:77

訪問內部類中的score:91

net net=new net()};

bufferedreader br=new bufferedreader(new filereader(""));

注意事項:

1、匿名內部類中是不能定義建構函式的。

2、匿名內部類中不能存在任何的靜態成員變數和靜態方法。

3、匿名內部類不能是抽象的,它必須要實現繼承的類或者實現的介面的所有抽象方法。

4、沒有抽象方法的抽象類。

這裡定義了乙個人吃的抽象方法

要想在抽象類中使用匿名內部類,必須實現乙個繼承或者乙個介面

abstract class person

class child extends person

}public class demo

}

輸出結果為:

eat something

體現區域性內部類的**

class out

}new in().inprint();

}}

final int x 

由上面**可知:

區域性內部類訪問方法中的變數的時候,變數需要是final修飾的

測試類

public class demo

}

執行結果為:312

在上面的**中,我們將內部類移到了外部類的方法中

內部類移到了外部類

public void print(final int x) {

class in {

在外部類的方法中再生成乙個內部類物件去呼叫內部類方法

main方法中的:

out.print(3);

注意事項:

1、此類不能使用public、private修飾。

2、其作用域被限定在宣告此類的方法中。

3、和其他內部類相比,它具有可以訪問方法引數的優點。

4、被區域性內部類使用的方法引數必須是final的。

5、區域性類只能訪問(使用)這個塊中(區域性類外)final屬性。這裡的塊包括了上面說的塊、構造器、方法。

6、在類外不可直接生成區域性內部類,要想使用區域性內部類時需要生成物件,物件呼叫方法,在方法中才能呼叫其區域性內部類。

java基礎 內部類和匿名內部類

內部類 class a 編譯後的結果 內部類編譯後都是以這種形式 外部類 內部類 如何生成內部類 class test 注意點 class a b是a的內部類,b可以使用a的成員變數,但不是繼承它,僅僅是可以使用。匿名內部類 正常的程式 inte ce aclass b class aimpl im...

java基礎 內部類

一 內部類 將乙個類定義在另乙個類的裡面,對裡面那個類就稱為內部類 內建類,巢狀類 非static內部類可以直接訪問外部類中的成員,包括私有成員。原因 因為內部類中持有了乙個外部類的引用,引用的格式為 外部類名.this 非靜態內部類不能定義static成員 1 內部類定義在外部類的成員位置上 方法...

java基礎《內部類》

一 內部類的訪問規則 1.內部類可以直接訪問外部類中的成員,包括私有 之所以可以直接訪問外部類中的成員,是因為內部類中持有了乙個外部類的引用 格式 外部類名.this 2.外部類要訪問內部類,必須建立內部類物件 訪問格式 1.當內部類定義在外部類的成員位置上,而且非私有,可以在外部其他類中,可以直接...