Java中的私有,静态和变量范围

时间:2016-10-16 06:12:02

标签: java variables scope static private

在我的Java课程中,我们刚刚学习了范围。通过学习我的意思是它曾被简要提及一次,从未再次提到过。发布了一些问题,我无法理解两段代码之间的区别。第一个:

public class Shadow3 {
    private static int i = 99;
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
        }
        System.out.println(i);
    }
}

第二个:

public class Shadow4 {
    private int i;
    public void doSomething(int n) {
        for (int i = 0; i < n; i++) {
            System.out.println(i);
        }
    }
    public static void main(String[] args) {
        new Shadow4().doSomething(9);
    }
}

我理解第一个错误并不是变量被声明两次,但我不明白为什么Shadow类中声明的变量范围没有达到导致重复错误的main方法。我也理解为什么在第一段代码中,当变量i在for循环中使用时不能被声明为私有静态,因为for循环中i的值是临时的,但我不明白如何第二段代码中的变量i是有效的,因为它仍然是私有的。

1 个答案:

答案 0 :(得分:0)

  

我不明白为什么Shadow类中声明的变量范围没有达到导致重复错误的主要方法。

类变量的范围确实达到了main方法。但教训是阴影。不应该有任何错误。

  

当变量i在for循环中使用时,它不能被声明为私有静态,因为for循环中i的值是临时的,

对于循环变量是临时的和本地范围的,是的,但你的推理是不正确的。您无法将本地变量声明为privatestatic。那是那个。

  

我不明白第二段代码中的变量i是如何有效的,因为它仍然是私有的。

private不是问题所在。变量可以是default,protected或public。代码仍然有效。事实上,两个代码示例都显示有效。

在第一个中,您可以使用Shadow3.i引用静态变量,而另一个,您有一个实例变量,因此在doSomething方法中,您使用{{1} }或this.i