Java由淺入深帶你了解什么是包package
什么是包
包 (package) 是組織類的一種方式.
使用包的主要目的是保證類的唯一性.
例如, 你在代碼中寫了一個(gè) Test 類. 然后你的同事也可能寫一個(gè) Test 類. 如果出現(xiàn)兩個(gè)同名的類, 就會(huì)沖突, 導(dǎo)致 代碼不能編譯通過
1.導(dǎo)入包中的類
?Java 中已經(jīng)提供了很多現(xiàn)成的類供我們使用
①:例如打印數(shù)組:
public class TestDemo{
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
System.out.println(Arrays.toString(array));
}
}
用Arrays就需要導(dǎo)入包,看圖:

?如果最上面的這行代碼不寫就會(huì)報(bào)錯(cuò),看圖:

那么怎么導(dǎo)入上面的這個(gè)包呢,當(dāng)我們寫出Arrays這個(gè)代碼,IDEA會(huì)自動(dòng)跳出選項(xiàng)讓你選擇,選擇第一項(xiàng)你直接回車,就會(huì)幫你導(dǎo)入這個(gè)包??磮D:

②:再舉例:
Date這個(gè)類是定義日期的,也是Java類庫寫好的
public class TestDemo {
public static void main(String[] args) {
java.util.Date date = new java.util.Date();//在我們不導(dǎo)包時(shí)候手寫
// 得到一個(gè)毫秒級(jí)別的時(shí)間戳
System.out.println(date.getTime());
}
}
可以使用 java.util.Date 這種方式引入 java.util 這個(gè)包中的 Date 類
但是這種寫法比較麻煩一些, 這個(gè)時(shí)候就可以用上面的寫法,可以使用 import 語句導(dǎo)入包
import java.util.Date;
public class TestDemo {
public static void main(String[] args) {
Date date = new Date();
// 得到一個(gè)毫秒級(jí)別的時(shí)間戳
System.out.println(date.getTime());
}
}
注意事項(xiàng):
可以導(dǎo)入一個(gè)具體的類,不能導(dǎo)入具體的包
![]()
:導(dǎo)入util包,報(bào)錯(cuò)
![]()
:導(dǎo)入具體的類
③:再舉例:
如果需要使用 java.util 中的其他類, 可以使用 import java.util.*
import java.util.*;
public class TestDemo {
public static void main(String[] args) {
Date date = new Date();
// 得到一個(gè)毫秒級(jí)別的時(shí)間戳
System.out.println(date.getTime());
}
}
![]()
:不報(bào)錯(cuò),這個(gè)*可以理解為通配符,代表導(dǎo)入這個(gè)包底下所有的類
疑問:util底下有很多類,難道一下子全部導(dǎo)入嗎?不會(huì),Java處理的時(shí)候,需要誰,他才會(huì)那誰。
④:但是我們更建議顯式的指定要導(dǎo)入的類名. 否則還是容易出現(xiàn)沖突的情況.
舉例:
import java.util.*;
import java.sql.*;
public class TestDemo {
public static void main(String[] args) {
// util 和 sql 中都存在一個(gè) Date 這樣的類, 此時(shí)就會(huì)出現(xiàn)歧義, 編譯出錯(cuò)
Date date = new Date();
System.out.println(date.getTime());
}
}
// 編譯出錯(cuò)
Error:(5, 9) java: 對(duì)Date的引用不明確
java.sql 中的類 java.sql.Date 和 java.util 中的類 java.util.Date 都匹配
在這種情況下需要使用完整的類名?
注意事項(xiàng):
import 和 C++ 的 #include 差別很大. C++ 必須 #include 來引入其他文件內(nèi)容, 但是 Java 不需要. import 只是為了寫代碼的時(shí)候更方便. import 更類似于 C++ 的 namespace 和 using
知識(shí)點(diǎn)
import和package的區(qū)別
package:"包",,指:類所在的包
import:"引入",指:引入類中需要的類
如果我們要用到一些Java類庫里面的代碼我們都需要通過import導(dǎo)入
2.靜態(tài)導(dǎo)入
使用 import static 可以導(dǎo)入包中的靜態(tài)的方法和字段.
①舉例:
import static java.lang.System.*;
public class Test {
public static void main(String[] args) {
out.println("hello");
}
}
?這樣System.out.println("hello");就可以寫成out.println("hello");
②再舉例:
import static java.lang.Math.*;
public class TestDemo {
public static void main(String[] args) {
double x = 30;
double y = 40;
// 靜態(tài)導(dǎo)入的方式寫起來更方便一些.
// double result = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
double result = sqrt(pow(x, 2) + pow(y, 2));
System.out.println(result);
}
}
再寫代碼當(dāng)中Math.就可以去掉。
3.將類放到包中
基本規(guī)則:
在文件的最上方加上一個(gè) package 語句指定該代碼在哪個(gè)包中.
包名需要盡量指定成唯一的名字, 通常會(huì)用公司的域名的顛倒形式(例如 com.xuexiao.demo1 ).?
包名要和代碼路徑相匹配. 例如創(chuàng)建 com.xuexiao.demo1 的包, 那么會(huì)存在一個(gè)對(duì)應(yīng)的路徑 com/xuexiao/demo1 來存 儲(chǔ)代碼.
如果一個(gè)類沒有 package 語句, 則該類被放到一個(gè)默認(rèn)包中.
操作步驟:
?1) 在 IDEA 中先新建一個(gè)包: 右鍵 src -> 新建 -> 包

