Java 包(package)
為了更好地組織類灵奖,Java 提供了包機制坑鱼,用于區(qū)別類名的命名空間栏账。
包的作用
- 把功能相似或相關的類或接口組織在同一個包中,方便類的查找和使用跨算。
- 如同文件夾一樣讨勤,包也采用了樹形目錄的存儲方式。同一個包中的類名字是不同的,不同的包中的類的名字是可以相同的淆储,當同時調(diào)用兩個不同包中相同類名的類時,應該加上包名加以區(qū)別家浇。因此本砰,包可以避免名字沖突。
- 包也限定了訪問權(quán)限钢悲,擁有包訪問權(quán)限的類才能訪問某個包中的類点额。
Java 使用包(package)這種機制是為了防止命名沖突,訪問控制莺琳,提供搜索和定位類(class)还棱、接口、枚舉(enumerations)和注釋(annotation)等惭等。
包語句的語法格式為:
package pkg1[.pkg2[.pkg3…]];
一個包(package)可以定義為一組相互聯(lián)系的類型(類珍手、接口、枚舉和注釋)辞做,為這些類型提供訪問保護和命名空間管理的功能琳要。
以下是一些 Java 中的包:
- java.lang-打包基礎的類
- java.io-包含輸入輸出功能的函數(shù)
開發(fā)者可以自己把一組類和接口等打包,并定義自己的包秤茅。而且在實際開發(fā)中這樣做是值得提倡的稚补,當你自己完成類的實現(xiàn)之后,將相關的類分組框喳,可以讓其他的編程者更容易地確定哪些類课幕、接口、枚舉和注釋等是相關的帖努。
由于包創(chuàng)建了新的命名空間(namespace)撰豺,所以不會跟其他包中的任何名字產(chǎn)生命名沖突。使用包這種機制拼余,更容易實現(xiàn)訪問控制污桦,并且讓定位相關類更加簡單。
創(chuàng)建包
創(chuàng)建包的時候匙监,你需要為這個包取一個合適的名字凡橱。之后,如果其他的一個源文件包含了這個包提供的類亭姥、接口稼钩、枚舉或者注釋類型的時候,都必須將這個包的聲明放在這個源文件的開頭达罗。
包聲明應該在源文件的第一行坝撑,每個源文件只能有一個包聲明静秆,這個文件中的每個類型都應用于它。
如果一個源文件中沒有使用包聲明巡李,那么其中的類抚笔,函數(shù),枚舉侨拦,注釋等將被放在一個無名的包(unnamed package)中殊橙。
import 關鍵字
為了能夠使用某一個包的成員,我們需要在 Java 程序中明確導入該包狱从。使用 "import" 語句可完成此功能膨蛮。
在 java 源文件中 import 語句應位于 package 語句之后,所有類的定義之前季研,可以沒有敞葛,也可以有多條,其語法格式為:
import package1[.package2…].(classname|*);
如果在一個包中训貌,一個類想要使用本包中的另一個類制肮,那么該包名可以省略冒窍。
==注意:==
類文件中可以包含任意數(shù)量的 import 聲明递沪。import 聲明必須在包聲明之后,類聲明之前综液。
類放在包中會有兩種主要的結(jié)果:
- 包名成為類名的一部分
- 包名必須與相應的字節(jié)碼所在的目錄結(jié)構(gòu)相吻合款慨。
管理文件
下面是管理你自己 java 中文件的一種簡單方式:
將類、接口等類型的源碼放在一個文本中谬莹,這個文件的名字就是這個類型的名字檩奠,并以.java作為擴展名。
通常附帽,一個公司使用它互聯(lián)網(wǎng)域名的顛倒形式來作為它的包名.
編譯的時候埠戳,編譯器為包中定義的每個類、接口等類型各創(chuàng)建一個不同的輸出文件蕉扮,輸出文件的名字就是這個類型的名字整胃,并加上 .class 作為擴展后綴。
編譯之后的 .class 文件應該和 .java 源文件一樣喳钟,它們放置的目錄應該跟包的名字對應起來屁使。但是,并不要求 .class 文件的路徑跟相應的 .java 的路徑一樣奔则。你可以分開來安排源碼和類的目錄蛮寂。
<path-one>\sources\com\runoob\test\Runoob.java
<path-two>\classes\com\runoob\test\Google.class
這樣,你可以將你的類目錄分享給其他的編程人員易茬,而不用透露自己的源碼酬蹋。用這種方法管理源碼和類文件可以讓編譯器和java 虛擬機(JVM)可以找到你程序中使用的所有類型。
類目錄的絕對路徑叫做 class path。設置在系統(tǒng)變量 CLASSPATH 中范抓。編譯器和 java 虛擬機通過將 package 名字加到 class path 后來構(gòu)造 .class 文件的路徑写半。
<path- two>\classes 是 class path,package 名字是 com.runoob.test,而編譯器和 JVM 會在 <path-two>\classes\com\runoob\test 中找 .class 文件尉咕。
一個 class path 可能會包含好幾個路徑叠蝇,多路徑應該用分隔符分開。默認情況下年缎,編譯器和 JVM 查找當前目錄悔捶。JAR 文件按包含 Java 平臺相關的類,所以他們的目錄默認放在了 class path 中单芜。
設置 CLASSPATH 系統(tǒng)變量
用下面的命令顯示當前的CLASSPATH變量:
Windows 平臺(DOS 命令行下):C:> set CLASSPATH
UNIX 平臺(Bourne shell 下):# echo $CLASSPATH
刪除當前CLASSPATH變量內(nèi)容:
Windows 平臺(DOS 命令行下):C:> set CLASSPATH=
UNIX 平臺(Bourne shell 下):# unset CLASSPATH; export CLASSPATH
設置CLASSPATH變量:
Windows 平臺(DOS 命令行下): C:> set CLASSPATH=C:\users\hughjin\java\classes
UNIX 平臺(Bourne shell 下):# CLASSPATH=/home/hughjin/java/classes; export CLASSPATH
Java常見包作用
包名 | 簡介 |
---|---|
java.lang | 該包提供了Java編程的基礎類蜕该,例如 Object、Math洲鸠、String堂淡、StringBuffer、System扒腕、Thread等绢淀,不使用該包就很難編寫Java代碼了。 |
java.util | 該包提供了包含集合框架瘾腰、遺留的集合類皆的、事件模型、日期和時間實施蹋盆、國際化和各種實用工具類(字符串標記生成器费薄、隨機數(shù)生成器和位數(shù)組)。 |
java.io | 該包通過文件系統(tǒng)栖雾、數(shù)據(jù)流和序列化提供系統(tǒng)的輸入與輸出楞抡。 |
java.net | 該包提供實現(xiàn)網(wǎng)絡應用與開發(fā)的類。 |
java.sql | 該包提供了使用Java語言訪問并處理存儲在數(shù)據(jù)源(通常是一個關系型數(shù)據(jù)庫)中的數(shù)據(jù)API析藕。 |
java.awt | 這兩個包提供了GUI設計與開發(fā)的類召廷。java.awt包提供了創(chuàng)建界面和繪制圖形圖像的所有類,而javax.swing包提供了一組“輕量級”的組件噪径,盡量讓這些組件在所有平臺上的工作方式相同柱恤。 |
javax.swing | 提供了與自然語言無關的方式來處理文本、日期找爱、數(shù)字和消息的類和接口梗顺。 |
Java支持四種不同的訪問權(quán)限:
修飾符 | 說明 |
---|---|
public | 共有的,對所有類可見车摄。 |
protected | 受保護的寺谤,對同一包內(nèi)的類和所有子類可見仑鸥。 |
private | 私有的,在同一類內(nèi)可見变屁。 |
默認的 | 在同一包內(nèi)可見眼俊。默認不使用任何修飾符。 |
訪問范圍 | private | friendly(默認) | protected | public |
---|---|---|---|---|
同一個類 | 可訪問 | 可訪問 | 可訪問 | 可訪問 |
同一包中的其他類 | 不可訪問 | 可訪問 | 可訪問 | 可訪問 |
不同包中的子類 | 不可訪問 | 不可訪問 | 可訪問 | 可訪問 |
不同包中的非子類 | 不可訪問 | 不可訪問 | 不可訪問 | 可訪問 |