2015-11-11 63 views
0

http://cs-fundamentals.com/tech-interview/java/which-java-package-is-imported-by-default.php導入包沒有名字的Java

在每一個Java程序可以有一個未命名的包,這是 根本沒有名稱的包。如果您在編寫類定義時省略了包語句,而 則將類名放入 默認包中,該包沒有名稱。 Java編譯器自動 導入這個包。

這是真的嗎?

編輯我就

Java編譯器會自動導入這個包。

+0

你可以很容易地自己測試它。 – SomeJavaGuy

+0

是的,雖然不鼓勵使用默認軟件包。 – endowzoner

+0

默認包是一個未命名的包。未命名包中包含源文件不包含包聲明的Java類。默認打包的目的是爲了方便開發小型應用程序或臨時應用程序或開始開發。編譯後的類文件將位於當前工作目錄中。 您聲明的其餘部分也是正確的。 –

回答

2

不,編譯器未導入未命名的程序包。

請注意Java語言規範中的以下內容。

Compilation Units

不具有包聲明一個編譯單元是無名包§7.4.2)的一部分。

Packages

對於小型項目和休閒的發展,一個包可以是未命名(§7.4.2)或有一個簡單的名字,但如果代碼被廣泛地分佈,獨特的包名應該應使用合格名稱進行選擇。這可以防止在兩個開發組碰巧選擇相同的軟件包名稱並且這些軟件包稍後在單個程序中使用時發生的衝突。

Observability of a Package

的包javajava.langjava.io總是觀察到。

請注意,未命名包未列出

Import Declarations

在未命名的包(§7.4.2)A型沒有規範的名稱,因此對於每一種進口報關的規範名稱的要求意味着,(一)類型的未命名軟件包不能導入,(b)static無法導入未命名軟件包中的類型成員。因此,§7.5.1,§7.5.2,§7.5.3§7.5.4在任何嘗試在未命名包中導入類型(或其中的static成員)時都需要編譯時錯誤。

+0

你能告訴我可觀測包的含義是什麼? – Aladdin

0

是的。如果您在Eclipse,Netbeans或其他IDE中設置了項目,則可以嘗試在不添加軟件包的情況下將類添加到項目中。它通常會說「不推薦將類添加到默認包」,但允許您將該類添加到默認包。或者,您可以嘗試在沒有包的情況下在.java上運行javac,如果所有導入,語法等都是正確的,則可以運行javac

+0

請你能看到我的編輯? – Aladdin

1

號聲明

Java編譯器會自動導入這個包。

在幾個方面不正確。

首先,軟件包不能導入。 §7.5 (JLS)說:

的導入聲明允許命名類型或靜態構件通過簡單的名稱(§6.2),它由一個單個標識符的被稱爲 。

這隻引用命名類型和靜態成員。不包!雖然...有一種方便的方法可以從import my.pkg.*;包中導入每個指定類型。

其次,編譯器不會自動從未命名的包中導入任何東西。其實it is not possible to refer to any program element of the unnamed package from any named package

我想這個聲明意味着你可以在沒有任何導入語句的情況下訪問相同的包(你正在編寫你的代碼)中的所有元素。但是對於所有軟件包都是如此。