[英]Import package with no name Java
從http://cs-fundamentals.com/tech-interview/java/which-java-package-is-imported-by-default.php
在每個Java程序中,可以有一個未命名的程序包,它只是一個沒有名稱的程序包。 如果在編寫類定義時省略了package語句,則將類名放入沒有名稱的默認包中。 Java編譯器會自動導入此軟件包。
真的嗎?
編輯
我對Java編譯器的關注會自動導入此包。
不,編譯器不會導入未命名的程序包。
請注意Java語言規范中的以下內容。
來自編譯單元 :
沒有包聲明的編譯單元是未命名包的一部分( 第7.4.2節 )。
來自包裝 :
對於小型程序和臨時開發,包可以是未命名的( 第7.4.2節 )或具有簡單的名稱,但是如果要廣泛分發代碼, 則應使用限定名稱選擇唯一的包名稱 。 如果兩個開發組碰巧選擇了相同的程序包名稱,而這些程序包后來在單個程序中使用,則可以避免發生沖突。
從包的可觀察性 :
包
java
,java.lang
和java.io
始終是可觀察的。
注意, 未列出未命名的軟件包 。
從進口報關單 :
未命名包中的類型( 第7.4.2節 )沒有規范名稱,因此每種類型的導入聲明中對規范名稱的要求都意味着(a) 無法導入未命名包中的類型 ,以及(b)
static
成員無法導入未命名包中的類型。 因此,第7.5.1節 ,第7.5.2節 ,第7.5.3節和第7.5.4節都要求在未命名的包中導入類型(或其static
成員)的任何嘗試都產生編譯時錯誤。
不,聲明
Java編譯器會自動導入此軟件包。
在幾個方面是不正確的。
首先,不能導入軟件包。 §7.5(JLS)說:
導入聲明允許使用由單個標識符組成的簡單名稱(第6.2節)引用命名類型或靜態成員。
這僅指代命名類型和靜態成員。 不包! 盡管...有一種方便的方法可以使用import my.pkg.*;
從包中導入每個命名類型import my.pkg.*;
。
其次,編譯器不會自動從未命名的包中導入任何內容。 實際上, 不可能從任何命名包中引用未命名包的任何程序元素 。
我猜想這句話意味着您可以訪問同一包(您正在為其編寫代碼)中的所有元素,而無需任何導入語句。 但這對於所有軟件包都是如此。
是。 如果您在Eclipse,Netbeans或其他IDE中設置了項目,則可以嘗試將類添加到項目中而不添加包。 通常會說類似“不建議將類添加到默認包中”之類的內容,但是無論如何都可以使您將該類添加到默認包中。 或者,您可以嘗試在不帶包的.java
上運行javac
,並假設所有導入,語法等均正確,這才可以工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.