您应该区分声明和定义。
在您的情况下,您声明一个class变量,Test
并将其分配给派生自某个类的对象Test
(这是一个匿名类),该对象中包含一些其他内容。
此定义之后的代码仅看到t
类Test
,它对此一无所知x
,hello
因为Test
没有它们。
因此,除了反射之外,您不能使用匿名类x
并hello
在定义之后。是的,开发人员在定义中需要这些变量时会使用此类变量。
提到您可以Test
在定义后立即调用不属于其中的方法和访问变量:
int y = new test(){
int x = 0;
//System.out.print("" + x);
void hello(){
System.out.print("inside hello\n");
}
}.x;
可以这样做是因为在这一点上,对象的类型是已知的(这是匿名类)。一旦将此对象分配给Test t
,就会丢失此信息。