黑马程序员技术交流社区

标题: 求指导~ [打印本页]

作者: 小脚印    时间: 2014-3-8 17:20
标题: 求指导~
在听毕老师讲final时 最后有点困惑~望各位指导指导
“内部类定义在类中的局部位置时,只能访问该局部被final修饰的局部变量"
是什么意思?

作者: osully    时间: 2014-3-8 17:32
如下 局部内部类 访问局部变量时  局部变量须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. }
复制代码

作者: chen_x    时间: 2014-3-8 17:50
还有下面一种情况~:
public class Test3 {

        int x = 1; // 成员变量

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

                     class Inner { // 局部内部类

                        void method() {

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

                        }

                }

        }

}

作者: My_work    时间: 2014-3-8 17:57
    因为匿名内部类是出现在一个方法的内部的,如果它要访问这个方法的参数或者方法中定义的变量,则这些参数和变量必须被修饰为final。因为虽然匿名内部类在方法的内部,但实际编译的时候,内部类编译成Outer.Inner,这说明内部类所处的位置和外部类中的方法处在同一个等级上,外部类中的方法中的变量或参数只是方法的局部变量,这些变量或参数的作用域只在这个方法内部有效。因为编译的时候内部类和方法在同一级别上,所以方法中的变量或参数只有为final,内部类才可以引用。
作者: 学习代码    时间: 2014-3-8 18:01
class Test3 {

        int x = 1; // 成员变量

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

                     class Inner { // 局部内部类

                        void method() {

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

                        }

                }

        }

作者: 小脚印    时间: 2014-3-9 08:42
谢谢~~各位 明白了~




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