黑马程序员技术交流社区

标题: 内部类问题2 [打印本页]

作者: 葛晓东    时间: 2014-5-29 21:25
标题: 内部类问题2
内部类方法
  1. class Outer
  2. {
  3.         public void show(){
  4.           final int x = 3;
  5.           class Inner
  6.            {
  7.                   public void abc(){
  8.                     System.out.println("Inner...abc"+x);
  9.                   }
  10.            }
  11.           new Inner().abc();
  12.         }
  13. }
  14. class InnerClassDemo3
  15. {
  16.         public static void main(String[] args)
  17.         {
  18.                 new Outer().show();
  19.         }
  20. }
复制代码
内部类的方法,访问局部变量,局部变量必须加final修饰这是为什么?






作者: 落叶非花    时间: 2014-5-29 21:27
因为没有创建对象,只是通过类名直接访问属性
作者: yang1352546    时间: 2014-5-29 21:44
show方法进栈,带着变量x一起进栈
  运行完毕了,show出栈,变量x死亡

  Inner是一个类,创建对象的,
  如果show方法死亡,Inner还有可能有对象存在
  对象调用abc 变量x已经死亡

  第一种说
    加final后,变量,变成常量,存储位置发生了变化
        常量池 'a' 12  生命最长的
        即使show出栈后,变量,还在常量池

  第二种说
    变量加上final后,生命周期没有改变
        跟着show的存在而存在,消失而消失
        x终身已经固定了,因此javac编译
    生成的class文件,abc方法中,写进去了abc2





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