Java之静态方法中的内部类
静态方法中不能直接创建内部类,为什么呢?在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。
静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法。
在静态方法中,当尝试直接去 new一个内部类(没有先 new 该内部类的外部类)的时候,由于静态方法无需创建对象,静态方法会尝试直接创建一个内部类(不会去创建该内部类的外部类),但矛盾的是内部类能访问各成员变量意味着一定存在外部类实体对象(内部类存在的本身的前提是有该内部类的外部类)。
所以在这个地方出现了矛盾,即静态方法中不能直接创建内部类。
有以下几种解决办法:
1. new内部类时需要加final修饰(必须final!);
2. 写一个非静态方法!
3. new 外部类().非静态方法。