Java™ 教程(建立和使用包)

本課程解釋瞭如何將類和接口捆綁到包中,如何使用包中的類,以及如何安排文件系統以便編譯器能夠找到源文件。java

建立和使用包

爲了使類型更易於查找和使用,避免命名衝突和控制訪問,程序員將相關類型的組捆綁到包中。程序員

定義:包是一組提供訪問保護和名稱空間管理的相關類型,請注意,類型引用類、接口、枚舉和註解類型,枚舉和註解類型分別是特殊的類和接口,所以在本課中一般將類型簡稱爲類和接口。

做爲Java平臺一部分的類型是按功能捆綁類的各類包的成員:基礎類在java.lang中,用於讀寫的類(輸入和輸出)在java.io中,依此類推,你也能夠將類型放入包中。編程

假設你編寫了一組表示圖形對象的類,例如圓形、矩形、線條和點,你還能夠編寫一個Draggable接口,若是類可使用鼠標拖動,則能夠實現這個接口。segmentfault

//in the Draggable.java file
public interface Draggable {
    ...
}

//in the Graphic.java file
public abstract class Graphic {
    ...
}

//in the Circle.java file
public class Circle extends Graphic
    implements Draggable {
    . . .
}

//in the Rectangle.java file
public class Rectangle extends Graphic
    implements Draggable {
    . . .
}

//in the Point.java file
public class Point extends Graphic
    implements Draggable {
    . . .
}

//in the Line.java file
public class Line extends Graphic
    implements Draggable {
    . . .
}

你應該將這些類和接口捆綁在一個包中,緣由有多種,包括:編程語言

  • 你和其餘程序員能夠輕鬆肯定這些類型是否相關。
  • 你和其餘程序員知道在哪裏能夠找到能夠提供與圖形相關的功能的類型。
  • 類型的名稱不會與其餘包中的類型名稱衝突,由於包會建立新的命名空間。
  • 你能夠容許程序包中的類型對彼此具備不受限制的訪問權限,但仍限制對程序包外部類型的訪問。

建立包

要建立包,請爲包選擇一個名稱,將包含該名稱的package語句放在每一個源文件的頂部,該文件包含要包含在包中的類型(類、接口、枚舉和註解類型)。code

package語句(例如,package graphics;)必須是源文件中的第一行,每一個源文件中只能有一個package語句,它適用於文件中的全部類型。對象

若是將多個類型放在單個源文件中,則只有一個能夠是公共的,而且它必須與源文件具備相同的名稱,例如,你能夠在文件 Circle.java中定義 public class Circle,在文件 Draggable.java中定義 public interface Draggable,在文件 Day.java中定義 public enum Day,依此類推。

能夠在與公共類型相同的文件中包含非公共類型(強烈建議這樣作,除非非公共類型很小且與公共類型密切相關),但只有公共類型能夠從包外部訪問,全部頂級非公開類型都將是包私有。接口

若是將上一節中列出的圖形接口和類放在名爲graphics的包中,則須要六個源文件,以下所示:開發

//in the Draggable.java file
package graphics;
public interface Draggable {
    . . .
}

//in the Graphic.java file
package graphics;
public abstract class Graphic {
    . . .
}

//in the Circle.java file
package graphics;
public class Circle extends Graphic
    implements Draggable {
    . . .
}

//in the Rectangle.java file
package graphics;
public class Rectangle extends Graphic
    implements Draggable {
    . . .
}

//in the Point.java file
package graphics;
public class Point extends Graphic
    implements Draggable {
    . . .
}

//in the Line.java file
package graphics;
public class Line extends Graphic
    implements Draggable {
    . . .
}

若是不使用package語句,則類型最終會出如今未命名的包中,通常來講,一個未命名的包只適用於小型或臨時應用程序,或者剛剛開始開發過程,不然,類和接口屬於命名包。get

命名包

隨着全世界程序員使用Java編程語言編寫類和接口,不少程序員可能會對不一樣類型使用相同的名稱,事實上,前面的例子就是這樣:當java.awt包中已經有一個Rectangle類時,它定義了一個Rectangle類,儘管如此,編譯器容許兩個類在不一樣的包中具備相同的名稱。每一個Rectangle類的徹底限定名稱包括包名稱,也就是說,graphics包中Rectangle類的徹底限定名稱是graphics.Rectanglejava.awt包中Rectangle類的徹底限定名是java.awt.Rectangle

除非兩個獨立的程序員爲其包使用相同的名稱,不然這頗有效,是什麼防止了這個問題?公約。

命名約定

包名稱所有小寫,以免與類或接口的名稱衝突。

公司使用其反向的互聯網域名來開始其包名 — 例如,com.example.mypackage用於由example.com的程序員建立的名爲mypackage的包。

在單個公司內發生的名稱衝突須要經過公司內的約定來處理,多是經過在公司名稱後面包含區域或項目名稱(例如,com.example.region.mypackage)。

Java語言自己的包以java.javax.開頭。

在某些狀況下,互聯網域名可能不是有效的包名,若是域名包含連字符或其餘特殊字符,若是包名稱以數字或其餘字符開頭,這些字符非法用做Java名稱的開頭,或者若是包名稱包含保留的Java關鍵字,例如「int」,則會發生這種狀況,在這種狀況下,建議的約定是添加下劃線,例如:

域名 包名稱前綴
hyphenated-name.example.org org.example.hyphenated_name
example.int int_.example
123name.example.com com.example._123name

建立和使用包的總結

要爲類型建立包,請將package語句做爲包含類型(類、接口、枚舉或註解類型)的源文件中的第一個語句。

要使用不一樣包中的公共類型,你有三種選擇:(1)使用類型的徹底限定名稱,(2)導入類型,(3)導入類型爲成員的整個包。

包的源文件和類文件的路徑名稱反映了包的名稱。

你可能必須設置CLASSPATH,以便編譯器和JVM能夠找到類型的.class文件。


上一篇:泛型的限制

下一篇:使用包成員

相關文章
相關標籤/搜索