问题来自着名的SCJP 6书
- 醇>
鉴于:
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); } }
结果如何?
一个。 2
B. 3
C. 4
D. 5
E.编制失败 F.在运行时抛出异常
根据这本书的答案是:
✓E是正确的。在go1()中,局部变量x未初始化。
我的问题是为什么go1()不能在第4行使用初始化为6的实例变量x?
答案 0 :(得分:3)
因为局部变量x存在。如果注释掉int x;
,它将正常运行并使用实例变量。
答案 1 :(得分:0)
在Java中,所有局部变量都应初始化,否则会产生错误。但是你不应该初始化方法的参数。
如果您没有int x
,那么这将是正常的。因为在这种情况下编译器将使用为类级别分配的局部变量。