詳解Java類(lèi)庫(kù)的概念以及import的使用方法
Java類(lèi)庫(kù)及其組織結(jié)構(gòu)(Java API)
Java 官方為開(kāi)發(fā)者提供了很多功能強(qiáng)大的類(lèi),這些類(lèi)被分別放在各個(gè)包中,隨JDK一起發(fā)布,稱(chēng)為Java類(lèi)庫(kù)或Java API。
API(Application Programming Interface, 應(yīng)用程序編程接口)是一個(gè)通用概念。
例如我編寫(xiě)了一個(gè)類(lèi),可以獲取計(jì)算機(jī)的各種硬件信息,它很強(qiáng)大很穩(wěn)定,如果你的項(xiàng)目也需要這樣一個(gè)功能,那么你就無(wú)需再自己編寫(xiě)代碼,將我的類(lèi)拿來(lái)直接用就可以。但是,我的類(lèi)代碼很復(fù)雜,讓你讀完這些代碼不太現(xiàn)實(shí),而且我也不希望你看到我的代碼(你也沒(méi)必要也不希望讀懂這些晦澀的代碼),我要保護(hù)我的版權(quán),怎么辦呢?
我可以先將我的類(lèi)編譯,并附帶一個(gè)文檔,告訴你我的類(lèi)怎么使用,有哪些方法和屬性,你只需要按照文檔的說(shuō)明來(lái)調(diào)用就完全沒(méi)問(wèn)題,既節(jié)省了你閱讀代碼的時(shí)間,也保護(hù)了我的版權(quán)。例如,獲取CPU信息的方法:
getCpuInfo(int cpuType);
這就是一個(gè)API。也就是說(shuō),該文檔中描述的類(lèi)的使用方法,就叫做API。
我也可以開(kāi)發(fā)一個(gè)軟件,用來(lái)清理計(jì)算機(jī)中的垃圾文件,我比較有公益心,希望讓更多的開(kāi)發(fā)人員使用我的軟件,我就會(huì)在發(fā)布軟件的同時(shí)附帶一個(gè)說(shuō)明文檔,告訴你怎樣在自己的程序中調(diào)用,這也叫做API。
Java API也有一個(gè)說(shuō)明文檔,入口地址:http://www.oracle.com/technetwork/java/api
選擇對(duì)應(yīng)版本的Java,點(diǎn)擊鏈接進(jìn)入即可。J2SE 1.7 的API地址為:http://docs.oracle.com/javase/7/docs/api/
這個(gè)文檔是在線的,官方會(huì)隨時(shí)更新。當(dāng)然你也可以下載到本地,請(qǐng)大家自己百度怎么下載。
打開(kāi)J2SE 1.7 的API文檔,如下圖所示:
Java類(lèi)庫(kù)中有很多包:
以 java.* 開(kāi)頭的是Java的核心包,所有程序都會(huì)使用這些包中的類(lèi);
以 javax.* 開(kāi)頭的是擴(kuò)展包,x 是 extension 的意思,也就是擴(kuò)展。雖然 javax.* 是對(duì) java.* 的優(yōu)化和擴(kuò)展,但是由于 javax.* 使用的越來(lái)越多,很多程序都依賴(lài)于 javax.*,所以 javax.* 也是核心的一部分了,也隨JDK一起發(fā)布。
以 org.* 開(kāi)頭的是各個(gè)機(jī)構(gòu)或組織發(fā)布的包,因?yàn)檫@些組織很有影響力,它們的代碼質(zhì)量很高,所以也將它們開(kāi)發(fā)的部分常用的類(lèi)隨JDK一起發(fā)布。
在包的命名方面,為了防止重名,有一個(gè)慣例:大家都以自己域名的倒寫(xiě)形式作為開(kāi)頭來(lái)為自己開(kāi)發(fā)的包命名,例如百度發(fā)布的包會(huì)以 com.baidu.* 開(kāi)頭,w3c組織發(fā)布的包會(huì)以 org.w3c.* 開(kāi)頭,微學(xué)苑發(fā)布的包會(huì)以 net.weixueyuan.* 開(kāi)頭……
組織機(jī)構(gòu)的域名后綴一般為 org,公司的域名后綴一般為 com,可以認(rèn)為 org.* 開(kāi)頭的包為非盈利組織機(jī)構(gòu)發(fā)布的包,它們一般是開(kāi)源的,可以免費(fèi)使用在自己的產(chǎn)品中,不用考慮侵權(quán)問(wèn)題,而以 com.* 開(kāi)頭的包往往由盈利性的公司發(fā)布,可能會(huì)有版權(quán)問(wèn)題,使用時(shí)要注意。
java中常用的幾個(gè)包介紹:
更多的包和說(shuō)明請(qǐng)參考API文檔。
Java import以及Java類(lèi)的搜索路徑
如果你希望使用Java包中的類(lèi),就必須先使用import語(yǔ)句導(dǎo)入。
import語(yǔ)句與C語(yǔ)言中的 #include 有些類(lèi)似,語(yǔ)法為:
import package1[.package2…].classname;
package 為包名,classname 為類(lèi)名。例如:
import java.util.Date; // 導(dǎo)入 java.util 包下的 Date 類(lèi) import java.util.Scanner; // 導(dǎo)入 java.util 包下的 Scanner 類(lèi) import javax.swing.*; // 導(dǎo)入 javax.swing 包下的所有類(lèi),* 表示所有類(lèi)
注意:
import 只能導(dǎo)入包所包含的類(lèi),而不能導(dǎo)入包。
為方便起見(jiàn),我們一般不導(dǎo)入單獨(dú)的類(lèi),而是導(dǎo)入包下所有的類(lèi),例如 import java.util.*;。
Java 編譯器默認(rèn)為所有的 Java 程序?qū)肓?JDK 的 java.lang 包中所有的類(lèi)(import java.lang.*;),其中定義了一些常用類(lèi),如 System、String、Object、Math 等,因此我們可以直接使用這些類(lèi)而不必顯式導(dǎo)入。但是使用其他類(lèi)必須先導(dǎo)入。
前面講到的”Hello World“程序使用了System.out.println(); 語(yǔ)句,System 類(lèi)位于 java.lang 包,雖然我們沒(méi)有顯式導(dǎo)入這個(gè)包中的類(lèi),但是Java 編譯器默認(rèn)已經(jīng)為我們導(dǎo)入了,否則程序會(huì)執(zhí)行失敗。
Java類(lèi)的搜索路徑
Java程序運(yùn)行時(shí)要導(dǎo)入相應(yīng)的類(lèi),也就是加載 .class 文件的過(guò)程。
假設(shè)有如下的 import 語(yǔ)句:
import p1.Test;
該語(yǔ)句表明要導(dǎo)入 p1 包中的 Test 類(lèi)。
安裝JDK時(shí),我們已經(jīng)設(shè)置了環(huán)境變量 CLASSPATH 來(lái)指明類(lèi)庫(kù)的路徑,它的值為 .;%JAVA_HOME%\lib,而 JAVA_HOME 又為 D:\Program Files\jdk1.7.0_71,所以 CLASSPATH 等價(jià)于 .;D:\Program Files\jdk1.7.0_71\lib。
Java 運(yùn)行環(huán)境將依次到下面的路徑尋找并載入字節(jié)碼文件 Test.class:
.p1\Test.class("."表示當(dāng)前路徑)
D:\Program Files\jdk1.7.0_71\lib\p1\Test.class
如果在第一個(gè)路徑下找到了所需的類(lèi)文件,則停止搜索,否則繼續(xù)搜索后面的路徑,如果在所有的路徑下都未能找到所需的類(lèi)文件,則編譯或運(yùn)行出錯(cuò)。
你可以在CLASSPATH變量中增加搜索路徑,例如 .;%JAVA_HOME%\lib;C:\javalib,那么你就可以將類(lèi)文件放在 C:\javalib 目錄下,Java運(yùn)行環(huán)境一樣會(huì)找到。
相關(guān)文章
從0到1學(xué)SpringCloud之SpringCloud?gateway網(wǎng)關(guān)路由配置示例詳解
Spring?Cloud?Gateway的目標(biāo)提供統(tǒng)一的路由方式且基于Filter?鏈的方式提供了網(wǎng)關(guān)基本的功能,?例如:安全、監(jiān)控、指標(biāo)和限流?,這篇文章主要介紹了從0到1學(xué)SpringCloud之SpringCloud?gateway網(wǎng)關(guān)路由配置示例詳解,需要的朋友可以參考下2023-04-04IDEA導(dǎo)入JDBC驅(qū)動(dòng)的jar包步驟詳解
JDBC是一種底層的API,是連接數(shù)據(jù)庫(kù)和Java應(yīng)用程序的紐帶,因此我們?cè)谠L問(wèn)數(shù)據(jù)庫(kù)時(shí)需要在業(yè)務(wù)邏輯層中嵌入SQL語(yǔ)句,這篇文章主要介紹了IDEA導(dǎo)入JDBC驅(qū)動(dòng)的jar包,需要的朋友可以參考下2023-07-07Spring Cloud OpenFeign REST服務(wù)客戶端原理及用法解析
這篇文章主要介紹了Spring Cloud OpenFeign REST服務(wù)客戶端原理及用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10RabbitMQ交換機(jī)與Springboot整合的簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了RabbitMQ交換機(jī)與Springboot整合的簡(jiǎn)單實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07Springboot訪問(wèn)html頁(yè)面的教程詳解
這篇文章主要介紹了Springboot訪問(wèn)html頁(yè)面的教程,本文圖文并茂給大家介紹的非常詳細(xì),需要的朋友可以參考下2018-03-03