Java入門(mén)———Java面向?qū)ο蠼虒W(xué)(Java 包(package))

Java快速入門(mén)(本文篇幅較長(zhǎng)撰洗,建議點(diǎn)喜歡后收藏后閱讀)
每天學(xué)會(huì)一個(gè)知識(shí)點(diǎn),覺(jué)得不錯(cuò)的可以留言關(guān)注下浮创,戳我主頁(yè)獲取Java資料(工具包,面試資料砌函,視頻教學(xué)斩披,包含社群解答)

Java 包(package)

為了更好地組織類(lèi),Java提供了包機(jī)制讹俊,用于區(qū)別類(lèi)名的命名空間垦沉。

包的作用

  • 1 把功能相似或相關(guān)的類(lèi)或接口組織在同一個(gè)包中,方便類(lèi)的查找和使用仍劈。
  • 2 如同文件夾一樣厕倍,包也采用了樹(shù)形目錄的存儲(chǔ)方式。同一個(gè)包中的類(lèi)名字是不同的贩疙,不同的包中的類(lèi)的名字是可以相同的讹弯,當(dāng)同時(shí)調(diào)用兩個(gè)不同包中相同類(lèi)名的類(lèi)時(shí)况既,應(yīng)該加上包名加以區(qū)別。因此组民,包可以避免名字沖突棒仍。
  • 3 包也限定了訪問(wèn)權(quán)限,擁有包訪問(wèn)權(quán)限的類(lèi)才能訪問(wèn)某個(gè)包中的類(lèi)臭胜。
    Java使用包(package)這種機(jī)制是為了防止命名沖突莫其,訪問(wèn)控制,提供搜索和定位類(lèi)(class)耸三、接口榜配、枚舉(enumerations)和注釋?zhuān)╝nnotation)等。

包語(yǔ)句的語(yǔ)法格式為:

package pkg1[.pkg2[.pkg3…]];

例如,一個(gè)Something.java 文件它的內(nèi)容

package net.java.util
public class Something{
   ...
}

那么它的路徑應(yīng)該是 net/java/util/Something.java 這樣保存的吕晌。 package(包)的作用是把不同的java程序分類(lèi)保存蛋褥,更方便的被其他java程序調(diào)用。
一個(gè)包(package)可以定義為一組相互聯(lián)系的類(lèi)型(類(lèi)睛驳、接口烙心、枚舉和注釋?zhuān)瑸檫@些類(lèi)型提供訪問(wèn)保護(hù)和命名空間管理的功能乏沸。

以下是一些Java中的包:

  • java.lang-打包基礎(chǔ)的類(lèi)
  • java.io-包含輸入輸出功能的函數(shù)
    開(kāi)發(fā)者可以自己把一組類(lèi)和接口等打包淫茵,并定義自己的package。而且在實(shí)際開(kāi)發(fā)中這樣做是值得提倡的蹬跃,當(dāng)你自己完成類(lèi)的實(shí)現(xiàn)之后匙瘪,將相關(guān)的類(lèi)分組,可以讓其他的編程者更容易地確定哪些類(lèi)蝶缀、接口丹喻、枚舉和注釋等是相關(guān)的。

由于package創(chuàng)建了新的命名空間(namespace)翁都,所以不會(huì)跟其他package中的任何名字產(chǎn)生命名沖突碍论。使用包這種機(jī)制,更容易實(shí)現(xiàn)訪問(wèn)控制柄慰,并且讓定位相關(guān)類(lèi)更加簡(jiǎn)單鳍悠。

創(chuàng)建包

創(chuàng)建package的時(shí)候,你需要為這個(gè)package取一個(gè)合適的名字坐搔。之后藏研,如果其他的一個(gè)源文件包含了這個(gè)包提供的類(lèi)、接口概行、枚舉或者注釋類(lèi)型的時(shí)候蠢挡,都必須將這個(gè)package的聲明放在這個(gè)源文件的開(kāi)頭。

包聲明應(yīng)該在源文件的第一行,每個(gè)源文件只能有一個(gè)包聲明袒哥,這個(gè)文件中的每個(gè)類(lèi)型都應(yīng)用于它。

如果一個(gè)源文件中沒(méi)有使用包聲明消略,那么其中的類(lèi)堡称,函數(shù),枚舉艺演,注釋等將被放在一個(gè)無(wú)名的包(unnamed package)中却紧。

例子
讓我們來(lái)看一個(gè)例子,這個(gè)例子創(chuàng)建了一個(gè)叫做animals的包胎撤。通常使用小寫(xiě)的字母來(lái)命名避免與類(lèi)晓殊、接口名字的沖突。

在animals包中加入一個(gè)接口(interface):

