2011-11-03 83 views
3

我最近開始使用Eclipse IDE,並在許多地方閱讀過,不應該使用默認(src)軟件包並創建新軟件包。
我只是想知道背後的原因。爲什麼我們不應該使用(默認)src包?

+2

您是否檢查[this](http://stackoverflow.com/questions/283816/how-to-access-java-classes-in-the-default-package)?它沒有提供任何理由,但解釋說,默認包在所有情況下都不起作用。也許這就夠了... – home

+1

默認包不是'src',它有一個空的名字。 – EJP

回答

12

使用默認包可能會創建命名空間衝突。想象一下,你正在創建一個包含MyClass類的庫。有人在你的項目中使用你的圖書館,並且在他的默認包裝中還有一個MyClass類。編譯器應該做什麼? Java中的包實際上是一個完全標識你的項目的名稱空間。因此,不要在現實世界的項目中使用默認包。

+0

Thanx的快速回復.. :) – YetAnotherG33k

+0

編譯器應該做的_first_事情是提供一個短暫的,尖銳的電動顛簸睾丸(顯然調整女性的身體部位)一個類名稱MyClass。哦,對不起,這是一個_example,_我的道歉:-) – paxdiablo

+0

@paxdiablo,=))) – Egor

1

Java使用該包作爲區分類的方式。通過使用包,你可以有一個org.example.Something類和org.example.extended.Something類,並且能夠區分它們,即使它們都被命名爲Something。由於它們的包是不同的,你可以在同一個項目中使用它們。

+1

以上,加上它通常是一個更好的做法,以結構化的方式組織事情。例如,您可能不會將所有文件保存在桌面上的計算機上。它可以正常工作,但將邏輯上相似的東西組合在一起更有意義。 – DaveyDaveDave

+1

@戴維,我的妻子在她的收件箱中保存了她自1990年以來收到的任何一封電子郵件。這是可怕的討厭:-) – paxdiablo

1

通過聲明一個包,您可以定義自己的名稱空間(對於類)。這樣,如果你有兩個相同的類,使用不同的包名稱(名稱空間)將區分你想使用哪一個。

4

最初,它的目的是確保不同部分Java代碼之間沒有衝突。

因爲Java是爲了在任何地方運行和過網(這意味着它可能來自Sun,IBM,甚至李四和狡猾的軟件公司私人有限公司回暖位),我擁有paxdiablo.com的事實(我實際上並不假設我假裝爲了這個答案而做)意味着可以安全地撥打我的所有代碼com.paxdiablo.blah.blah.blah並且這不會干擾任何其他人,除非他們在某種程度上在精神上有缺陷並且使用我的命名空間:-)

chapter 7, "Packages", of the Java Language Spec

程序被組織爲一組包。每個包都有自己的一組類型名稱,這有助於防止名稱衝突。

實際上,我通常首先使用默認包並將其移到真正的包中(如果它的存活時間足夠長,可以放到真正的包中)。

0

從Java的角度來看,您可以使用兩種通用的開發/部署生命週期,可以使用ant來構建和部署,也可以使用Maven生命週期。這兩個生命週期都在本地目錄中查找源代碼和資源,在maven的情況下,在本地或網絡中定義的存儲庫中查找源代碼和資源。

問題是,當您爲開發和最終部署設置項目時,您希望構建一個可移植的項目結構,而不依賴於IDE,即。您的項目可以使用任一構建環境進行構建和部署。如果您嚴重依賴Eclipse框架來提供類變量,編譯路徑等,您可能會遇到問題,即您的項目只能使用該配置j進行構建和部署,並且可能無法移植到其他開發人員環境,可以這麼說。

+0

很好的答案,但錯誤的問題:OP是問像「com.exmaple.myapp」的包結構,而不是打包代碼進行部署。 –

+1

啊..好的,所以他問包什麼是????,爲什麼不把所有東西放在一個文件夾/包src下。我懂了。 –

1

我能想到的原因主要有:

  1. 它使組織的事情,這將有助於你知道到哪裏尋找類/功能(和其他人!)。
  2. 如果它們位於不同的包中,則可以定義具有相同名稱的類。
  3. 默認包中的類/ etc不能被導入到指定的包中。這意味着爲了使用你的類,其他人將不得不把他們的所有類都放在默認包中。這加劇了原因解決的問題。
相關問題