我最近看到一个问题,即下面这段代码的执行结果是什么。
public class Sandys {
private int court;
public static void main(String argv[]){
Sandys s = new Sandys(99);
System.out.println(s.court);
}
Sandys(int ballcount){
court = ballcount;
}
}
我认为无法执行,因为在main
我尝试访问私有变量。
但是,此代码可以完美执行,结果为99
。所以我很困惑,为什么可以在这段代码中访问私有变量?虽然main
位于Sandys
级,但我创建了一个新的Sandys
。我还可以访问Sandys
中新main
对象的私有变量吗?
答案 0 :(得分:4)
您可以从同一个类中访问私有成员,即使是在静态方法中也是如此。
答案 1 :(得分:1)
main()
是一种特殊方法,因为它被用作java应用程序的起点。 但是,它仍然是一种常规静态方法,它遵循静态方法的所有访问限制。这是main()
类方法吗?是的。因此,它可以访问同一类的私有成员。
考虑一下:如果无法访问私有字段,则必须以不同的方式编写工厂方法。
class A {
private int a=0;
private int b=0;
private A() {}
//getters
public static A getNewInstance(int a, int b) {
A a = new A();
a.a = a;
a.b = b;
return A;
}
它确实有意义,不是吗?
答案 2 :(得分:1)
您可以在类中访问所有私有,protected,public和not modifier变量,但无法从另一个类访问私有变量。
P.S。对C#,C ++和许多其他编程语言来说也是如此。
答案 3 :(得分:0)
一个类被定义为某个特定的工作,并且以这种方式它可能使用一些它不希望其他人访问它的变量(“其他”意味着外部类)以及一些你希望其他类访问它。所有这些取决于你的要求。
“私有实例变量被定义为仅在类”中使用。因为在您的代码中,您试图访问类本身内的私有实例变量,那么它是完全合法的
注意:如果你想要指定实例,静态方法不能访问实例变量我是指在静态方法中创建实例(对象)并通过创建的引用访问它。