为啥我可以从 main 方法访问私有变量?
Posted
技术标签:
【中文标题】为啥我可以从 main 方法访问私有变量?【英文标题】:Why can I access a private variable from main method?为什么我可以从 main 方法访问私有变量? 【发布时间】:2011-06-10 02:24:38 【问题描述】:package com.valami;
public class Ferrari
private int v = 0;
private void alam()
System.out.println("alam");
public Ferrari()
System.out.println(v);
public static void main(String[] args)
Ferrari f = new Ferrari();
f.v = 5;
System.out.println(f.v);
大家好! 我有一个简单的问题.... 为什么我可以从 main 方法访问私有变量?我知道,我在包含类中,但它是主要的。我相信 main 不是包含它的类的一部分......然后我不会联系私人成员,但我可以......为什么? 请帮忙...谢谢
【问题讨论】:
【参考方案1】:类可以访问相同类型的(其他)对象的私有实例变量。
以下也是可能的
public class Foo
private int a;
public void mutateOtherInstance(Foo otherFoo)
otherFoo.a = 1;
你可以争论这是否可取,但 JLS 指定这是合法的只是生活规则。
【讨论】:
赞成 - 我从来不知道这是可能的。我是 C# 人而不是 Java,但我刚刚在 C# 中对此进行了测试,它的工作方式相同。 这在 C# 中也是可能的,我认为 C++(但不要引用我的话),当你有当前对象(this)和相同的实例时,非常适合内部排序和 equals 函数类,需要比较私有数据。 有趣,我从来不知道 C#。在 C++ 中,这绝对是合法的。 @ArjanTijms 我想了解更多关于此的内容。你能帮我找到一个链接吗?我不确定我应该搜索什么。 @varunl 在我的脑海中,这本书至少解释了它:amazon.com/dp/0071591060 您可能想查看 JSL 以查看它是否包含更多细节。【参考方案2】:Main 是你类的一部分,你已经在你的类中声明了它:) main 不是你的对象的一部分,它不会是你从类中创建的对象的任何部分,但它仍然是类的一部分。这对于任何静态函数都是正确的,因为 main 只是一个普通的静态函数,框架知道它应该在程序执行时查找它。
【讨论】:
【参考方案3】:main
方法在 Ferrari
类中,因此可以访问私有变量,即使它是静态的。
【讨论】:
【参考方案4】:好吧,main()
是包含类的一部分。实际上,main()
与其他所有方法完全一样,只是您可以启动 JVM 并告诉它从命令行运行某个类的 main()
方法。
【讨论】:
【参考方案5】:只要私有变量与 main() 方法在同一个类中,那么 main() 方法就可以访问它。通常,即使是静态方法也可以访问同一类实例的私有字段。
【讨论】:
【参考方案6】:main 方法的唯一特殊功能是它用于告诉编译器应该从哪里开始执行程序。除此之外,它的行为与任何其他类方法一样,并且可以像任何其他类方法一样访问私有变量。
【讨论】:
【参考方案7】:因为 main 是静态的并且你的类还没有被实例化。
例如,您没有可访问的 Ferrari 对象。您必须创建一个 Ferrari 对象,然后访问它的成员。 static main 是一个特殊的静态函数。如果你愿意,你可以把它看作是一种独立的。因此,如果您将 main 方法移到 Ferrari 之外,您会期望您必须创建一个 Ferrari 实例才能使用它......这里也是一样。
【讨论】:
以上是关于为啥我可以从 main 方法访问私有变量?的主要内容,如果未能解决你的问题,请参考以下文章