Java package詳解


Java引入包(package)機制,提供了類的多層命名空間,用於解決類的命名沖突、類文件管理等問題。
Java允許將一組功能相關的類放在同一個package下,從而組成邏輯上的類庫單元。如果希望把一個類放在指定的包結構下,我應該在Java源程序的第一個非注釋行放置如下格式的代碼:
package packagename;
一旦在Java源文件中使用了這個package語句,就意味着該源文件里定義的所有類都屬於這個包。位於包中的每個類的完整類名都應該是包名和類名的組合,如果其他人需要使用該包下的類,也應該使用包名加類名的組合。

javac -d . Hello.java 與 javac Hello.java 的區別?

package lee;
public class Hello
{
  public static void main(String[] args)
  {
  System.out.println("Hello World!");
  }
}
-d選項本來用於設置編譯生成的class文件的保存位置,這里指定將生成的class文件放在當前路徑下。使用該命令編譯后,當前路徑下生成一個名為lee的文件夾,該文件夾下則有一個Hello.class文件。
如果直接使用javac Hello.java命令編譯,將會在當前路徑下生成一個Hello.class文件,而不會生成lee文件夾。

同一個包中的類必須位於同一個文件夾嗎?

可以不在同一個文件夾。例如lee.Person和lee.PersonTest兩個類可一個在C盤一個在D盤,只要讓CLASSPATH環境變量包含這兩個路徑即可。

包名如何起?

包名一般全是小寫字母,由一個或多個有意義的單詞連綴而成。為了在開發中避免包名和類名同時重復的情況,Oracle建議使用公司Internet域名倒寫來作為包名,例如Internet域名是crazyit.org,則該公司的所有類都放在org.crazyit包及其子包下。
域名倒寫.項目名.模塊名.組件名

同一個包下的類互相訪問時可以不加包前綴嗎?
可以。

父包和子包互相訪問時可以不加包前綴嗎?
不可以,必須加包前綴。


import關鍵字

正如上面看到的,如果需要使用不同包中的其他類時,總是需要使用該類的全名,這是一件繁瑣的事情。為了簡化編程,Java引入了import關鍵字,import關鍵字可以向某個java文件只能給導入指定包層次下的某個類或全部類,import語句應該出現在package語句之后、類定義之前。一個Java源文件只能包含一個package語句,但可以包含多個import語句,多個import語句用於導入多個包層次下的類。

導入單個類:import package.subpackage...ClassName;
導入全部類:import package.subpackage...*;

上面的(*)只能代表類,不能代表包。

Java的常用包

Java的核心類都放在java這個包及其子包下,Java擴展的許多類都放在javax包及其子包之下。這些實用類也就是前面所說的API(應用程序接口),Oracle按這些類的功能分別放在不同的包下。下面幾個包是Java中的常用包。

java.lang:這個包下包含了Java語言的核心類,如Sting、Math、System、和Tread類等,使用這個包下的類無需使用import語句導入,系統會自動導入這個包下的所有類。
java.util:這個包下包含了Java的大量工具類/接口和集合框架類/接口,例如Arrays和List、Set等。
java.net:這個包下包含了一些Java網絡編程相關的類/接口。
java.io:這個包下包含了一些Java輸入/輸出相關的類/接口。
java.text:這個包下包含了一些Java格式化相關的類。
java.sql:這個包下包含了一些Java進行JDBC數據庫編程相關的類/接口。
java.awt:這個包下包含了抽象窗口工具集(Abstract Window Toolkits)的相關類/接口,這些類主要用於構建圖形用戶界面(GUI)程序。
java.swing:這個包下包含了Swing圖形用戶界面編程的相關類/接口,這些類可用於構建平台無關的CUI程序。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM