方法中的变量作用域
Variable Scope in methods
问题出自著名的 SCJP 6 书
Given:
public class Dark {
int x = 3;
public static void main(String[] args) {
new Dark().go1();
}
void go1() {
int x;
go2(++x);
}
void go2(int y) {
int x = ++y;
System.out.println(x);
}
}
What is the result?
A. 2
B. 3
C. 4
D. 5
E. Compilation fails
F. An exception is thrown at runtime
书上的答案是:
✓ E is correct. In go1() the local variable x is not initialized.
我的问题是为什么 go1() 不能在这里使用第 4 行初始化为 6 的实例变量 x?
因为存在局部变量x。如果 int x;
被注释掉,它将 运行 正常并使用实例变量。
在Java中所有的局部变量都应该初始化,否则会报错。但是你不应该初始化方法的参数。
如果您没有 int x
那么这就可以了。因为在那种情况下,编译器将使用分配给 class 级别的局部变量。
问题出自著名的 SCJP 6 书
Given:
public class Dark { int x = 3; public static void main(String[] args) { new Dark().go1(); } void go1() { int x; go2(++x); } void go2(int y) { int x = ++y; System.out.println(x); } }
What is the result?
A. 2
B. 3
C. 4
D. 5
E. Compilation fails
F. An exception is thrown at runtime
书上的答案是:
✓ E is correct. In go1() the local variable x is not initialized.
我的问题是为什么 go1() 不能在这里使用第 4 行初始化为 6 的实例变量 x?
因为存在局部变量x。如果 int x;
被注释掉,它将 运行 正常并使用实例变量。
在Java中所有的局部变量都应该初始化,否则会报错。但是你不应该初始化方法的参数。
如果您没有 int x
那么这就可以了。因为在那种情况下,编译器将使用分配给 class 级别的局部变量。