2

主变量中的变量是公共变量吗?

    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; 
    ....
    }

i它们time都是公共变量吗?

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

4

6 回答 6

8

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

SO here中已经更详细地介绍了这种区别。

于 2012-06-26T21:14:19.237 回答
3

不。变量“i”和“时间”在主方法中声明,因此它们的范围是本地的,仅限于主方法。您不能在方法之外使用它们。

于 2012-06-26T21:14:12.777 回答
2

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

于 2012-06-26T21:14:25.670 回答
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
    }
}
于 2012-06-26T21:15:21.577 回答
1

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

于 2012-06-26T21:17:11.013 回答
1

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

“public”、“private”和类似的概念不适用于局部变量,但适用于实例或类变量。关键区别在于局部变量驻留在堆栈中,因此它们的范围自动限制在堆栈帧的生命周期内。他们不需要任何访问规则。访问类型“private”、“default”等表示需要特别施加的限制,因为它们不是“自然的”。与局部变量的范围不同,它们也可以被反射破坏。

于 2012-06-26T21:27:44.287 回答