2010-02-08 95 views
2

我最近開始使用JDK1.6學習Java。如果這是一個愚蠢的問題,請原諒。類中的私有變量可以從Java中的main訪問?

如果私有變量可以通過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 

回答

1

給定類的 「main」 方法是類的一部分。作爲類的一部分的方法可以訪問該類的私有成員。這對我來說很有意義。當然,這並不一定意味着你應該使用它。

考慮一種方法是考慮一個班級對另一班級內部工作的瞭解。我的Person類不應該知道我的Order類中發生了什麼;它只是調用它的公共方法。但Person內部的任何內容當然都會了解Person的內部結構 - 即使是Person的不同實例。

5

您的主要位於Account1類中,因此它仍處於相同範圍內。

私有變量可以從屬於同一類型的任何代碼訪問。如果你的主要方法是在一個單獨的類中,那麼它將無法訪問它們(不使用反射)。

+0

小心 - 術語「局部變量」可能會引起誤解。 – finnw 2010-02-08 21:42:41

+0

@finnw好點。調整到「在同一範圍內」 – developmentalinsanity 2010-02-08 21:46:59

+0

你的第二句話也是誤導。 'main'方法不在'Account1'的任何*實例*中。一個更正確的陳述將是「......私有變量可以通過任何在同一類型中定義的方法(或初始化程序)來訪問」。 – 2010-02-08 22:52:27

0

他們是私人的,他們只能被該類訪問。這意味着它們可以從該類的靜態方法(例如main)以及實例方法(如showData)訪問。

該類的一個實例也可以訪問該類的另一個實例的私有成員。

如果你有一個單獨的類,說,Account2,它不會是能夠訪問的Account1 provate成員。

0

這是因爲main()函數是該類的成員。它可以訪問全班的所有成員。

在真實世界的代碼中,主函數通常位於實際引導其餘代碼的「線束」類中。這個線束類通常非常輕量級,並實例化其他實際工作的類。