public static void main(String[] args) {
final int i = 10;
class T {
T(){
System.out.println(i);
}

}
}

解决方案 »

  1.   

    不赞同infowain(infowain)的说法。
    下面这个程序的内部类不是在静态里,但也编译不过去。
    public class Test3
    {
    public static void main(String [] args)
    { }
    }class A
    {
    public  void display()
    {
    int i = 1;
    class inner
    {
    public void innerDisplay()
    {
    System.out.println(i);
    }
         }
    }
    }
      

  2.   

    应该是:方法里边的内部类只能访问final类型的变量。至于为什么,我也不知道。
      

  3.   

    从代码上来看
    内部类之能够访问外布的成员但是不能够改变外部的成员
    因为final类型的变量是不能够改变的。
      

  4.   

    我以为 当内部类却实执行的时候他看到的数据应该和刚开始诞生(定义)之时一样的才能避免很多变成错误(比如当内部类开启一个线程去工作的时候,当这个线程满足条件运行的时候,却发现原来成立的条件全都变了,那这不是很怪异的错误,在复杂的环境中这样的错误变得不可预料)。Java 应该是一门很“安全”的语言。
      

  5.   

    因为 i 只能在main中被访问,出了main,i就不存在了,而T是一个局部内部类,如果在其他地方势力化一个T对象,它是不能访问 i 的,把 i 定义为final的话,类T会在其内部创建一个变量保存i,使其在外部也能被访问,但这个创建的变量是不可见的,系统自动会维护,
      

  6.   

    这个程序写得真是随心所欲.虽然我不明白编译器是如何编译解释JAVA程序的,但是这几条语句是做不了什么事情的.
      

  7.   

    just remember it ,no why
      

  8.   

    public static void main(String[] args) {
    final int i = 10;
    class T {
    T(){
    System.out.println(i);
    }}
    }
    最好不要在main 函数中这样写,不规范
    用final的意思是:在方法中定义的内部类只能访问方法中的final类型的局部变量