【Java13】包

“包”這個機制,類似于分組。主要作用是區分不同組內的同名類。例如,高三三班有一個“王五”,高二八班也有一個“王五”。高三三班和高三八班就是兩個不同的包。

Java中的包(package)機制主要提供了類的多層命名空間,用于解決類的命名沖突、類文件管理等。

類似于C++中的命名空間namespace

如果希望把一個類放在指定的包結構下,應該在Java源程序的第一個非注釋行聲明:

package packageName;

一旦如上聲明,這個源文件中所有定位的類都屬于這個包。

如果其他人要使用這個類,需要使用這個類的完整名稱:包名+類名。

// 文件:Hello.java
package lee;
public class Hello
{public static void main(String[] args){// TODO}
}

如果使用如下命令來編譯

javac -d . Hello.java

按道理,-d是指定編譯結果.class文件的位置,這里指定是當前目錄(.),但實際上是在當前路徑下創建了一個文件夾lee,里面包含Hello.class。

這是因為,Java規定位于包中的類,在文件系統中也必須有與包名層次相同的目錄結構

但是,如果直接使用javac Hello.java不會創建lee文件夾。這樣做也屬于挑戰智商的行為,一般還是推薦使用-d,讓它形成層次目錄結構。

在執行的時候,需要給出這個類的完整名稱:

java lee.Hello

虛擬機在裝載lee.Hello類時,會依次搜索CLASSPATH環境變量所指定的系列路徑,查找這些路徑下是否包含lee路徑,并在lee路徑下查找是否包含Hello.class文件。同一個包中的類不必位于相同路徑下,只要它們都在CLASSPATH環境變量中即可。例如lee.Person可以在C盤中,lee.PersonTest可以在D盤中。

另外,除了類文件組織成層次結構外,源文件也要組織成對應的層次結構。此外,建議把源文件和class文件分開放:

在這里插入圖片描述

把class文件放到某個目錄下,并不意味這個目錄成了這個類的包名。必須在Java源文件中聲明package來指定。

Java包機制運行需要兩個條件:

  1. 在源文件中打包(package packageName);
  2. class文件位于對應路徑下(這個一般通過編譯器來自動管理)。

對于包重名的情況,建議包也可以通過層級來組織,比如org.crazyit.elearning.student.lee云云。

package的使用有如下注意事項:

  1. 必須是源文件中非注釋的第一句;
  2. 一個源文件只能指定一個包;
  3. 如果沒有顯示指定包,則類位于默認包下;
  4. 同一個包下的類可以自由訪問。
// HelloTest.java
package lee;
public class HelloTest
{public static void main(String[] args){// 直接訪問相同包下的類,不需要使用包前綴var h = new Hello();}
}

如果在lee包下再定義一個子包,那么子包中的類不能直接訪問lee包中的類了。此外,在使用子包中的類時,要使用該類的全名(包名+類名),不能省略前面lee包的路徑。

package lee.sub;
public class Apple{}

lee.Hello中使用Apple類時,必須用完整路徑lee.sub.Apple

可以這么理解:父包和子包從邏輯上存在上下關系;但是從用法上沒有任何關系。所以調用時要使用完整包名+類名。

package lee;
public class Hello
{public static void main(String[] args){var a = new lee.sub.Apple(); // 使用完整路徑}
}

為了簡化對不用包的類的調用,Java引入了import關鍵字。import可以導入指定包層次下的某個類或全部類。

