java中非静态内存类可以有静态方法和静态变量的呀?

public class Test {
private String name = "OuterClass Name" ;

public class InnerClass {

static final String name = "InnnerClass static Var" ;

public void sayNAME() {
System.out.println(name);
System.out.println(Test.this.name);
}
}

public static void main(String args[]) {
Test test = new Test() ;
Test.InnerClass innerClass = test.new InnerClass() ;
innerClass.sayNAME() ;
}
}

为什么大家都说非静态内部类不能有静态的变量和方法,我的却可以呢?我是白的。

您好,提问者:
你不明白static跟final的真正含义。
单纯的static呢 是程序一运行就在内存中开辟空间,而非静态是不允许调用 将其修改的。
final修饰的static却不一样,因为final是不可修改的,也就是说内存中final static的值是不可能被修改的,当然可以在非静态中调用了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-18
你把final去掉试试,看能通过么?
问题就处在了final上面,final修饰之后的变量为不可变变量,它可以被同一个类中的其他线程使用,存放的位置也有不同,在该类第一次执行时,优先装在进入内存,然后直到该类结束都不会变,而存取final变量的区域我想应该可以理解为共享区域,这样想一下,内部类的static变量也就编译通过了!
第2个回答  2013-02-17
final 修饰的静态变量可以 这是一个特列。
相似回答