2012-06-27 27 views
1

我一直在使用.NET多年,但最近我遇到了一個簡單的Java項目。語法很容易學習 - 非常簡單直觀和常見。然而,最讓我困惑的是項目結構。Java包與.NET相比有什麼用?

在.NET中,我非常習慣於包含我不同的東西的類,然而,Packages混淆了我。它們看起來幾乎像.NET命名空間,只是它們實際上影響了項目目錄佈局。

不僅如此,命名約定對我來說絕對是對的。我被告知要使用公司網站命名該軟件包,與最後的應用程序名稱相反(例如com.company.www.applicationname)。不僅如此,我還被告知將主類命名爲應用程序的名稱。幾乎現在似乎是多餘的(類名稱,包名稱和項目名稱)。

那麼這是關於什麼?我可以將這些軟件包與.NET進行比較,以及如何將我的頭部纏繞在他們身上? - 以及命名約定是什麼?

+1

帶有主函數的類的名稱不起作用。這聽起來像你的組織的慣例。 – Bill

回答

3

packages Java中的一種方式是讓不同的庫可以重用類名而不會相互衝突。包就像語言提供的另一個範圍規則。例如:

public class Example { 
    String exampleString = "example"; 
} 

public class Another { 
    String exampleString = "This would never work with a global name space"; 
} 

我們能夠在同一個程序與exampleString標識符的兩個String對象,因爲它們是在不同的scope。同樣,

package example; 
public class Example { } 

,並在一個單獨的文件

package separateexample; 
public class Example {} 

我們可以有一個類名相同的名稱,因爲它是一個不同的範圍。我們仍然可以唯一地指定對象:

example.Exampleseparaeteexample.Example 這些是這些類的全限定類名稱。

欲瞭解更多信息,請查閱the java tutorial

對於約定Java包:如果你想寫一個庫,有很多人使用它,你需要確保沒有命名衝突。軟件包可以像上面一樣使用以避免它們 - 但爲了確保沒有任何衝突,例如軟件包名稱本身,您需要一個完全全球唯一的軟件包名稱,以確保其他公司在嘗試使用時不會使用其他公司的名稱使用你的產品。域名恰好是全球唯一的字符串,所以將公司域名作爲包名稱反轉是慣例。

com.example.myapp.Example 

不可能發生衝突,只要你真正擁有example.com(沒有人打破了慣例)

因此,要回答你的主要問題packages在Java中是相同的概念namespaces在.net

相關問題