例如,我有简单的课程
class Simple {
private int i = 6;
private static void method(Simple obj) {
System.out.println("Value i: " + obj.i);
}
public void method() {
method(this);
}
public static void main(String[] args) {
new Simple().method();
}
}
为什么我可以在静态方法中访问i
?
答案 0 :(得分:5)
private
members。您的静态方法属于同一个类。因此,您可以访问。
Modifier Class Package Subclass World
---------------------------------------------
private **Y** N N N
更新:为避免混淆,请将静态方法移至其他类并尝试一次。
答案 1 :(得分:1)
不要对static
和private/public/[default]
感到困惑。这是两件事。 static
函数可以访问private
非静态字段,因为它是class
的一部分。那是private
的确如此,只限制class
级别的访问权限,而static
之间没有任何区别。
答案 2 :(得分:0)
如果是打扰你的静态,obj是一个正确的“非静态”对象,我们为什么它有一个可访问的非静态字段。 方法是静态的无关紧要。
答案 3 :(得分:-1)
您正在访问对象的实例而不是直接类变量。当你使用direly“i”而不引用它不被允许时。
私有变量可见性默认情况下属于类访问。
public class Simple {
private int i = 6;
private static void method(Simple obj) {
System.out.println("Value i: " + i); //compile Error ::Cannot make a static reference to the non-static field i
}
public void method() {
method(this);
}
public static void main(String[] args) {
new Simple().method();
}
}