Java中package是什么-創(chuàng)新互聯(lián)

這篇文章主要介紹Java中package是什么,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

專業(yè)領(lǐng)域包括成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、商城網(wǎng)站開(kāi)發(fā)、微信營(yíng)銷、系統(tǒng)平臺(tái)開(kāi)發(fā), 與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開(kāi)發(fā)公司不同,創(chuàng)新互聯(lián)的整合解決方案結(jié)合了幫做網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營(yíng)銷的理念,并將策略和執(zhí)行緊密結(jié)合,為客戶提供全網(wǎng)互聯(lián)網(wǎng)整合方案。

Java里的包,可以理解成文件夾,因?yàn)樗且环N樹(shù)形結(jié)構(gòu)的路徑,當(dāng)我們用package把包聲明到某個(gè)package下面時(shí),我們也要把它的.class放到以該package為名字的目錄下,否則將找不到類。

要把類放到某個(gè)包需要用package語(yǔ)句,事實(shí)上,當(dāng)我們沒(méi)有使用package語(yǔ)句時(shí),我們的類都被放到了一個(gè)默認(rèn)缺省包,這也是為什么我們運(yùn)行Java程序時(shí),在運(yùn)行目錄下面不能有同名的.class文件。

此外,一個(gè)完整類名是包名+類名,在沒(méi)有import導(dǎo)入的情況下,使用一個(gè)類需要給出完整的類名,如java.util.Date。為了方便,Java自動(dòng)導(dǎo)入兩個(gè)包java.lang和現(xiàn)在文件的缺省包,也就是說(shuō):(1)Java規(guī)定,其他包使用java.lang包中的類時(shí)無(wú)需給出完整類名;(2)缺省包中的類之間(或者說(shuō)同一個(gè)包下面)互相使用也不需要給出完整類名。

 

有包的類和無(wú)包的類互相訪問(wèn)有以下規(guī)則:(1)無(wú)包的類可以訪問(wèn)有包的類, 直接導(dǎo)入即可;(2)有包的類無(wú)法訪問(wèn)無(wú)包的類, 直接訪問(wèn)是找同一個(gè)包中的, 由于不同包需要導(dǎo)入, 而無(wú)包的類無(wú)法導(dǎo)入;(3)在定義類的時(shí)候, 為了讓別人都能使用到, 所以一定要定義一個(gè)包。

Java的包表面上看(從路徑上看)是有等級(jí)的,但實(shí)際上并沒(méi)有,比如java.awt,java.awt.color是兩個(gè)地位相同的包。java.awt.color并不屬于java.awt。

在采用類名方式使用一個(gè)類的時(shí)候, 先在當(dāng)前包中查找是否有這個(gè)類, 如果沒(méi)有才去導(dǎo)入的包中找。

包的成員

一些相關(guān)聯(lián)的類、接口、枚舉、注釋類型、包中的類所用到的資源文件如圖片等

包的作用

(1)將相關(guān)聯(lián)的接口和類集合到一塊

比如,package graphics; 就把圖形處理相關(guān)的模塊放到一起

(2)避免了類型之間命名沖突:包作為一種封裝,給類提供多層命名空間。

(3)實(shí)現(xiàn)了外界對(duì)包的訪問(wèn)控制

包的使用(包的聲明、導(dǎo)入)

總的來(lái)說(shuō),包的使用可以總結(jié)為三個(gè)步驟:如何將類和接口捆綁到包中、如何使用包中的類、以及如何安排文件系統(tǒng)以便編譯器找到源文件。

一、定義包

1、帶包類的聲明

在源代碼的第一行使用package關(guān)鍵字定義包. 包名通常全部小寫(xiě), 用"."分隔。

包的命名規(guī)范見(jiàn)鏈接:https://segmentfault.com/a/1190000008711718

https://docs.oracle.com/javase/tutorial/java/package/namingpkgs.html

包的聲明有以下原則:(1)package語(yǔ)句必須放在源文件開(kāi)頭;(2)一個(gè)源文件只能有一個(gè)package語(yǔ)句;(3)包名字全部小寫(xiě),避免與類、接口的名字沖突。

2、編譯帶包的類

javac -d 目錄 源文件名.java

3、運(yùn)行帶包的類

java 包名.類名

二、使用包

同個(gè)包的類之間訪問(wèn)比較簡(jiǎn)單,在代碼中直接以類名使用;而不同包之間的訪問(wèn)則必須滿足一個(gè)條件:一個(gè)類如果希望被其他包中的類訪問(wèn), 那么必須加上public修飾(注意:用public修飾的類必須和文件名同名)。不同包之間的使用通常有以下3種方法:(1)使用全名訪問(wèn)類;(2)import 該類;(3)import 包含該類的整個(gè)包

1、使用全名

假設(shè)有個(gè)graphics包,其中有個(gè)Circle類(public修飾),那么外包訪問(wèn)它時(shí)如下所示:

graphics.Circle cir = new graphics.Circle();

2、導(dǎo)入該類

上面使用全名的方法有些繁瑣,如果要略寫(xiě)或者經(jīng)常使用這個(gè)類時(shí)可以這樣:

import graphics.Circle;

public class PackageTest {
    public static void main(String[] args) {
        Circle cir = new Circle();
    }
}

3、導(dǎo)入整個(gè)包

當(dāng)我們想要使用該包的更多類,比如Line類時(shí),可以把該包的所有類都導(dǎo)入:

import graphics.*;

public class PackageTest {
    public static void main(String[] args) {
        Circle cir = new Circle();
        Line line = new Line();
    }
}
三、管理文件系統(tǒng)

