黑马程序员技术交流社区
标题:
求指导~
[打印本页]
作者:
小脚印
时间:
2014-3-8 17:20
标题:
求指导~
在听毕老师讲final时 最后有点困惑~望各位指导指导
“内部类定义在类中的局部位置时,只能访问该局部被final修饰的局部变量"
是什么意思?
作者:
osully
时间:
2014-3-8 17:32
如下 局部内部类 访问局部变量时 局部变量须final
public class Test3 {
int x = 1; // 成员变量
void show() {
final int x = 2; // 局部变量x (局部内部类访问了 ,要final)
class Inner { // 局部内部类
void method() {
System.out.println(1); // 这里访问了局部变量
}
}
}
}
复制代码
作者:
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