/* 文件名: Animal.java */
package animals;

interface Animal {
   public void eat();
   public void travel();
}

接下來(lái)伤提,在同一個(gè)包中加入該接口的實(shí)現(xiàn):

package animals;

/* 文件名 : MammalInt.java */
public class MammalInt implements Animal{

   public void eat(){
      System.out.println("Mammal eats");
   }

   public void travel(){
      System.out.println("Mammal travels");
   } 

   public int noOfLegs(){
      return 0;
   }

   public static void main(String args[]){
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
} 

然后巫俺,編譯這兩個(gè)文件,并把他們放在一個(gè)叫做animals的子目錄中肿男。 用下面的命令來(lái)運(yùn)行:

$ mkdir animals
$ cp Animal.class  MammalInt.class animals
$ java animals/MammalInt
Mammal eats
Mammal travel

import關(guān)鍵字

為了能夠使用某一個(gè)包的成員介汹,我們需要在 Java 程序中明確導(dǎo)入該包。使用"import"語(yǔ)句可完成此功能舶沛。

在 java 源文件中 import 語(yǔ)句應(yīng)位于 package 語(yǔ)句之后嘹承,所有類(lèi)的定義之前,可以沒(méi)有如庭,也可以有多條叹卷,其語(yǔ)法格式為:

import package1[.package2…].(classname|*);

如果在一個(gè)包中坪它,一個(gè)類(lèi)想要使用本包中的另一個(gè)類(lèi)瘤载,那么該包名可以省略惩阶。
例子
下面的payroll包已經(jīng)包含了Employee類(lèi),接下來(lái)向payroll包中添加一個(gè)Boss類(lèi)恐锣。Boss類(lèi)引用Employee類(lèi)的時(shí)候可以不用使用payroll前綴诀姚,Boss類(lèi)的實(shí)例如下矢赁。

package payroll;

public class Boss
{
   public void payEmployee(Employee e)
   {
      e.mailCheck();
   }
}

如果Boss類(lèi)不在payroll包中又會(huì)怎樣?Boss類(lèi)必須使用下面幾種方法之一來(lái)引用其他包中的類(lèi)
使用類(lèi)全名描述,例如:

payroll.Employee

用import關(guān)鍵字引入,使用通配符"*"

import payroll.*;

使用import關(guān)鍵字引入Employee類(lèi)

import payroll.Employee;

注意:類(lèi)文件中可以包含任意數(shù)量的import聲明准夷。import聲明必須在包聲明之后读宙,類(lèi)聲明之前。

package的目錄結(jié)構(gòu)

類(lèi)放在包中會(huì)有兩種主要的結(jié)果:

  • 包名成為類(lèi)名的一部分蔫耽,正如我們前面討論的一樣图甜。
  • 包名必須與相應(yīng)的字節(jié)碼所在的目錄結(jié)構(gòu)相吻合碍粥。
    下面是管理你自己java中文件的一種簡(jiǎn)單方式:

將類(lèi)、接口等類(lèi)型的源碼放在一個(gè)文本中黑毅,這個(gè)文件的名字就是這個(gè)類(lèi)型的名字嚼摩,并以.java作為擴(kuò)展名。例如:

// 文件名 :  Car.java

package vehicle;

public class Car {
   // 類(lèi)實(shí)現(xiàn)  
}

接下來(lái)博肋,把源文件放在一個(gè)目錄中低斋,這個(gè)目錄要對(duì)應(yīng)類(lèi)所在包的名字蜂厅。

....\vehicle\Car.java

現(xiàn)在匪凡,正確的類(lèi)名和路徑將會(huì)是如下樣子:

