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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小脚印 中级黑马   /  2014-3-8 17:20  /  949 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在听毕老师讲final时 最后有点困惑~望各位指导指导
“内部类定义在类中的局部位置时,只能访问该局部被final修饰的局部变量"
是什么意思?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

5 个回复

倒序浏览
如下 局部内部类 访问局部变量时  局部变量须final

  1. public class Test3 {
  2.         int x = 1; // 成员变量

  3.         void show() {
  4.                 final int x = 2; // 局部变量x (局部内部类访问了 ,要final)
  5.                 class Inner { // 局部内部类
  6.                         void method() {
  7.                                 System.out.println(1); // 这里访问了局部变量
  8.                         }
  9.                 }
  10.         }
  11. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
还有下面一种情况~:
public class Test3 {

        int x = 1; // 成员变量

        void show(final int x) {   //局部变量在函数形位置上,如果要被内部类访问,也必须加final

                     class Inner { // 局部内部类

                        void method() {

                                System.out.println(x); // 这里访问了局部变量

                        }

                }

        }

}

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
    因为匿名内部类是出现在一个方法的内部的,如果它要访问这个方法的参数或者方法中定义的变量,则这些参数和变量必须被修饰为final。因为虽然匿名内部类在方法的内部,但实际编译的时候,内部类编译成Outer.Inner,这说明内部类所处的位置和外部类中的方法处在同一个等级上,外部类中的方法中的变量或参数只是方法的局部变量,这些变量或参数的作用域只在这个方法内部有效。因为编译的时候内部类和方法在同一级别上,所以方法中的变量或参数只有为final,内部类才可以引用。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
class Test3 {

        int x = 1; // 成员变量

        void show(final int y) {   //局部变量在函数形位置上,如果要被内部类访问,也必须加final

                     class Inner { // 局部内部类

                        void method() {

                                System.out.println(y); // 这里访问了局部变量

                        }

                }

        }

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
谢谢~~各位 明白了~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马