欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java基礎(chǔ)教程之包(package)

 更新時(shí)間:2014年08月31日 17:08:10   投稿:junjie  
這篇文章主要介紹了Java基礎(chǔ)教程之包(package),本文詳細(xì)講解了包的創(chuàng)建、使用等方法,需要的朋友可以參考下

我們已經(jīng)寫(xiě)了一些Java程序。之前的每個(gè)Java程序都被保存為一個(gè)文件,比如Test.java。隨后,該程序被編譯為T(mén)est.class。我們最終使用$java Test來(lái)運(yùn)行程序。

然而,在一個(gè)正常的Java項(xiàng)目中,我們往往需要編寫(xiě)不止一個(gè).java程序,最終的Java產(chǎn)品包括了所有的Java程序。因此,Java需要解決組織Java程序的問(wèn)題。包(package)的目的就是為了更好的組織Java程序。

包的建立

包的建立非常簡(jiǎn)單。我們只用在Java程序的開(kāi)始加入package就可以了。我們以Human類為例,將它放入包中:

復(fù)制代碼 代碼如下:

package com.vamei.society;

public class Human
{
    /**
     * constructor
     */
    public Human(int h)
    {
        this.height = h;
        System.out.println("I'm born");
    }

    /**
     * accessor
     */
    public int getHeight()
    {
        return this.height;
    }

    /**
     * mutator
     */
    public void growHeight(int h)
    {
        this.height = this.height + h;
    }

    private int height;
}

上面的第一行語(yǔ)句

復(fù)制代碼 代碼如下:

package com.vamei.society;

表示該程序在com.vamei.society包中。com.vamei(vamei.com的反寫(xiě))表示包作者的域名 (很可惜,這個(gè)域名已經(jīng)被別人注冊(cè)了,所以只起演示作用)。Java要求包要有域名前綴,以便區(qū)分不同作者。society為進(jìn)一步的本地路徑名。com.vamei.society共同構(gòu)成了包的名字。

包為Java程序提供了一個(gè)命名空間(name space)。一個(gè)Java類的完整路徑由它的包和類名共同構(gòu)成,比如com.vamei.society.Human。相應(yīng)的Human.java程序要放在com/vamei/society/下。類是由完整的路徑識(shí)別的,所以不同的包中可以有同名的類,Java不會(huì)混淆。比如com.vamei.society.Human和com.vamei.creature.Human是兩個(gè)不同的類。

再看一個(gè)細(xì)節(jié)。Human類是public的,其構(gòu)造方法也是public的,所以任意其他對(duì)象都可以調(diào)用該類。我們之前說(shuō)過(guò),一個(gè)Java文件中只能有一個(gè)public的類,該類要去.java文件同名。一個(gè)類可以沒(méi)有public關(guān)鍵字,它實(shí)際上也表示一種權(quán)限: 該類在它所在的包中可見(jiàn)。也就是說(shuō),包中的其他Java程序可以訪問(wèn)該類。這是Java中的默認(rèn)訪問(wèn)權(quán)限。

同樣,對(duì)象的成員也可以是默認(rèn)權(quán)限(包中可見(jiàn))。比如我們?nèi)サ鬵etHeight()方法前面的public關(guān)鍵字。

包的調(diào)用

我們只需要將Human.java編譯的Human.class放入相應(yīng)的文件夾就可以了。比如,我將Human.class放入com/vamei/society/中。實(shí)際上,你也可以把.java文件放入相應(yīng)路徑,Java會(huì)在使用時(shí)自動(dòng)編譯。

如果整個(gè)包(也就是com文件夾)位于當(dāng)前的工作路徑中,那么不需要特別的設(shè)置,就可以使用包了,比如下面的TestAgain.java:

復(fù)制代碼 代碼如下:

import com.vamei.society.*;

public class TestAgain
{
    public static void main(String[] args)
    {
        Human aPerson = new Human(180);
        System.out.println(aPerson.getHeight());
    }

}

import用于識(shí)別路徑。利用import語(yǔ)句,我們可以引入相應(yīng)路徑下的類。*表示引入society文件夾下的所有類。在TestAgain中,我們直接使用了Human類。

我們也可以提供類的完整的路徑。這可以區(qū)分同名但不同路徑的類,比如:

復(fù)制代碼 代碼如下:

public class TestAgain
{
    public static void main(String[] args)
    {
        com.vamei.society.Human aPerson =
                  new com.vamei.society.Human(180);
        System.out.println(aPerson.getHeight());
    }

}

由于我們提供了完整的類路徑,所以不需要使用import語(yǔ)句。

如果包沒(méi)有放在當(dāng)前工作路徑下,我們?cè)谑褂冒鼤r(shí),需要通知Java。比如,我們將包放在/home/vamei/javapackage中,這樣Human.class位于/home/vamei/javapackage/com/vamei/society/Human.class,而我們的工作路徑為/home/vamei。這樣,包就無(wú)法被找到。一個(gè)方法是在使用javac和java時(shí),用-classpath說(shuō)明包所在的文件夾路徑,比如:

復(fù)制代碼 代碼如下:

$javac -classpath /home/vamei/javapackage:. TestAgain.java

$java -classpath /home/vamei/javapackage:. TestAgain


