Java内部类之静态内部类(附详细代码示例)
/** 先上概况:关于静态内部类的总结:
* 1、静态内部类具有正常类的结构。
* 2、静态内部类的方法只能访问外部类的static相关的信息,不能访问实例相关的信息。
* 3、外部类只能访问内部类的static相关的信息,不能访问实例相关的信息。
* 4、使用:外部类.内部类 引用=new 外部类.内部类(); 来生成内部类对象;
* 5、利用引用.成员信息(属性、方法)调用(和正常一样的使用)。
* 6、访问静态内部类的静态信息,直接外部类.内部类.静态信息 的方式。
* 7、静态内部类可以独立存在,不依赖于其他外部类,类加载的时候同时加载内部类。
*/
1 package cn.goktech.staticinner; 2 3 public class OutClass { 4 public static String outStaticField = "外部类static属性"; 5 public int outInstanceField = 1; 6 7 8 static { 9 System.out.println("外部类OutClass的静态代码块"); 10 } 11 12 /** 13 * 外部类的实例方法和static方法中: 14 * 1、只能访问内部类的static相关的信息 15 * 2、不可以访问内部类实例信息 16 * (理解:整个内部类已经是static,就是静态成员,和其他静态成员的访问规则一样) 17 */ 18 public void outInstanceMethod() { 19 // System.out.println(innerInstanceField); //报错 20 // innerInstanceMethod(); //报错 21 System.out.println(StaticInnerClass.innerStaticField); // 使用外部类名访问static属性 22 StaticInnerClass.innerStaticMethod(); 23 } 24 25 public static void outStaticMethod() { 26 // System.out.println(innerInstanceField); 27 // innerInstanceMethod(); 28 System.out.println("在外部类的静态方法中访问内部类静态信息:" + StaticInnerClass.innerStaticField); // 使用外部类名访问static属性 29 StaticInnerClass.innerStaticMethod(); 30 } 31 32 static class StaticInnerClass { // 声明一个静态内部类 33 public static String innerStaticField = "内部类static属性"; 34 public int innerInstanceField = 1; 35 36 static { 37 System.out.println("内部类StaticInnerClass的静态代码块"); 38 } 39 40 /** 41 * 内部类的实例方法和static方法中: 42 * 1、只能访问外部类的static相关的信息 43 * 2、不可以访问外部类实例信息 44 * (理解:整个内部类已经是static,就是静态成员,和其他静态成员的访问规则一样) 45 */ 46 public void innerInstanceMethod() { 47 System.out.println("在内部类中的实例方法中访问外部类static属性:" + outStaticField); // 可以访问外部static属性 48 OutClass.outStaticMethod(); // 可以访问外部static方法 49 // System.out.println(outInstanceField); //报错,不可以访问外部非静态成员 50 } 51 52 public static void innerStaticMethod() { 53 System.out.println("在内部类中的静态方法中访问外部类static属性:" + outStaticField); // 可以访问外部static属性 54 //OutClass.outStaticMethod(); // 可以访问外部static方法,对重复调用所以暂时注释 55 // System.out.println(outInstanceField); //报错,不可以访问外部非静态成员 56 } 57 } 58 59 }
编写一个测试类
1 public class Test { 2 public static void main(String[] args) { 3 // 生成外部类对象,无法访问任何内部类信息 4 OutClass out = new OutClass(); 5 6 // 外部类.内部类.内部静态方法 7 OutClass.StaticInnerClass.innerStaticMethod(); 8 // 外部类.内部类.内部静态属性 9 System.out.println(OutClass.StaticInnerClass.innerStaticField); 10 11 // 外部类.内部类 引用 = new 外部类.内部类(); 12 OutClass.StaticInnerClass inner = new OutClass.StaticInnerClass(); 13 System.out.println("通过内部类的实例访问“内部类的实例属性”:" + inner.innerInstanceField); 14 } 15 16 }
输出结果简单展示:

各路大神多多指教!欢迎评论!

浙公网安备 33010602011771号