簡體   English   中英

導入不帶Java名稱的軟件包

[英]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節 )或具有簡單的名稱,但是如果要廣泛分發代碼, 則應使用限定名稱選擇唯一的包名稱 如果兩個開發組碰巧選擇了相同的程序包名稱,而這些程序包后來在單個程序中使用,則可以避免發生沖突。

包的可觀察性

javajava.langjava.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM