为什么可以从main方法访问私有变量?

问题描述 投票:9回答:7
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方法中获得一个私有变量?我知道,我在包含类中,但这是主要的。我相信主体不是包含它的类的一部分……那么我不会去找私人成员,但是我可以……为什么?请帮助... thx

java variables private main
7个回答
4
投票

Main是您班级的一部分,您已经在班级内部声明了它:)main不是对象的一部分,它不是您从类创建的对象的任何部分,但仍然是类的一部分。这对任何静态函数都是正确的,因为main只是框架知道执行程序时应该寻找的普通静态函数。


10
投票

类可以访问相同类型的(其他)对象的私有实例变量。

以下也是可能的

public class Foo {

    private int a;

    public void mutateOtherInstance(Foo otherFoo) {
        otherFoo.a = 1;
    }
}

您可以争论是否合乎需要,但这只是JLS规定这是合法的生活规则。


2
投票

main方法在类Ferrari中,因此可以访问私有变量,即使它是静态的。


1
投票

嗯,main() 包含类的一部分。实际上,main()与其他所有方法一样,除了可以启动JVM并告诉它从命令行运行类的main()方法。


1
投票

只要私有变量与main()方法在同一类中,那么main()方法就可以访问它。通常,即使静态方法也可以访问同一类的实例的私有字段。


1
投票

main方法的唯一特殊功能是用于告诉编译器程序应从何处开始执行。除此之外,它的行为与任何其他类方法一样,并且可以像其他任何类方法一样访问私有变量。


-2
投票

因为main是静态的,并且您的类尚未实例化。

例如,您没有可访问的Ferrari对象。您必须创建一个Ferrari对象,然后才能访问其成员。 static main是一种特殊的静态函数。您可以根据需要将其视为独立的。因此,如果您将主要方法移到了Ferrari之外,则可以预期必须创建一个Ferrari实例才能使用它...在这里也一样。]

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