  • importpackage之后,類定義之前;
  • 一個Java源文件只能有一個package,但是可以有多個import
import lee.sub.Apple; // 導入lee.sub中的Apple類
import lee.sub.* 			// 導入lee.sub中的所有類

使用import后,在當前源文件中就不用再輸入完整路徑了。

這一條和C++中的using namespace類似。

Java默認所有源文件都導入了java.lang包下的所有類。所以String, System類不需要顯示的import。

import語句可以簡化編程,但并不是必需的

JDK 1.5之后,還允許使用import導入類成員變量、類方法,區別在于加上了static修飾符:

import static package.subpackage.className.fieldName|methodName;

例如,使用import static導入java.lang包中System類和Math類的所有靜態成員和靜態方法(類成員和類方法):

import static java.lang.System.*;
import static java.lang.Math.*;public class StaticImportTest
{public static void main(String[] args){// out是System的成員方法;// PI是Math類的成員變量;out.println(PI);}
}

現在總結Java源文件的大致結構:

package 語句;  // 0或者1條,位于文件非注釋行的最開始
import | import static 語句; // 0條或者多條,位于package之后,第一個public類定義之前
public className | interfaceName | enumName; //0個或者1個public類、接口或枚舉,注意一個源文件只能有1個public類
className | interfaceName | enumName; // 0個或多個普通類、接口或枚舉,可以有,也可以沒有

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42571.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42571.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42571.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MISRA C2012學習筆記(6)-Rules 8.11

文章目錄 8.11 指針類型轉換(Pointer type conversions)Rule 11.1 不能在函數指針和任何其他類型指針之間進行轉換Rule 11.2 不得在指向不完整類型的指針和其他任何類型間進行轉換Rule 11.3 不得在指向不同對象類型的指針之間執行強制轉換Rule 11.4 不得在指向對象的指針和整數…

HTTP長連接

長連接優點 HTTP為什么要開啟長連接呢? 主要是為了節省建立的時間,請求可以復用同一條TCP鏈路,不用重復進行三握+四揮 如果沒有長連接,每次請求都做三握+四揮 如果有長鏈接,在一個 TCP 連接中可以持續發送多份數據而不會斷開連接,即請求可以復用TCP鏈路 長連接缺點 …

第六十八回 東平府誤陷九紋龍 宋公明義釋雙槍將-文心大模型ernie-speed免費使用方法

宋江和盧俊義抓鬮兒,宋江打東平府,盧俊義打東昌府,誰先打下誰做梁山泊主。宋江帶領林沖、花榮、劉唐等二十八人,盧俊義帶領吳用、公孫勝、關勝等二十八人。 宋江等人到了東平府外安山鎮,郁保四和王定六自告奮勇去下戰…

比Elasticsearch更高效的開源搜索引擎Meilisearch——筑夢之路

功能說明 快速與高效: Meilisearch 旨在提供快速的搜索速度。它可以在毫秒級別內返回查詢結果,即使在處理大型數據集時也是如此。 例如,在官方提供的基準測試中,使用 Meilisearch 處理 10 萬個文檔時,平均搜索時間為 …

vue3制作輪播圖+vue輪播圖的圖片引入方式

對應的<teemplate> <template><div class"box"><ul class"ul1" ref"ul1"><li v-for"(img, idx) in images" :key"idx" :style"{ zIndex: img.zIndex }"><img :src"img.s…

深度學習驅動的中文情感分析:PlugLink 在實踐中的橋梁作用

深度學習驅動的中文情感分析&#xff1a;PlugLink 在實踐中的橋梁作用 情感分析技術則如同濾網&#xff0c;幫助我們從這股洪流中篩選出有價值的情感信號。特別是對于中文這樣的多音字、同音詞豐富且語境復雜度高的語言&#xff0c;深度學習模型展現了無與倫比的優勢。本文將以…

代碼隨想錄第45天|動態規劃

300.最長遞增子序列 參考 dp[i] 表示以 i 為結尾的最長遞增子序列長度遞推公式: 使用 i 和 j 判斷 dp[i] max(dp[j] 1, dp[i])每次 j 都需要從頭遍歷 初始化: dp[i] 1 class Solution { public:int lengthOfLIS(vector<int>& nums) {vector<int> dp(nums…

基于STM32設計的管道有害氣體檢測裝置(ESP8266局域網)176

基于STM32設計的管道有害氣體檢測裝置(176) 文章目錄 一、前言1.1 項目介紹【1】項目功能介紹【2】項目硬件模塊組成【3】ESP8266模塊配置【4】上位機開發思路【5】項目模塊劃分【6】LCD顯示屏界面布局【7】上位機界面布局1.2 項目功能需求1.3 項目開發背景1.4 開發工具的選擇1…

國產化新標桿:TiDB 助力廣發銀行新一代總賬系統投產上線

隨著全球金融市場的快速發展和數字化轉型的深入推進&#xff0c;金融科技已成為推動銀行業創新的核心力量。特別是在當前復雜多變的經濟環境下&#xff0c;銀行業務的高效運作和風險管理能力顯得尤為重要。總賬系統作為銀行會計信息系統的核心&#xff0c;承載著記錄、處理和匯…

2024年06月CCF-GESP編程能力等級認證Python編程二級真題解析

本文收錄于專欄《Python等級認證CCF-GESP真題解析》&#xff0c;專欄總目錄&#xff1a;點這里&#xff0c;訂閱后可閱讀專欄內所有文章。 一、單選題&#xff08;每題 2 分&#xff0c;共 30 分&#xff09; 第 1 題 小楊父母帶他到某培訓機構給他報名參加CCF組織的GESP認證…

云動態摘要 2024-07-07

給您帶來云廠商的最新動態,最新產品資訊和最新優惠更新。 最新優惠與活動 數據庫上云優選 阿里云 2024-07-04 RDS、PolarDB、Redis、MongoDB 全系產品新用戶低至首年6折起! [免費體驗]智能助手ChatBI上線 騰訊云 2024-07-02 基于混元大模型打造,可通過對話方式生成可視化…

說一說null 和 undefined 的區別,如何讓一個屬性變為null

共同點 null和undefined是JavaScript中的兩個基本數據類型 不同點 undefined&#xff1a;這個值表示變量已聲明但還沒被賦值。 null&#xff1a;這個值表示空值或無值&#xff0c;通常用于手動置一個變量為空 要將一個屬性設置為null&#xff0c;你可以直接給屬性賦值 let…

18_特征金字塔網絡FPN結構詳解

1.1 簡介 在深度學習領域&#xff0c;尤其是計算機視覺和目標檢測任務中&#xff0c;Feature Pyramid Networks (FPN) 是一種革命性的架構設計&#xff0c;它解決了多尺度特征檢測和融合的關鍵問題。FPN最初由何凱明等人在2017年的論文《Feature Pyramid Networks for Object …

保護您的數據:應對MKP勒索病毒的有效策略

導言&#xff1a; 在當今數字化時代&#xff0c;.mkp勒索病毒等惡意軟件已經成為廣泛存在的安全威脅&#xff0c;對個人用戶和企業的數據安全構成了嚴峻挑戰。本文將探討.mkp勒索病毒的特點、傳播方式以及創新的應對策略&#xff0c;旨在幫助讀者更有效地應對這一威脅。如不幸…

Python面試題:請解釋什么是模塊和包,并描述它們的區別

在 Python 中&#xff0c;模塊&#xff08;module&#xff09;和包&#xff08;package&#xff09;是組織和管理代碼的兩種方式。它們幫助開發者創建結構化、可維護和可復用的代碼。 模塊&#xff08;Module&#xff09; 模塊是包含 Python 代碼的文件&#xff0c;擴展名為 …

ansible常見問題配置好了密碼還是報錯

| FAILED! > { “msg”: “Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host’s fingerprint to your known_hosts file to manage this host.” } 怎么解決&#xf…

Stable Diffusion圖像的臉部細節控制——采樣器全解析

文章目錄 藝術地掌控人物形象好易智算原因分析為什么在使用Stable Diffusion生成全身圖像時&#xff0c;臉部細節往往不夠精細&#xff1f; 解決策略 局部重繪采樣器總結 藝術地掌控人物形象 在運用Stable Diffusion這一功能強大的AI繪圖工具時&#xff0c;我們往往會發現自己…

ESP32 步進電機精準控制:打造高精度 DIY 寫字機器人,實現流暢書寫體驗

摘要: 想讓你的 ESP32 不再僅僅是控制燈光的工具嗎&#xff1f; 本文將帶你使用 ESP32 開發板、步進電機和簡單的機械結構打造一個能夠自動寫字的機器人。我們將深入淺出地講解硬件連接、軟件代碼以及控制邏輯&#xff0c;并提供完整的項目代碼和電路圖&#xff0c;即使是 Ardu…

在mac下 Vue2和Vue3并存 全局Vue2環境創建Vue3新項目(Vue cli2和Vue cli4)

全局安裝vue2 npm install vue-cli -g自行在任意位置創建一個文件夾vue3&#xff0c;局部安裝vue3,注意不要帶-g npm install vue/cli安裝完成后&#xff0c;進入目錄&#xff0c;修改vue為vue3 找到vue3/node-moudles/.bin/vue&#xff0c;把vue改成vue3。 對環境變量進行配置…

linux修改內核實現禁止被ping(隨手記)

概述 Linux默認允許被ping。其主要決定因素為&#xff1a; 內核參數防火墻&#xff08;iptables/firewall&#xff09; 以上的決定因素是與的關系&#xff0c;即需要均滿足。 因此&#xff0c;修改linux禁被ping有以上兩種方法可以實現。 修改內核文件使禁ping 1. 臨時生…