方法中声明的变量的范围

时间:2012-06-26 21:12:43

标签: java

是main中的一个变量,一个公共变量?

    public static void main(String[] args) {
  .........

    for(int i=0;i<threads.length;i++)
        try {
            threads[i].join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    long time=0; 
    ....
    }

itime它们都是公共变量吗?

当然,如果我的推理是正确的,那么属于公共方法的任何变量都应该被视为公共。我是对的吗?

6 个答案:

答案 0 :(得分:8)

变量itime仅对函数是本地的。它们在外面不可见。只有类成员变量可以在外部访问(取决于它们的访问修饰符)。

SO here中已经详细介绍了这一区别。

答案 1 :(得分:3)

没有。变量'i'和'time'在main方法中声明,因此它们的范围是局部的,仅限于main方法。你不能在方法之外使用它们。

答案 2 :(得分:2)

他们不被视为公开。它们是局部变量。他们在该方法之外没有任何可见性(更不用说那个类了)。

答案 3 :(得分:1)

没有。如果变量在方法内部 - 甚至是主方法 - 它是一个局部变量,其范围仅在该方法内。

public class MyClass {
    public int x; // this is a public variable

    public void doSomething() { // this is a public method
        int y = 9; // this is a local variable
    }

    public int getX() {
        return x; // we can do this
    }

    public int getY() {
        return y; // we CANNOT do this because y is not public and is only 
                  // defined within the doSomething() method
    }
}

答案 4 :(得分:1)

正如其他人所说,这两个变量只能在main中使用。但是我的范围更加有限 - 因为它在for循环中声明,它只能在for循环中使用。

答案 5 :(得分:1)

局部变量永远不会公开,无论它们驻留在什么方法(或构造函数)中。局部变量的范围至多是整个方法体。

“public”,“private”等概念不适用于局部变量,而是适用于实例或类变量。关键区别在于局部变量驻留在堆栈上,因此它们的范围自动限制为堆栈帧的生命周期。他们不需要任何访问规则。访问类型“私有”,“默认”等表示需要特别施加的限制,因为它们不是“自然的”。与局部变量的范围不同,它们也可以通过反射来打破。