一个类定义了静态方法,那么你可以通过 ClassName.methodName 进行调用,这时类没有创建对象,当然也可能创建了N个对象。所以,在静态方法内部,是不允许访问非静态成员的(包括方法和类变量),因为在静态方法内无法确定访问的是哪个对象的方法或变量。
OK,明白以上道理后,在Java中,内部类是可以访问其所在的外部内的非静态成员的(方法、类变量)。或者说,一个类部类被创建之前必须先创建其外部类。再或者说,内部类的创建必须是用一个外部对象进行创建。
上面说得很抽象,你可以假设一下:假设Java中允许静态方法直接创建内部类对象,那么以下代码程序将无法知道输出什么
public class Test {
private int value;
class InnerClass{
public InnerClass(){
System.out.println(value);
}
}
public Test(int value){
this.value = value;
}
public static void f(){
new InnerClass();
}
public static void main(String[] args){
Test t1 = new Test(10);
Test t2 = new Test(20);
Test.f();
}
}