【发布时间】:2019-10-07 11:47:12
【问题描述】:
如何在下面的代码中通过x = 12 的值打印 12,
注意我们不能更改变量名
public class Master {
final static int x = 10;
private void display() {
final int x = 12; // How to print this in run() method
Runnable r = new Runnable() {
final int x = 15;
@Override
public void run() {
final int x = 20;
System.out.println(x); //20
System.out.println(this.x); //15
System.out.println();// What to write here to print (x = 12)
System.out.println(Master.x); //10
}
};
r.run();
}
public static void main(String[] args) {
Master m = new Master();
m.display();
}
}
任何帮助将不胜感激。
【问题讨论】:
-
你不应该这样做。
x=12是您方法的本地变量。从理论上讲,master.this.x也不应该是可见的,但是您可以访问它,因为在执行匿名可运行文件时,外部类实例存在。仅供参考:您应该以大写字母Master开头类名,否则您可能会将它们误认为是变量。 -
我认为唯一的方法是将 x=12 更改为 xx=12 然后直接在可运行对象中使用它:) 很好的问题
-
建议重命名变量/字段 - 所以它只对混淆读者有好处(和一点学习)
-
实际上这是一个关于变量名范围和阴影的好问题。在您的情况下,我认为不重命名就无法访问该方法的 x。
-
PS,我删除了“多线程”标签,因为这个问题似乎与线程无关。
标签: java variables scope shadowing