是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;
....
}
i
和time
它们都是公共变量吗?
当然,如果我的推理是正确的,那么属于公共方法的任何变量都应该被视为公共。我是对的吗?
答案 0 :(得分:8)
变量i
和time
仅对函数是本地的。它们在外面不可见。只有类成员变量可以在外部访问(取决于它们的访问修饰符)。
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”等概念不适用于局部变量,而是适用于实例或类变量。关键区别在于局部变量驻留在堆栈上,因此它们的范围自动限制为堆栈帧的生命周期。他们不需要任何访问规则。访问类型“私有”,“默认”等表示需要特别施加的限制,因为它们不是“自然的”。与局部变量的范围不同,它们也可以通过反射来打破。