2016-10-16 41 views
0

在我的Java类中,我们刚刚了解了范围。据我所知,我的意思是曾经简要提及过一次,从此再也没有提过。发布了一些问题,并且我无法理解两段代码之间的区别。第一招: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类中声明的变量没有达到导致重复错误的主要方法。我也明白为什么在第一段代码中,变量i在for循环中被使用时不能被声明为私有静态变量,因为for循环中的i值是临时的,但我不明白如何第二段代码中的变量i是有效的,因为它仍然是私有的。

+5

我不认为无论是块的代码有错误。你为什么认为他们这样做? For循环确实有临时变量,仅限于它们。你有跑这些代码吗?你注意到了什么? –

+0

嗯,你完全正确。我删除并重新编写了我的课程,然后再次尝试,并且工作正常!我一定错过了我的代码中的其他错误。谢谢:) –

+0

这是相同的问题http://stackoverflow.com/questions/10459487/difference-between-public-static-and-private-static-variables – Neeraj

回答

0

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

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

变量i不能被声明为private静态时,然后在for循环使用的,因为我在for循环的值是暂时的,

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

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

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

在第一个,你可以参考一个静态变量与Shadow3.i,其他的,你有一个实例变量,所以doSomething方法中,你会使用this.iShadow4.this.i

+0

非常感谢你花时间回答。我只是意识到,我的代码有一个单独的错误,导致它看起来好像私有/静态是不存在时的问题。 –

+0

欢迎。如果这解决了您的问题,请随时使用帖子旁边的复选标记接受答案 –