gpt4 book ai didi

java - 实例初始化 block 的编译顺序

转载 作者:行者123 更新时间:2023-12-01 10:21:56 31 4
gpt4 key购买 nike

实例初始化 block 按照它们定义的顺序执行。那么,为什么下面的代码在指示的地方有错误呢?

public class MyTest {
public static void main(String[] args) {
Tester t = new Tester();
}
}

class Tester {
{ int x; } // Instance initializer 1
{ x = 3; } // Instance initializer 2...ERROR cannot resolve symbol 'x'

Tester() { // Constructor
x = 5; // ERROR cannot resolve symbol 'x'
}
}

我认为编译器只是将实例初始值设定项移入构造函数的开头。如果是这样的话,这两个似乎都应该有效?

最佳答案

因为 x 没有在任何地方声明为类成员。您在第一个实例初始化程序 block 中将其声明为局部变量,但第二个 block 不“知道”此局部变量。构造函数也有同样的问题,x 未定义...

尝试这样:

class Tester {
private int x;
{ x = 3; } // Instance initializer 1...

Tester() { // Constructor
x = 5;
}
}

关于java - 实例初始化 block 的编译顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35540468/

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