方法中的变量范围

时间:2015-03-24 20:04:48

标签: java scope

问题来自着名的SCJP 6书

  
      
  1. 鉴于:

    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.在运行时抛出异常

  2.   

根据这本书的答案是:

  

✓E是正确的。在go1()中,局部变量x未初始化。

我的问题是为什么go1()不能在第4行使用初始化为6的实例变量x?

2 个答案:

答案 0 :(得分:3)

因为局部变量x存在。如果注释掉int x;,它将正常运行并使用实例变量。

答案 1 :(得分:0)

在Java中,所有局部变量都应初始化,否则会产生错误。但是你不应该初始化方法的参数。

如果您没有int x,那么这将是正常的。因为在这种情况下编译器将使用为类级别分配的局部变量。