  • 類(lèi)名 -> vehicle.Car
  • 路徑名 -> vehicle\Car.java (in windows)
    通常,一個(gè)公司使用它互聯(lián)網(wǎng)域名的顛倒形式來(lái)作為它的包名.例如:互聯(lián)網(wǎng)域名是apple.com掘猿,所有的包名都以com.apple開(kāi)頭病游。包名中的每一個(gè)部分對(duì)應(yīng)一個(gè)子目錄。

例如:這個(gè)公司有一個(gè)com.apple.computers的包稠通,這個(gè)包包含一個(gè)叫做Dell.java的源文件衬衬,那么相應(yīng)的,應(yīng)該有如下面的一連串子目錄:

....\com\apple\computers\Dell.java

編譯的時(shí)候改橘,編譯器為包中定義的每個(gè)類(lèi)滋尉、接口等類(lèi)型各創(chuàng)建一個(gè)不同的輸出文件,輸出文件的名字就是這個(gè)類(lèi)型的名字飞主,并加上.class作為擴(kuò)展后綴狮惜。 例如:

// 文件名: Dell.java

package com.apple.computers;
public class Dell{
      
}
class Ups{
      
}

現(xiàn)在,我們用-d選項(xiàng)來(lái)編譯這個(gè)文件碌识,如下:

$javac -d . Dell.java

這樣會(huì)像下面這樣放置編譯了的文件:

.\com\apple\computers\Dell.class.\com\apple\computers\Ups.class

你可以像下面這樣來(lái)導(dǎo)入所有 \com\apple\computers\中定義的類(lèi)碾篡、接口等:

import com.apple.computers.*;

編譯之后的.class文件應(yīng)該和.java源文件一樣,它們放置的目錄應(yīng)該跟包的名字對(duì)應(yīng)起來(lái)筏餐。但是开泽,并不要求.class文件的路徑跟相應(yīng)的.java的路徑一樣。你可以分開(kāi)來(lái)安排源碼和類(lèi)的目錄魁瞪。

<path-one>\sources\com\apple\computers\Dell.java
<path-two>\classes\com\apple\computers\Dell.class

這樣穆律,你可以將你的類(lèi)目錄分享給其他的編程人員,而不用透露自己的源碼导俘。用這種方法管理源碼和類(lèi)文件可以讓編譯器和java虛擬機(jī)(JVM)可以找到你程序中使用的所有類(lèi)型众旗。

類(lèi)目錄的絕對(duì)路徑叫做class path。設(shè)置在系統(tǒng)變量CLASSPATH中趟畏。編譯器和java虛擬機(jī)通過(guò)將package名字加到class path后來(lái)構(gòu)造.class文件的路徑贡歧。

<path- two>\classes是class path,package名字是com.apple.computers,而編譯器和JVM會(huì)在 <path-two>\classes\com\apple\compters中找.class文件。

一個(gè)class path可能會(huì)包含好幾個(gè)路徑利朵。多路徑應(yīng)該用分隔符分開(kāi)律想。默認(rèn)情況下,編譯器和JVM查找當(dāng)前目錄绍弟。JAR文件按包含Java平臺(tái)相關(guān)的類(lèi)技即,所以他們的目錄默認(rèn)放在了class path中。

設(shè)置CLASSPATH系統(tǒng)變量

用下面的命令顯示當(dāng)前的CLASSPATH變量:

  • Windows平臺(tái)(DOS 命令行下)-> C:> set CLASSPATH

  • UNIX平臺(tái)(Bourne shell下)-> % echo $CLASSPATH
    刪除當(dāng)前CLASSPATH變量?jī)?nèi)容:

  • Windows平臺(tái)(DOS 命令行下)-> C:> set CLASSPATH=
    UNIX平臺(tái)(Bourne shell下)-> % unset CLASSPATH; export CLASSPATH

  • 設(shè)置CLASSPATH變量:

  • Windows平臺(tái)(DOS 命令行下)-> set CLASSPATH=C:\users\jack\java\classes

  • UNIX平臺(tái)(Bourne shell下)-> % CLASSPATH=/home/jack/java/classes; export CLASSPATH

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末而叼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子葵陵,更是在濱河造成了極大的恐慌,老刑警劉巖脱篙,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異伤柄,居然都是意外死亡绊困,警方通過(guò)查閱死者的電腦和手機(jī)适刀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)笔喉,“玉大人取视,你說(shuō)我怎么就攤上這事∪欢簦” “怎么了贫途?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵待侵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我怨酝,道長(zhǎng)那先,這世上最難降的妖魔是什么农猬? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任售淡,我火速辦了婚禮慷垮,結(jié)果婚禮上揍堕,老公的妹妹穿的比我還像新娘。我一直安慰自己芹血,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布幔烛。 她就那樣靜靜地躺著囊蓝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪慎颗。 梳的紋絲不亂的頭發(fā)上言询,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天运杭,我揣著相機(jī)與錄音,去河邊找鬼辆憔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛虱咧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播玄坦,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼绘沉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼煎楣!你這毒婦竟也來(lái)了车伞?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤困曙,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后慷丽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡翔怎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年杨耙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片容握。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡车柠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出竹祷,到底是詐尸還是另有隱情,我是刑警寧澤塑陵,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布令花,位于F島的核電站,受9級(jí)特大地震影響兼都,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扮碧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一芬萍、第九天 我趴在偏房一處隱蔽的房頂上張望尤揣。 院中可真熱鬧柬祠,春花似錦、人聲如沸漫蛔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至剃毒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間益缠,已是汗流浹背基公。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留轰豆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓骂租,卻偏偏與公主長(zhǎng)得像雨席,于是被迫代替她去往敵國(guó)和親吠式。 傳聞我的和親對(duì)象是個(gè)殘疾皇子陡厘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容