Java類庫及其組織結構(Java API)
Java 官方為開發者提供了很多功能強大的類,這些類被分別放在各個包中,隨JDK一起發布,稱為Java類庫或Java API。
API(Application Programming Interface, 應用程序編程接口)是一個通用概念。
例如我編寫了一個類,可以獲取計算機的各種硬件信息,它很強大很穩定,如果你的項目也需要這樣一個功能,那麼你就無需再自己編寫代碼,將我的類拿來直接用就可以。但是,我的類代碼很複雜,讓你讀完這些代碼不太現實,而且我也不希望你看到我的代碼(你也沒必要也不希望讀懂這些晦澀的代碼),我要保護我的版權,怎麼辦呢?
我可以先將我的類編譯,並附帶一個文檔,告訴你我的類怎麼使用,有哪些方法和屬性,你只需要按照文檔的說明來調用就完全沒問題,既節省了你閱讀代碼的時間,也保護了我的版權。例如,獲取CPU信息的方法:
getCpuInfo(int cpuType);
這就是一個API。也就是說,該文檔中描述的類的使用方法,就叫做API。
我也可以開發一個軟件,用來清理計算機中的垃圾文件,我比較有公益心,希望讓更多的開發人員使用我的軟件,我就會在發佈軟件的同時附帶一個說明文檔,告訴你怎樣在自己的程序中調用,這也叫做API。
Java API也有一個說明文檔,入口地址:http://www.oracle.com/technetwork/java/api
選擇對應版本的Java,點擊鏈接進入即可。 J2SE 1.7 的API地址為:http://docs.oracle.com/javase/7/docs/api/
這個文檔是在線的,官方會隨時更新。當然你也可以下載到本地,請大家自己百度怎麼下載。
打開J2SE 1.7 的API文檔,如下圖所示:
Java類庫中有很多包:
以java.* 開頭的是Java的核心包,所有程序都會使用這些包中的類;
以javax.* 開頭的是擴展包,x 是extension 的意思,也就是擴展。雖然javax.* 是對java.* 的優化和擴展,但是由於javax.* 使用的越來越多,很多程序都依賴於javax.*,所以javax.* 也是核心的一部分了,也隨JDK一起發布。
以org.* 開頭的是各個機構或組織發布的包,因為這些組織很有影響力,它們的代碼質量很高,所以也將它們開發的部分常用的類隨JDK一起發布。
在包的命名方面,為了防止重名,有一個慣例:大家都以自己域名的倒寫形式作為開頭來為自己開發的包命名,例如百度發布的包會以com.baidu.* 開頭,w3c組織發布的包會以org.w3c.* 開頭,微學苑發布的包會以net.weixueyuan.* 開頭……
組織機構的域名後綴一般為org,公司的域名後綴一般為com,可以認為org.* 開頭的包為非盈利組織機構發布的包,它們一般是開源的,可以免費使用在自己的產品中,不用考慮侵權問題,而以com.* 開頭的包往往由盈利性的公司發布,可能會有版權問題,使用時要注意。
java中常用的幾個包介紹:
更多的包和說明請參考API文檔。
Java import以及Java類的搜索路徑<br />如果你希望使用Java包中的類,就必須先使用import語句導入。
import語句與C語言中的#include 有些類似,語法為:
import package1[.package2…].classname;
package 為包名,classname 為類名。例如:
import java.util.Date; // 導入java.util 包下的Date 類import java.util.Scanner; // 導入java.util 包下的Scanner 類import javax.swing.*; // 導入javax.swing 包下的所有類,* 表示所有類
注意:
import 只能導入包所包含的類,而不能導入包。
為方便起見,我們一般不導入單獨的類,而是導入包下所有的類,例如import java.util.*;。
Java 編譯器默認為所有的Java 程序導入了JDK 的java.lang 包中所有的類(import java.lang.*;),其中定義了一些常用類,如System、String、Object、Math 等,因此我們可以直接使用這些類而不必顯式導入。但是使用其他類必須先導入。
前面講到的”Hello World“程序使用了System.out.println(); 語句,System 類位於java.lang 包,雖然我們沒有顯式導入這個包中的類,但是Java 編譯器默認已經為我們導入了,否則程序會執行失敗。
Java類的搜索路徑
Java程序運行時要導入相應的類,也就是加載.class 文件的過程。
假設有如下的import 語句:
import p1.Test;
該語句表明要導入p1 包中的Test 類。
安裝JDK時,我們已經設置了環境變量CLASSPATH 來指明類庫的路徑,它的值為.;%JAVA_HOME%/lib,而JAVA_HOME 又為D:/Program Files/jdk1.7.0_71,所以CLASSPATH 等價於.;D:/Program Files/jdk1.7.0_71/lib。
Java 運行環境將依次到下面的路徑尋找並載入字節碼文件Test.class:
.p1/Test.class("."表示當前路徑)
D:/Program Files/jdk1.7.0_71/lib/p1/Test.class
如果在第一個路徑下找到了所需的類文件,則停止搜索,否則繼續搜索後面的路徑,如果在所有的路徑下都未能找到所需的類文件,則編譯或運行出錯。
你可以在CLASSPATH變量中增加搜索路徑,例如.;%JAVA_HOME%/lib;C:/javalib,那麼你就可以將類文件放在C:/javalib 目錄下,Java運行環境一樣會找到。