摘要:實(shí)際上,一個(gè)完整的類名就是包名與類名的組合。例如一個(gè)文件內(nèi)容如下這表示和都屬于這個(gè)包,它們的完整類名分別是和。包就是文件夾包代表的是一種樹(shù)形結(jié)構(gòu)的路徑,而在操作系統(tǒng)和壓縮包當(dāng)中,路徑都是以文件夾的形式展現(xiàn)的。
1. 為什么 Java 會(huì)有包的概念?
我們知道 Class(類)是 Java 中的一等公民,所有的 Java 代碼,都要寫(xiě)在類里面。
我們也知道,在命名規(guī)則下,你可以給類起任何名字。當(dāng)你使用別人的類時(shí),首先知道的是類名,然后再了解如何使用這個(gè)類。
隨著人們編寫(xiě)的 Java 類越來(lái)越多,就會(huì)有個(gè)問(wèn)題:如果出現(xiàn)了名字相同的類怎么辦??jī)蓚€(gè)名字相同的 User 類,其內(nèi)涵是否也一樣呢?如果不一樣,要如何區(qū)分它們呢?
Package (包)就是用來(lái)解決這個(gè)問(wèn)題的。通過(guò)將同名的類放到不同的包里面,我們就可以:
對(duì)同名的類進(jìn)行區(qū)分;
精確地指明我們需要其中的哪一個(gè);
讓同名的類在一個(gè)程序當(dāng)中共存。
例如有兩個(gè) User 類,把它們分別放到包 p1 和 p2 中,就得到兩個(gè)不同的類: p1.User 和 p2.User。
所以,包的存在對(duì)于 Java 語(yǔ)言來(lái)說(shuō)是非常重要的,沒(méi)有它,Java 的世界將會(huì)十分混亂,我們可能會(huì)遇到同名的類沖突,可能會(huì)為了避免這種情況而給類起一個(gè)非常長(zhǎng)的名字。不管怎樣這都是十分痛苦的。
2. 包是類的一部分為什么這么說(shuō)呢?因?yàn)槊總€(gè)類都會(huì)屬于一個(gè)包,那些沒(méi)有指定屬于哪個(gè)包的類,我們認(rèn)為它們屬于缺省包(default package)。實(shí)際上,一個(gè)完整的類名就是包名與類名的組合。比如當(dāng)我們說(shuō) Date 類時(shí),通常指的是 java.util.Date 類。要使用這個(gè)類,我們需要給出完整的類名。下面是一個(gè)例子:
public static void main(String[] args) { System.out.println("現(xiàn)在是 " + new java.util.Date()); }
上面的例子涉及到兩個(gè)類,一個(gè)是 System,一個(gè)是 Date。為什么后者要給出完整類名,而前者不需要呢?因?yàn)?Java 有個(gè)規(guī)定:凡是在 java.lang 包下面的類,使用時(shí)都無(wú)需給出完整類名。這里的 System 類,指的就是 java.lang.System,所以只要寫(xiě)類名就可以了。
3. 聲明類屬于哪個(gè)包我們可以在 java 文件的最開(kāi)頭聲明這個(gè) java 文件中的類屬于哪個(gè)包。如果文件當(dāng)中有多個(gè)類,那么它們都屬于這個(gè)包。例如一個(gè)文件 Class1.java 內(nèi)容如下:
package p1; public class Class1 { // ... } class Class2 { // ... }
這表示 Class1 和 Class2 都屬于 p1 這個(gè)包,它們的完整類名分別是 p1.Class1 和 p1.Class2。
4. import 是一種簡(jiǎn)寫(xiě)規(guī)則因?yàn)閷?xiě)完整的類名仍然是比較痛苦的一件事(當(dāng)然比沒(méi)有包的概念還是舒服多了),所以 Java 又增加了一個(gè)方便編碼的規(guī)則:import。
import 的用法,簡(jiǎn)單的說(shuō)就是,在源代碼的開(kāi)頭聲明了 import java.util.Date;之后,下面的源代碼中使用 Date 類就無(wú)需用完整的類名了:
import java.util.Date; public static void main(String[] args) { System.out.println("現(xiàn)在是 " + new Date()); }
所以 import 的作用很簡(jiǎn)單,就是省略包名,減少不必要的重復(fù)。不過(guò)它不是萬(wàn)能的,如果你要在一個(gè) java 文件中同時(shí)使用 java.util.Date 和 java.sql.Date 的話,那么 import 就只能適用其中的一個(gè),另一個(gè)你還得用完整的類名。
5. 包就是文件夾包代表的是一種樹(shù)形結(jié)構(gòu)的路徑,而在操作系統(tǒng)和壓縮包當(dāng)中,路徑都是以文件夾的形式展現(xiàn)的。所以對(duì)初學(xué)者來(lái)說(shuō),“包就是文件夾” 這樣理解就可以了。
所以,如果一個(gè)類聲明自己在 p1 包下,那么它也要放在名為 p1 的目錄下,否則 Java 就會(huì)認(rèn)為這是錯(cuò)的。
以上就是關(guān)于 Java 包的一些基礎(chǔ)知識(shí)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/65778.html
摘要:本文接上一篇樂(lè)字節(jié)關(guān)鍵字關(guān)鍵字塊。本文是接著講述垃圾回收機(jī)制和語(yǔ)句。一垃圾回收機(jī)制全名垃圾回收機(jī)制程序員無(wú)權(quán)調(diào)用垃圾回收器。通知運(yùn)行,但是規(guī)范并不能保證立刻運(yùn)行。若缺省該語(yǔ)句,則指定為無(wú)名包。 本文接上一篇:樂(lè)字節(jié)Java|this關(guān)鍵字、static關(guān)鍵字、block塊。本文是接著講述JavaGC垃圾回收機(jī)制、package 和 import語(yǔ)句。showImg(https://se...
摘要:老夫的老夫的主頁(yè)謝謝閱讀那點(diǎn)事訪問(wèn)級(jí)別修飾符注本文討論的所有情況沒(méi)有考慮嵌套類。這種訪問(wèn)級(jí)別是范圍最大的,當(dāng)泥萌使用該修飾符修飾類的成員的時(shí)候,代表該成員可以被所有類訪問(wèn),即整個(gè)項(xiàng)目下都是可以訪問(wèn)的。 老夫的gayhub老夫的主頁(yè)謝謝閱讀 Java那點(diǎn)事-訪問(wèn)級(jí)別修飾符 注:本文討論的所有情況沒(méi)有考慮嵌套類。 Java的訪問(wèn)級(jí)別修飾符(Access Level Modifiers)有四...
摘要:一用途在創(chuàng)建項(xiàng)目的時(shí)候,可以自己手動(dòng)創(chuàng)建,也可以利用工具創(chuàng)建,也就是來(lái)創(chuàng)建??梢杂脕?lái)創(chuàng)建項(xiàng)目部署項(xiàng)目安裝管理依賴編譯代碼管理二進(jìn)制等。的目的是使項(xiàng)目過(guò)程規(guī)范化自動(dòng)化高效化及強(qiáng)大的可擴(kuò)展性。 一、maven用途 java在創(chuàng)建項(xiàng)目的時(shí)候,可以自己手動(dòng)創(chuàng)建,也可以利用工具創(chuàng)建,也就是maven來(lái)創(chuàng)建。 maven可以用來(lái)創(chuàng)建項(xiàng)目、部署項(xiàng)目、安裝管理依賴、編譯代碼、管理二進(jìn)制等。 mave...
摘要:應(yīng)用化極簡(jiǎn)教程陳光劍基于的企業(yè)級(jí)應(yīng)用開(kāi)發(fā)最佳實(shí)踐前面的章節(jié)中,我們都是在環(huán)境中開(kāi)發(fā)運(yùn)行測(cè)試應(yīng)用程序。關(guān)鍵字是分布式應(yīng)用微服務(wù)容器虛擬化。通常,在企業(yè)項(xiàng)目實(shí)踐中,會(huì)實(shí)現(xiàn)一套應(yīng)用部署發(fā)布的自動(dòng)化運(yùn)維平臺(tái)工具。 Spring Boot 應(yīng)用 Docker 化 《Spring Boot 2.0極簡(jiǎn)教程》(陳光劍)—— 基于 Gradle + Kotlin的企業(yè)級(jí)應(yīng)用開(kāi)發(fā)最佳實(shí)踐 前面的章節(jié)中,...
摘要:應(yīng)用化極簡(jiǎn)教程陳光劍基于的企業(yè)級(jí)應(yīng)用開(kāi)發(fā)最佳實(shí)踐前面的章節(jié)中,我們都是在環(huán)境中開(kāi)發(fā)運(yùn)行測(cè)試應(yīng)用程序。關(guān)鍵字是分布式應(yīng)用微服務(wù)容器虛擬化。通常,在企業(yè)項(xiàng)目實(shí)踐中,會(huì)實(shí)現(xiàn)一套應(yīng)用部署發(fā)布的自動(dòng)化運(yùn)維平臺(tái)工具。 Spring Boot 應(yīng)用 Docker 化 《Spring Boot 2.0極簡(jiǎn)教程》(陳光劍)—— 基于 Gradle + Kotlin的企業(yè)級(jí)應(yīng)用開(kāi)發(fā)最佳實(shí)踐 前面的章節(jié)中,...
閱讀 2195·2023-04-25 20:45
閱讀 1103·2021-09-22 15:13
閱讀 3679·2021-09-04 16:48
閱讀 2603·2019-08-30 15:53
閱讀 961·2019-08-30 15:44
閱讀 986·2019-08-30 15:43
閱讀 1038·2019-08-29 16:33
閱讀 3459·2019-08-29 13:08