非静态内部类是指没有用static关键字修饰的内部类,而成员内部类是其中的一种。如下代码所示,在成员内部类Draw中,int a
之前不可以加static,会提示Inner classes cannot have static declarations
。这是因为static修饰的成员在类加载的时候直接运行,而非静态资源是在类new(实例化)的时候加载的,而如果a
是静态的,则是可以通过类名.直接访问的,但成员内部类是需要外部类实例化之后才能进行内部类的实例化,即内部类对象依赖于外部类对象的存在而存在。如果要深入地了解,需要去学习JVM的类加载机制。
public class Circle {
private double radius;
private static final double PI = 3.14 ;
class Draw{
private String type;
private /* static */int a = 10;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
}