就是從/home/vamei/javapackage和工作路徑(.)中尋找包。Java可以從/home/vamei/javapackage中可以找到Human類,從.中可以找到TestAgain類。

另外也可以設(shè)置系統(tǒng)的CLASSPATH環(huán)境變量,將上述路徑加入到該變量中,而不用每次都鍵入-classpath選項(xiàng)。

類似于包的機(jī)制在其他語(yǔ)言中也很常見(jiàn),比如Python中的import機(jī)制。它們都是為了更好的組織和使用已有的程序。利用包,我們可以比較容易的拓展Java程序,使用已有的Java程序庫(kù)。注意到,包管理的是.class文件。Java號(hào)稱"一次編譯,處處運(yùn)行" (Compile Once, run anywhere)。.class文件可以在任意裝有Java虛擬機(jī)(JVM, Java Virtual Machine)的平臺(tái)上運(yùn)行,這幫助我們克服了系統(tǒng)差異造成的程序移植困難。

系統(tǒng)之間的差異可以非常大。如果我們用C語(yǔ)言編寫(xiě)程序,需要將源程序在各個(gè)平臺(tái)上重新編譯,以適應(yīng)不同的硬件條件。 Java虛擬機(jī)銜接了平臺(tái)和Java宇宙,它構(gòu)成了硬件和編程邏輯的中間層。JVM隱藏了硬件差異,提供給程序員一個(gè)“標(biāo)準(zhǔn)”的Java宇宙。而.class文件可以看做這個(gè) Java宇宙中流通的通貨。在JVM的基礎(chǔ)設(shè)施下,加上包的管理輔助,Java程序?qū)崿F(xiàn)了良好的可移植性 (portability)。

總結(jié)

package, import

默認(rèn)權(quán)限: 包中可見(jiàn)

-classpath, CLASSPATH

相關(guān)文章

  • springboot配置文件屬性變量引用方式${}和@@用法及區(qū)別說(shuō)明

    springboot配置文件屬性變量引用方式${}和@@用法及區(qū)別說(shuō)明

    這篇文章主要介紹了springboot配置文件屬性變量引用方式${}和@@用法及區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • idea創(chuàng)建springboot項(xiàng)目,Application.java不能運(yùn)行問(wèn)題及解決

    idea創(chuàng)建springboot項(xiàng)目,Application.java不能運(yùn)行問(wèn)題及解決

    這篇文章主要介紹了idea創(chuàng)建springboot項(xiàng)目,Application.java不能運(yùn)行問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • JavaWeb中Struts2攔截器深入分析(一)

    JavaWeb中Struts2攔截器深入分析(一)

    這篇文章主要為大家詳細(xì)介紹了JavaWeb中Struts2攔截器的功能,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Scala數(shù)據(jù)庫(kù)連接池的簡(jiǎn)單實(shí)現(xiàn)

    Scala數(shù)據(jù)庫(kù)連接池的簡(jiǎn)單實(shí)現(xiàn)

    本文主要介紹了Scala數(shù)據(jù)庫(kù)連接池的簡(jiǎn)單實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 關(guān)于快速測(cè)試API接口的一個(gè)新技能

    關(guān)于快速測(cè)試API接口的一個(gè)新技能

    這篇文章主要給大家介紹了關(guān)于快速測(cè)試API接口的一個(gè)新技能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • java中全排列的生成算法匯總

    java中全排列的生成算法匯總

    本文給大家匯總介紹了常見(jiàn)的6種全排列的生成算法,包括字典序法、遞增進(jìn)位數(shù)制法、遞減進(jìn)位數(shù)制法、鄰位交換法、遞歸類算法、元素增值法,有需要的小伙伴可以參考下
    2015-07-07
  • SpringBoot使用knife4j進(jìn)行在線接口調(diào)試

    SpringBoot使用knife4j進(jìn)行在線接口調(diào)試

    這篇文章主要介紹了SpringBoot使用knife4j進(jìn)行在線接口調(diào)試,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java回溯法解決全排列問(wèn)題流程詳解

    Java回溯法解決全排列問(wèn)題流程詳解

    從n個(gè)不同元素中任取m(m≤n)個(gè)元素,按照一定的順序排列起來(lái),叫做從n個(gè)不同元素中取出m個(gè)元素的一個(gè)排列。當(dāng)m=n時(shí)所有的排列情況叫全排列。這篇文章主要介紹了Java回溯法解決全排列問(wèn)題
    2022-10-10
  • java使用靜態(tài)關(guān)鍵字實(shí)現(xiàn)單例模式

    java使用靜態(tài)關(guān)鍵字實(shí)現(xiàn)單例模式

    這篇文章主要為大家詳細(xì)介紹了java使用靜態(tài)關(guān)鍵字實(shí)現(xiàn)單例模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Java?volatile關(guān)鍵字特性講解下篇

    Java?volatile關(guān)鍵字特性講解下篇

    JMM要求保證可見(jiàn)性、原子性、有序性,volatile可以保證其中的兩個(gè),本篇文章具體驗(yàn)證volatile的可見(jiàn)性,不原子性和禁重排,同時(shí)解決volatile的不保證原子性,讓代碼具有原子性
    2022-12-12

最新評(píng)論