2) 在彈出的對(duì)話框中輸入包名, 例如 com.xuexiao.demo1?,點(diǎn)回車

?3) 在包中創(chuàng)建類, 右鍵包名 -> 新建 -> 類, 然后輸入類名即可

?4) 此時(shí)可以看到我們的磁盤上的目錄結(jié)構(gòu)已經(jīng)被 IDEA 自動(dòng)創(chuàng)建出來了
![]()
5) 同時(shí)我們也看到了, 在新創(chuàng)建的 Test.java 文件的最上方, 就出現(xiàn)了一個(gè) package 語句

4.包的訪問權(quán)限控制
?我們已經(jīng)了解了類中的 public 和 private. private 中的成員只能被類的內(nèi)部使用.
如果某個(gè)成員不包含 public 和 private 關(guān)鍵字, 此時(shí)這個(gè)成員可以在包內(nèi)部的其他類使用, 但是不能在包外部的類使 用.
舉例:
下面的代碼給了一個(gè)示例. Demo1 和 Demo2 是同一個(gè)包中, Test 是其他包中.
?Demo1.java
package com.bili.demo;
public class Demo1 {
int value = 0;
}
Demo2.java
package com.bili.demo;
public class Demo2 {
public static void Main(String[] args) {
Demo1 demo = new Demo1();
System.out.println(demo.value);
}
}
// 執(zhí)行結(jié)果, 能夠訪問到 value 變量
10
Test.java
import com.bili.demo.Demo1;
public class Test {
public static void main(String[] args) {
Demo1 demo = new Demo1();
System.out.println(demo.value);
}
}
// 編譯出錯(cuò)
Error:(6, 32) java: value在com.bili.demo.Demo1中不是公共的; 無法從外部程序包中對(duì)其進(jìn)行訪問
5.常見的系統(tǒng)包
1. java.lang:系統(tǒng)常用基礎(chǔ)類(String、Object),此包從JDK1.1后自動(dòng)導(dǎo)入。
2. java.lang.reflect:java 反射編程包;
3. java.net:進(jìn)行網(wǎng)絡(luò)編程開發(fā)包。
4. java.sql:進(jìn)行數(shù)據(jù)庫開發(fā)的支持包。
5. java.util:是java提供的工具程序包。(集合類等) 非常重要
6. java.io:I/O編程開發(fā)包。
到此這篇關(guān)于Java由淺入深帶你了解什么是包package的文章就介紹到這了,更多相關(guān)Java 包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java基礎(chǔ)類學(xué)習(xí)之String詳解
這篇文章主要為大家詳細(xì)介紹了Java基礎(chǔ)類中String的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下2022-12-12
Java使用Tesseract-OCR實(shí)戰(zhàn)教程
本文介紹了如何在Java中使用Tesseract-OCR進(jìn)行文本提取,包括Tesseract-OCR的安裝、中文訓(xùn)練庫的配置、依賴庫的引入以及具體的代碼實(shí)現(xiàn),通過這個(gè)過程,我們將演示如何從視頻幀中提取文本2025-02-02
Spark Streaming算子開發(fā)實(shí)例
這篇文章主要介紹了Spark Streaming算子開發(fā)實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
Java構(gòu)造方法實(shí)例詳解(動(dòng)力節(jié)點(diǎn)java學(xué)院整理)
其實(shí)java構(gòu)造方法很簡單,下面通過示例給大家分享java構(gòu)造方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2017-04-04
HttpServletRequest對(duì)象方法的用法小結(jié)
HttpServletRequest對(duì)象代表客戶端的請(qǐng)求,當(dāng)客戶端通過HTTP協(xié)議訪問服務(wù)器時(shí),HTTP請(qǐng)求頭中的所有信息都封裝在這個(gè)對(duì)象中,開發(fā)人員通過這個(gè)對(duì)象的相關(guān)方法,即可以獲得客戶的這些信息2017-03-03
Java類和對(duì)象習(xí)題及詳細(xì)答案解析
這篇文章主要介紹了Java類和對(duì)象的相關(guān)知識(shí),包括局部變量初始化、靜態(tài)方法、靜態(tài)導(dǎo)入、構(gòu)造方法、代碼塊執(zhí)行順序、toString方法重寫、類變量和靜態(tài)成員變量的訪問等,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-02-02