許多Java平臺(tái)的實(shí)現(xiàn)依賴于文件系統(tǒng)的等級(jí)制度 來(lái)管理源文件和class文件。我們一般把類、接口、枚舉、注釋類型放在可以反映包名的目錄中,比如,Rectangle.java屬于graphics類,我們就放在.....\graphics\Rectangle.java的路徑上。同樣,我們對(duì)其進(jìn)行編譯產(chǎn)生的class文件也要放在類似的目錄上(這個(gè)目錄最好不要和源文件放在一起),這樣的好處是當(dāng)我們要復(fù)用某個(gè)類時(shí),就知道到哪去找了,JVM在運(yùn)行程序時(shí)也知道去哪里找類。

比如,源文件放在:<path_one>\sources\com\example\graphics\Rectangle.java

class文件放在:<path_two>\classes\com\example\graphics\Rectangle.class,其中,<path_two>\classes是類路徑(class path),由CLASSPATH系統(tǒng)變量進(jìn)行設(shè)置,而包名是com.example.graphics。編譯器、JVM通過(guò)將包名稱添加到類路徑來(lái)構(gòu)造.class文件的路徑。

所以編譯器、JVM在路徑<path_two>\classes\com\example\graphics中查找類文件。class path可以有好幾條,由分號(hào)(Windows)或冒號(hào)(UNIX)分隔。 默認(rèn)情況下,編譯器、JVM搜索當(dāng)前目錄和包含Java平臺(tái)類的JAR文件,所以這些目錄自動(dòng)位于類路徑中。

CLASSPATH是JVM或Java編譯器中的一個(gè)參數(shù),它指定用戶定義的類和包的位置。 可以在命令行上或通過(guò)環(huán)境變量設(shè)置。默認(rèn)情況下,我們?cè)L問(wèn)JDK標(biāo)準(zhǔn)API和擴(kuò)展包時(shí),無(wú)需設(shè)置查找位置。 而用戶自定義的包和庫(kù),則必須設(shè)置。由于JVM會(huì)在當(dāng)前目錄下搜索,所以當(dāng)我們的文件都在運(yùn)行目錄下時(shí),也可以不設(shè)置CLASSPATH。

有關(guān)CLASSPATH可以參考:

https://en.wikipedia.org/wiki/Classpath_%28Java%29

https://en.wikipedia.org/wiki/Java_Classloader

關(guān)于Import

關(guān)于import,有三個(gè)注意的地方。

1、

首先是,Java的包表面上的等級(jí)問(wèn)題。從路徑上看,包似乎是分層的,但它們不是。 例如,Java API包括java.awt包,java.awt.color包,java.awt.font包等等。但是,java.awt.color包、java.awt.font包和其他java.awt.xxxx包并不屬于java.awt。 前綴java.awt(The Java abstract window toolkit)的作用只是告訴開(kāi)發(fā)者——和窗口有關(guān)的包都在這里面。但是包和包之間并不是包含關(guān)系。

當(dāng)你導(dǎo)入java.awt.*時(shí),會(huì)導(dǎo)入java.awt包中的所有類型,但它不會(huì)導(dǎo)入java.awt.color,java.awt.font或任何其他java.awt.xxxx包的所有類型。 如果你要使用java.awt.color中的類以及java.awt中的類,則必須同時(shí)導(dǎo)入導(dǎo)入這兩個(gè)包:

import java.awt.*;
import java.awt.color.*;

2、

其次是名字含糊不清的問(wèn)題。當(dāng)你導(dǎo)入的兩個(gè)包中有一個(gè)類名字相同時(shí),如果你繼續(xù)采用縮寫(xiě),就會(huì)出現(xiàn)一些問(wèn)題。這時(shí),你就要使用這個(gè)類的全名。比如,java.util、java.sql包中都有Date類,程序又同時(shí)導(dǎo)入了這兩個(gè)包中的Date類。

import java.sql.*;
import java.date.*;

3、static import

當(dāng)我們需要頻繁訪問(wèn)某個(gè)類的常量和靜態(tài)方法,反復(fù)寫(xiě)它們的前綴(全名)可能不利于代碼閱讀。 靜態(tài)import語(yǔ)句就提供了一種導(dǎo)入要使用的常量和靜態(tài)方法的方法,這樣您就不需要為其名稱添加前綴。比如java.lang.Math類定義PI常量和許多靜態(tài)方法,包括計(jì)算正弦,余弦,切線,平方根,大值,最小值,指數(shù)等。

import static java.lang.Math.PI;
import static java.lang.Math.cos;

public class ImportTest {
    public static void main(String[] args) {
        double r = Math.cos(Math.PI * 2);
		double r1 = Math.cos(PI * 2);
		double r2 = cos(PI * 2);
		System.out.println(r+" "+r1+" "+r2);    
    }
}

當(dāng)然,你也可以直接全部導(dǎo)入:

import static java.lang.Math.*;

應(yīng)該注意的是,使用靜態(tài)導(dǎo)入時(shí)要非常謹(jǐn)慎。 過(guò)度使用靜態(tài)導(dǎo)入會(huì)導(dǎo)致代碼難以閱讀和維護(hù),因?yàn)殚喿x者不知道某個(gè)特定的靜態(tài)對(duì)象是哪個(gè)類的。 不過(guò),當(dāng)我們恰當(dāng)?shù)厥褂渺o態(tài)導(dǎo)入時(shí),代碼可以因?yàn)椴挥梅爆嵉貙?xiě)全名而更具可讀性。

以上是Java中package是什么的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

標(biāo)題名稱:Java中package是什么-創(chuàng)新互聯(lián)
文章分享:http://muchs.cn/article36/dpsspg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、服務(wù)器托管網(wǎng)站設(shè)計(jì)公司、企業(yè)建站品牌網(wǎng)站制作、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開(kāi)發(fā)公司