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

问题描述 投票:0回答:5

我最近开始学习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
java access-modifiers
5个回答
8
投票

您的 main 位于 Account1 类中,因此它仍然在同一范围内。

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


2
投票

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

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


0
投票

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

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


0
投票

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

main
)以及实例方法(例如
showData
)访问。

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

如果您有一个单独的类,例如

Account2
,它将无法访问
Account1
的 provate 成员。


0
投票

private
可从其封闭的顶级类访问字段、方法和构造函数

Java 语言规范 在这个主题上非常清晰明确。参见示例 6.6-5。访问私有字段、方法和构造函数以获取文本和示例代码。 引用:

private

类成员或构造函数只能在包含成员或构造函数声明的顶级类 (

§7.6
) 的主体内访问。它不被子类继承。

您将
main

方法放入包含

private
成员字段的类中。因此
main
中的代码可以访问那些
private
成员字段。如果您将相同的
main
方法复制到另一个类,它将无法编译。
私有构造函数也是如此。仅当在拥有该构造函数的类中时, 

main

方法才可以调用

new
通过其
private
构造函数实例化对象。将这样的
main
方法移动到另一个类将无法编译。
    

© www.soinside.com 2019 - 2024. All rights reserved.