如果我們在Class對象上調用getPackage方法,就可以得到描述該類所在包的Package對象(Package類是在java.lang中定義的)。我們也可以用包名通過調用靜態方法getPackage或者調用靜態方法getPackages(該方法返回由系統中所有已知包構成的數組)來獲得Package對象。getName方法可以返回包的全名。
Package對象的使用與其他反射類型完全不同,即我們不能在運行時創建或操縱包。我們可以使用Package對象來獲取有關包的信息,諸如包的用途、誰創建了包、包的版本等。我們將把這些內容延后到后面詳細介紹包時再討論。
一、類定義
public class Package implements java.lang.reflect.AnnotatedElement {}
reflect.AnnotatedElement :表示目前正在此 VM 中運行的程序的一個已注釋元素。該接口允許反射性地讀取注釋。由此接口中的方法返回的所有注釋都是不可變并且可序列化的。
二、常用方法
1、getPackage方法
一個靜態方法,可以使用類名進行訪問,如果嘗試使用類對象訪問該方法,則不會收到錯誤
static Package getPackage(Class<?> c) {String name = c.getName();int i = name.lastIndexOf('.');if (i != -1) {name = name.substring(0, i);ClassLoader cl = c.getClassLoader();if (cl != null) {return cl.getPackage(name);} else {return getSystemPackage(name);}} else {return null;}
}
當調用方的ClassLoader實例存在null時,將使用getPackage()方法在給定的調用方的ClassLoader實例中按給定的包名稱搜索一個包,然后搜索該System ClassLoader實例加載的包的捆綁包以確定命名的包。
三、拓展
1、關于Java.lang
java.lang包是java語言的核心,它提供了java中的基礎類。包括基本Object類、Class類、String類、基本類型的包裝類、基本的數學類等等最基本的類。我們介紹一下Java 8中的java.lang包。主要類如下圖:
2、Java中常用包
java.lang 該包提供了Java編程的基礎類,例如 Object、Math、String、StringBuffer、System、Thread等,不使用該包就很難編寫Java代碼了。
java.util 該包提供了包含集合框架、遺留的集合類、事件模型、日期和時間實施、國際化和各種實用工具類(字符串標記生成器、隨機數生成器和位數組)。
java.io 該包通過文件系統、數據流和序列化提供系統的輸入與輸出。
java.net 該包提供實現網絡應用與開發的類。
java.sql 該包提供了使用Java語言訪問并處理存儲在數據源(通常是一個關系型數據庫)中的數據API。
java.awt 這兩個包提供了GUI設計與開發的類。java.awt包提供了創建界面和繪制圖形圖像的所有類,而javax.swing包提供了一組“輕量級”的組件,盡量讓這些組件在所有平臺上的工作方式相同。
javax.swing是 Java 為圖形界面應用開發提供的一組工具包,是 Java 基礎類的一部分。Swing 包含了構建圖形界面(GUI)的各種組件,如: 窗口、標簽、按鈕、文本框等。Swing 提供了許多比 AWT 更好的屏幕顯示元素,使用純 Java 實現,能夠更好的兼容跨平臺運行。
java.text 提供了與自然語言無關的方式來處理文本、日期、數字和消息的類和接口。