package 内部类例子;public class Part_Inner {
   public int out1;
   public void method1 (final int p1,int p2){
   int local1=1;
   final int local2=2;
   class inner{
   public int inner1=out1;
   public int inner2=p1;
  // public int inner3=p2;   //报错
  // public int inner4=local1;//报错
   public int inner5=local2;
   public void method2(){
          // System.out.println(p2);//报错
         // System.out.println(local1);//报错        
   }        
   }        
   }
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
为什么局部内部类无法访问他所在方法的一般成员变量local1,而只能够访问final修饰的变量local2,  但是却能访问外部类的一般变量ou1;
请问这是什么原因啊??  

解决方案 »

  1.   

    java中方法中的数据是保存在堆栈中的,而对象是保存在堆中的,只有当你方法执行的时候堆栈里才有方法内的变量数据,当你这个方法执行完后里面的数据可能已经不存在了,而你的对象却仍然存在,这时你如何保证访问方法内的数据,所以java规定局部内部类只能访问方法内的final类型的变量,而你的ou1也是堆里的数据当然就可以访问.
      

  2.   

    java规定局部内部类只能访问方法内的final类型的变量正解