可以从Java中的main访问类中的私有变量吗?

时间:2010-02-08 21:37:30

标签: java access-modifiers

我最近开始使用JDK1.6学习Java。如果这是一个愚蠢的问题,请原谅。

如果main()中的对象可以直接访问私有变量,它们如何“私有”?

public class Account1
{
private int accountNum;
private String name;

Account1() {
    accountNum = 1101;
    name = "Scott";
}

public void showData() {
    System.out.println("Account Number: " + accountNum +
        "\nName: " + name);
}

public static void main(String[] args) {
    Account1 myA1 = new Account1();
    myA1.showData();
    System.out.println(myA1.accountNum); //Works! What about "Private"?!
}
}

给出了输出:

Account Number: 1101  
Name: Scott  
1101

4 个答案:

答案 0 :(得分:5)

你的主要是在Account1类中,所以它仍然在同一范围内。

可以从属于同一类型的任何代码访问私有变量。如果你的主要方法是在一个单独的类中,那么它将无法访问它们(不使用反射)。

答案 1 :(得分:1)

给定类的“main”方法是该类的一部分。作为类的一部分的方法可以访问该类的私有成员。这对我来说很有意义。当然不一定意味着你应该使用它。

考虑它的一种方法是考虑一个班级对另一个班级内部运作的了解。我的Person类不应该知道我的Order类中发生了什么;它只是调用公共方法。但是Person内部的任何内容当然都会知道Person的内部结构 - 甚至是Person的不同实例。

答案 2 :(得分:0)

它们是私有的,因为它们只能由该类访问。这意味着可以从该类的静态方法(例如main)以及实例方法(例如showData)访问它们。

该类的一个实例也可以访问该类的另一个实例的私有成员。

如果你有一个单独的课程,比如Account2,则无法访问Account1的成员资格。

答案 3 :(得分:0)

这是因为main()函数是类的成员。它可以访问班级的所有成员。

在现实世界的代码中,main函数通常位于“harness”类中,该类实际引导其余代码。这个harness类通常非常轻量级,并实例化其他完成实际工作的类。