簡體   English   中英

為什么我可以從 main 方法訪問私有變量?

[英]Why can I access a private variable from main method?

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 不是包含它的類的一部分......然后我不會聯系到一個私人成員,但我可以......為什么? 請幫助...thx

類可以訪問相同類型(其他)對象的私有實例變量。

以下也可以

public class Foo {

    private int a;

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

您可能會爭論這是否合乎需要,但這只是 JLS 指定這是合法的生活規則。

Main 是你的類的一部分,你已經在你的類中聲明了它 :) main 不是你的對象的一部分,它不會是你從類創建的對象的任何部分,但它仍然是類的一部分。 這對於任何靜態函數都是正確的,因為 main 只是一個普通的靜態函數,框架知道它應該在程序執行時查找。

main方法在類Ferrari ,因此可以訪問私有變量,即使它是靜態的。

好吧, main()包含類的一部分。 實際上, main()與其他所有方法完全一樣,只是您可以啟動 JVM 並告訴它從命令行運行類的main()方法。

只要私有變量與 main() 方法在同一個類中,那么 main() 方法就可以訪問它。 通常,即使是靜態方法也可以訪問同一類實例的私有字段。

main 方法唯一的特點是它用於告訴編譯器程序執行應該從哪里開始。 除此之外,它的行為就像任何其他類方法一樣,並且可以像任何其他類方法一樣訪問私有變量。

因為 main 是靜態的,並且您的類尚未實例化。

例如,您沒有要訪問的法拉利對象。 您必須創建一個 Ferrari 對象,然后訪問它的成員。 static main 是一個特殊的靜態函數。 如果您願意,您可以將其視為某種獨立的。 所以如果你將你的主要方法移到法拉利之外,你會期望你必須創建一個法拉利的實例來使用它......這里也是一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM