gpt4 book ai didi

java - 实例的局部变量/方法的范围是什么

转载 作者:行者123 更新时间:2023-11-30 05:50:22 25 4
gpt4 key购买 nike

我正在测试下面的代码片段,我需要知道如何访问 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");
}
};
}

编辑

但是为什么这段代码有效

 Thread  tr = new Thread() {
int loops = 1;

@Override
public void run() {
loops += 1;
}
};
tr.start();

最佳答案

你应该区分声明和定义。

在你的例子中,你声明了一个 Test 类的变量,并将它分配给派生自 Test 的某个类的对象(它是一个匿名类),它有一些额外的东西

此定义后的代码只看到 Test 类的 t,它对 xhello 一无所知因为 Test 没有它们。

因此,除了反射之外,您不能在定义匿名类之后使用xhello。是的,当开发人员在定义中需要这些变量时,他们会使用这些变量。

有人提到您可以在定义后立即调用不属于 Test 的方法和访问变量:

int y = new Test(){
int x = 0;
//System.out.print("" + x);
void hello(){
System.out.print("inside hello\n");
}
}.x;

这是可以做到的,因为此时对象的类型是已知的(它是匿名类)。一旦您将此对象分配给 Test t,您就会丢失此信息。

关于java - 实例的局部变量/方法的范围是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14186239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com