包
本課程解釋了如何將類和接口捆綁到包中,如何使用包中的類,以及如何安排文件系統(tǒng)以便編譯器可以找到源文件。
創(chuàng)建和使用包為了使類型更易于查找和使用,避免命名沖突和控制訪問,程序員將相關(guān)類型的組捆綁到包中。
定義:包是一組提供訪問保護(hù)和名稱空間管理的相關(guān)類型,請(qǐng)注意,類型引用類、接口、枚舉和注解類型,枚舉和注解類型分別是特殊的類和接口,因此在本課中通常將類型簡(jiǎn)稱為類和接口。
作為Java平臺(tái)一部分的類型是按功能捆綁類的各種包的成員:基礎(chǔ)類在java.lang中,用于讀寫的類(輸入和輸出)在java.io中,依此類推,你也可以將類型放入包中。
假設(shè)你編寫了一組表示圖形對(duì)象的類,例如圓形、矩形、線條和點(diǎn),你還可以編寫一個(gè)Draggable接口,如果類可以使用鼠標(biāo)拖動(dòng),則可以實(shí)現(xiàn)這個(gè)接口。
//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 { . . . }
你應(yīng)該將這些類和接口捆綁在一個(gè)包中,原因有多種,包括:
你和其他程序員可以輕松確定這些類型是否相關(guān)。
你和其他程序員知道在哪里可以找到可以提供與圖形相關(guān)的功能的類型。
類型的名稱不會(huì)與其他包中的類型名稱沖突,因?yàn)榘鼤?huì)創(chuàng)建新的命名空間。
你可以允許程序包中的類型對(duì)彼此具有不受限制的訪問權(quán)限,但仍限制對(duì)程序包外部類型的訪問。
創(chuàng)建包要?jiǎng)?chuàng)建包,請(qǐng)為包選擇一個(gè)名稱,將包含該名稱的package語句放在每個(gè)源文件的頂部,該文件包含要包含在包中的類型(類、接口、枚舉和注解類型)。
package語句(例如,package graphics;)必須是源文件中的第一行,每個(gè)源文件中只能有一個(gè)package語句,它適用于文件中的所有類型。
如果將多個(gè)類型放在單個(gè)源文件中,則只有一個(gè)可以是公共的,并且它必須與源文件具有相同的名稱,例如,你可以在文件Circle.java中定義public class Circle,在文件Draggable.java中定義public interface Draggable,在文件Day.java中定義public enum Day,依此類推。可以在與公共類型相同的文件中包含非公共類型(強(qiáng)烈建議這樣做,除非非公共類型很小且與公共類型密切相關(guān)),但只有公共類型可以從包外部訪問,所有頂級(jí)非公開類型都將是包私有。
如果將上一節(jié)中列出的圖形接口和類放在名為graphics的包中,則需要六個(gè)源文件,如下所示:
//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語句,則類型最終會(huì)出現(xiàn)在未命名的包中,一般來說,一個(gè)未命名的包只適用于小型或臨時(shí)應(yīng)用程序,或者剛剛開始開發(fā)過程,否則,類和接口屬于命名包。
命名包隨著全世界程序員使用Java編程語言編寫類和接口,很多程序員可能會(huì)對(duì)不同類型使用相同的名稱,事實(shí)上,前面的例子就是這樣:當(dāng)java.awt包中已經(jīng)有一個(gè)Rectangle類時(shí),它定義了一個(gè)Rectangle類,盡管如此,編譯器允許兩個(gè)類在不同的包中具有相同的名稱。每個(gè)Rectangle類的完全限定名稱包括包名稱,也就是說,graphics包中Rectangle類的完全限定名稱是graphics.Rectangle,java.awt包中Rectangle類的完全限定名是java.awt.Rectangle。
除非兩個(gè)獨(dú)立的程序員為其包使用相同的名稱,否則這很有效,是什么防止了這個(gè)問題?公約。
命名約定包名稱全部小寫,以避免與類或接口的名稱沖突。
公司使用其反向的互聯(lián)網(wǎng)域名來開始其包名 — 例如,com.example.mypackage用于由example.com的程序員創(chuàng)建的名為mypackage的包。
在單個(gè)公司內(nèi)發(fā)生的名稱沖突需要通過公司內(nèi)的約定來處理,可能是通過在公司名稱后面包含區(qū)域或項(xiàng)目名稱(例如,com.example.region.mypackage)。
Java語言本身的包以java.或javax.開頭。
在某些情況下,互聯(lián)網(wǎng)域名可能不是有效的包名,如果域名包含連字符或其他特殊字符,如果包名稱以數(shù)字或其他字符開頭,這些字符非法用作Java名稱的開頭,或者如果包名稱包含保留的Java關(guān)鍵字,例如“int”,則會(huì)發(fā)生這種情況,在這種情況下,建議的約定是添加下劃線,例如:
域名 | 包名稱前綴 |
---|---|
hyphenated-name.example.org | org.example.hyphenated_name |
example.int | int_.example |
123name.example.com | com.example._123name |
要為類型創(chuàng)建包,請(qǐng)將package語句作為包含類型(類、接口、枚舉或注解類型)的源文件中的第一個(gè)語句。
要使用不同包中的公共類型,你有三種選擇:(1)使用類型的完全限定名稱,(2)導(dǎo)入類型,(3)導(dǎo)入類型為成員的整個(gè)包。
包的源文件和類文件的路徑名稱反映了包的名稱。
你可能必須設(shè)置CLASSPATH,以便編譯器和JVM可以找到類型的.class文件。
上一篇:泛型的限制 下一篇:使用包成員文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/72951.html
Java? 教程 Java教程是為JDK 8編寫的,本頁面中描述的示例和實(shí)踐沒有利用在后續(xù)版本中引入的改進(jìn)。 Java教程是希望使用Java編程語言創(chuàng)建應(yīng)用程序的程序員的實(shí)用指南,其中包括數(shù)百個(gè)完整的工作示例和數(shù)十個(gè)課程,相關(guān)課程組被組織成教程。 覆蓋基礎(chǔ)知識(shí)的路徑 這些教程以書籍的形式提供,如Java教程,第六版,前往Amazon.com購買。 入門 介紹Java技術(shù)和安裝Java開發(fā)軟件并使用...
使用包成員 組成包的類型稱為包成員。 要從其包外部使用公共包成員,你必須執(zhí)行以下操作之一: 通過其完全限定名稱引用該成員 導(dǎo)入包成員 導(dǎo)入成員的整個(gè)包 每種情況都適用于不同的情況,如以下各節(jié)所述。 通過其完全限定名稱引用包成員 到目前為止,本教程中的大多數(shù)示例都通過簡(jiǎn)單名稱引用類型,例如Rectangle和StackOfInts,如果你編寫的代碼與該成員位于同一個(gè)包中,或者已導(dǎo)入該成員,則可以...
管理源文件和類文件 Java平臺(tái)的許多實(shí)現(xiàn)依賴于分層文件系統(tǒng)來管理源文件和類文件,盡管Java語言規(guī)范不要求這樣做,策略如下。 將類、接口、枚舉或注解類型的源代碼放在文本文件中,該文件的名稱是類型的簡(jiǎn)單名稱,其擴(kuò)展名為.java,例如: //in the Rectangle.java file package graphics; public class Rectangle { ... ...
Date-Time Java SE 8發(fā)行版中引入的Date-Time包java.time提供了全面的日期和時(shí)間模型,是在JSR 310:Date and Time API下開發(fā)的,盡管java.time基于國際標(biāo)準(zhǔn)化組織(ISO)日歷系統(tǒng),但也支持常用的全球日歷。 此課程介紹了使用基于ISO的類來表示日期和時(shí)間以及操作日期和時(shí)間值的基本原理。 概述 時(shí)間似乎是一個(gè)簡(jiǎn)單的主題,即便是便宜的手表也能...
如何拋出異常 在捕獲異常之前,某些代碼必須拋出一個(gè),任何代碼都可能拋出異常:你的代碼,來自其他人編寫的包中的代碼,例如Java平臺(tái)附帶的包或Java運(yùn)行時(shí)環(huán)境,無論拋出什么異常,它總是使用throw語句拋出。 你可能已經(jīng)注意到,Java平臺(tái)提供了許多異常類,所有類都是Throwable類的后代,并且所有類都允許程序區(qū)分在程序執(zhí)行期間可能發(fā)生的各種類型的異常。 你還可以創(chuàng)建自己的異常類來表示你編寫的...
閱讀 3250·2021-10-21 17:50
閱讀 3260·2021-10-08 10:05
閱讀 3386·2021-09-22 15:04
閱讀 586·2019-08-30 14:00
閱讀 1946·2019-08-29 17:01
閱讀 1512·2019-08-29 15:16
閱讀 3222·2019-08-26 13:25
閱讀 856·2019-08-26 11:44