【问题标题】:Private, Static, and scope of variables in JavaJava 中变量的私有、静态和范围
【发布时间】:2017-02-25 07:36:34
【问题描述】:

在我的 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 是有效的,因为它仍然是私有的。

【问题讨论】:

  • 我认为这两个代码块都没有错误。为什么你认为他们这样做? For 循环确实有临时变量,仅限于它们。你跑过这些代码吗?你注意到了什么?
  • 哇,你完全正确。我删除并重新制作了我的课程并再次尝试,它成功了!我一定错过了我的代码中的其他错误。谢谢:)

标签: java variables scope static private


【解决方案1】:

不明白为什么Shadow类中声明的变量的作用域没有到达main方法导致重复错误。

类变量的作用域确实到达了main方法。但教训是关于阴影。不应该有任何错误。

变量i在for循环中使用时不能声明为private static,因为for循环中i的值是临时的,

For 循环变量是临时的和局部范围的,是的,但你的推理不正确。不能将局部变量声明为 privatestatic。就是这样。

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

private 不是问题。该变量可以是默认的、受保护的或公共的。代码仍然有效。事实上,这两个代码示例似乎都是有效的。

首先,您可以使用Shadow3.i 引用一个静态变量,对于另一个,您有一个实例变量,因此在doSomething 方法中,您可以使用this.iShadow4.this.i

【讨论】:

  • 非常感谢您花时间回答。我刚刚意识到我的代码存在一个单独的错误,导致它看起来好像私有/静态是问题,但实际上并非如此。
  • 欢迎。如果这解决了您的问题,请随时使用帖子旁边的复选标记接受答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 2012-05-14
相关资源
最近更新 更多