A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 葛晓东 中级黑马   /  2014-5-29 21:25  /  1042 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

内部类方法
  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修饰这是为什么?





2 个回复

倒序浏览
因为没有创建对象,只是通过类名直接访问属性
回复 使用道具 举报
show方法进栈,带着变量x一起进栈
  运行完毕了,show出栈,变量x死亡

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

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

  第二种说
    变量加上final后,生命周期没有改变
        跟着show的存在而存在,消失而消失
        x终身已经固定了,因此javac编译
    生成的class文件,abc方法中,写进去了abc2
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马