黑马程序员技术交流社区

标题: 方法中的内部类能不能访问方法中的局部变量,为什么? [打印本页]

作者: 小悠久    时间: 2014-1-10 21:44
标题: 方法中的内部类能不能访问方法中的局部变量,为什么?
方法中的内部类可以访问方法中的局部变量,但是必须在局部变量前加修饰符final,否则将会编译错误。
   
    原因:在内存中,方法的局部变量是存储在堆栈中的, 当方法返回时,局部变量对应的栈就被回收了,当方法内部类去访问局部变量时就会发生错误。
    在java里面修饰词 final修饰过的变量的值是不可以被修改的,当在变量前加上final时,这样局部变量就会被分配在堆内存中。
    这样在进行编译时就不会出现访问变量的错误。
public class Test2 {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
      

//例子:
  example();
}
  private static void example() {
         final int a = 10;
         //String b = 20;  
         // 创建一个方法里的局部内部类  
         class Test
         {
             public void in() {
                 System.out.println(a);
                 //System.out.println(b);  
             }
         }
         Test test = new Test();
         //调用内部类方法
         test.in();
  
     }
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2