我正在测试下面的代码片段,我需要知道如何访问 t.x 或 t.hello?其范围是什么?
开发者是这样定义变量的吗?
public class Test{
public Test(){
System.out.print("constructor\n");
}
public static void main(String[] args) {
Test t = new Test(){
int x = 0;
//System.out.print("" + x);
void hello(){
System.out.print("inside hello\n");
}
};
}
Edit
但为什么这个片段有效
Thread tr = new Thread() {
int loops = 1;
@Override
public void run() {
loops += 1;
}
};
tr.start();
您应该区分声明和定义。
在你的情况下,你声明一个类变量Test
并将其分配给某个派生类的对象Test
(它是一个匿名类)其中有一些额外的东西。
这个定义之后的代码可以看到t
班级的Test
只是,它一无所知x
and hello
因为Test
没有它们。
因此,除了反射之外,您不能使用x
and hello
定义匿名类之后。是的,开发人员在定义中需要这些变量时会使用这些变量。
有人提到您可以调用不属于的方法和访问变量Test
定义后立即:
int y = new Test(){
int x = 0;
//System.out.print("" + x);
void hello(){
System.out.print("inside hello\n");
}
}.x;
这是可以完成的,因为此时对象的类型是已知的(它是匿名类)。一旦您将此对象分配给Test t
,您会丢失此信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)