#定义
Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类。
有static关键字修饰的内部类。
比如:Pattern类中的Node类。
public class Outer { private static String s1 = "this is s1 in Outer"; private static String s2 = "this is s2 in Outer"; public void method1() { // 外部类可通过内部类的对象调用内部类的私有成员变量或方法 System.out.println(new Inner().s1); System.out.println(new Inner().method2()); } private static String method2() { return "this is method2 in Outer"; } // 内部静态类 public static class Inner { private String s1 = "this is s1 in Inner"; private static String s3 = "this is s3 in Inner"; public void method1() { // 内部类可直接访问外部类的私有静态成员变量或方法 System.out.println(s2); // 内部类和外部类有同名变量和方法时 System.out.println(s1); System.out.println(Outer.s1); System.out.println(method2()); System.out.println(Outer.method2()); } private String method2() { return "this is method2 in Inner"; } } }
------外部类测试--------
this is s1 in Inner
this is method2 in Inner
------内部类测试--------
this is s2 in Outer
this is s1 in Inner
this is s1 in Outer
this is method2 in Inner
this is method2 in Outer
1、创建静态内部类方式:Outer.Inner inner = new Outer.Inner();静态内部类不依赖于外部类。
2、外部类可通过内部类的对象调用内部类的私有成员变量或方法。
3、静态内部类访问的外部类成员变量或方法为什么不能是非静态的,而成员内部类可以?
成员内部类中有外部类的引用,所以成员内部类对外部类的私有非静态变量和方法可以随意访问。
从静态内部类它不存在对外部类的引用,所以仅能访问外部类的静态成员变量或方法。
4、静态内部类中可定义静态的成员变量和方法。
#总结
1、创建静态内部类方式:Outer.Inner inner = new Outer.Inner();静态内部类不依赖于外部类。
2、外部类可通过内部类的对象调用内部类的私有成员变量或方法。
3、静态内部类访问外部类的静态成员变量或方法必须是静态的。
4、静态内部类中可定义静态的成员变量和方法。
5、外部类可以创建静态内部类的实例,即使是私有的;并可通过内部类的实例访问内部类的成员变量和方法,即使是私有的。
#静态内部类的作用
1)首先,用内部类是因为内部类与所在外部类有一定的关系,往往只有该外部类调用此内部类。所以没有必要专门用一个Java文件存放这个类。
2)静态都是用来修饰类的内部成员的。比如静态方法,静态成员变量,静态常量。它唯一的作用就是随着类的加载(而不是随着对象的产生)而产生,以致可以用类名+静态成员名直接获得。
这样静态内部类就可以理解了,因为这个类没有必要单独存放一个文件,它一般来说只被所在外部类使用。并且它可以直接被用 外部类名+内部类名 获得。
3)普通内部类把它理解为与外部类绑定了,创建普通内部类对象一定要通过外部类的对象new才行。而静态内部类是不需要的
#参考
https://www.cnblogs.com/SQP51312/p/6102620.html
https://zhidao.baidu.com/question/149873207.html