日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 中静态内部类与普通内部类的区别

發布時間:2023/12/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 中静态内部类与普通内部类的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、靜態內部類與普通內部類的區別

1)普通內部類不能脫離外部類被創建;靜態內部類可以脫離外部類被創建。

2)普通內部類可訪問外部類的靜態和非靜態成員變量和方法(包括私有屬性),因其在外部類內部;靜態內部類只能訪問外部類的靜態成員,不能訪問外部類的非靜態成員。

3)普通內部類擁有對外部類的引用;靜態內部類沒有對外部類的引用。

4)普通內部類不能定義static成員變量和方法。

5)類的內部,可定內部接口,并且可定義一個內部類實現這個內部接口。

6)內部類可以多嵌套。

7)可以在方法體內定義一個內部類,方法體內的內部類可以完成一個基于虛方法形式的回調操作

注:static修飾的內部類,是一種較為特殊的內部類,Java文檔中描述static修飾的內部類:一旦內部類使用static修飾,那么此時這個內部類就升級為頂類。也就是說,除了寫在一個類的內部以外,static內部類具備所有外部類的特性,同外部類沒有分別。一般之定義和使用靜態內部場景:該內部類僅外部類用到,以此減少類文件數量,方便代碼維護和管理。

2、代碼驗證

package com.base;import lombok.Data;@Data public class OuterClass {public static int classNum = 1;public int classSort = 2;// ************************************************************************// 靜態內部類// ************************************************************************@Datapublic static class InnerStaticClass {private String name;public InnerStaticClass() {}public InnerStaticClass(String name) {this.name = name;}public void say() {System.out.println("我是【靜態內部類】,可被外部調用");}public static void speak() {System.out.println("我是【靜態內部類】,可被外部調用,且無需初始化就可調用");}}// ************************************************************************// 內部類// ************************************************************************public class InnerClass implements InnerClassInterface {private String name;//內部類不能定義static元素,包括:成員變量和方法//public static Integer age;public InnerClass() {}public InnerClass(String name) {this.name = name;}public void say() {System.out.println("我是【內部類】,可被本內部類對象調用");//【1】普通內部類能夠訪問外部類的靜態和非靜態成員,【靜態內部類】不能訪問外部類的非靜態成員,他只能訪問外部類的靜態成員System.out.println("我是【內部類】,可調用外部類非靜態屬性-班級名次:" + OuterClass.this.classSort);System.out.println("我是【內部類】,可以調用外部類靜態屬性-班級號碼:" + OuterClass.classNum);//【2】普通內部類持有對外部類的引用,【靜態內部類】沒有持有外部類的引用。OuterClass.this.speak();}public void speak() {System.out.println("我是【內部類】,可被外部類通過初始化調用");}//錯誤非【靜態內部類】,不允許聲明靜態的方法 // public static void speak() { // System.out.println("我是【靜態內部類】,我不需要初始化就可以調用"); // }//內部類可以多嵌套public class InnerInnerClass {}}//可以定義內部接口,且可以定義另外一個內部類實現這個內部接口public interface InnerClassInterface{void say();void speak();}public void speak() {System.out.println("我是【外部類】,可被內部類調用");new InnerClass().speak();}public static void main(String[] args) {InnerStaticClass.speak();System.out.println();InnerStaticClass innerStaticClass1 = new InnerStaticClass("李清華");innerStaticClass1.say();System.out.println();OuterClass outerClass = new OuterClass();//【3】一個普通內部類不能脫離外部類實體被創建,且可以訪問外部類的數據和方法,因為他就在外部類里面。InnerClass innerClass = outerClass.new InnerClass("張北大");innerClass.say();} }

打印輸出:

我是【靜態內部類】,可被外部調用,且無需初始化就可調用

我是【靜態內部類】,可被外部調用

我是【內部類】,可被本內部類對象調用
我是【內部類】,可調用外部類非靜態屬性-班級名次:2
我是【內部類】,可以調用外部類靜態屬性-班級號碼:1
我是【外部類】,可被內部類調用
我是【內部類】,可被外部類通過初始化調用

總結

以上是生活随笔為你收集整理的java 中静态内部类与普通内部类的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。