Java中包和導(dǎo)包、Scanner類、輸入源的詳細(xì)講解
1. 包
1.1 什么是包?
舉個(gè)例子,你和你的同學(xué)有不同的家庭,你們都有自己的爸爸媽媽,都有自己的家。在自己的家中你們可以按照自己愛(ài)好擺放東西,都互不干擾。但是,假如你們的家都在一起,你們就不能按照自己的喜好擺放東西了,你們之間會(huì)相互影響。
為了讓每個(gè)程序之間直接有相對(duì)好的隔離,就設(shè)置了包。包其實(shí)就是一個(gè)串文件夾,在不同的文件夾中可以設(shè)置相同的名字的文件。
1.2 包的主要作用
包(Package)是一種將類和接口組織在一起的機(jī)制。
命名空間管理
包提供了一種命名空間管理機(jī)制,避免類名沖突。通過(guò)將類放在不同的包中,可以確保類名的唯一性。例如,多個(gè)項(xiàng)目中可能會(huì)有多個(gè)名為 Logger 的類,但通過(guò)將它們放在不同的包中,可以避免命名沖突。訪問(wèn)控制
包還提供了訪問(wèn)控制機(jī)制。通過(guò)使用不同的訪問(wèn)修飾符(如 public、protected、默認(rèn)(即不寫訪問(wèn)修飾符)和 private),可以控制類、方法和變量的可見(jiàn)性。例如,一個(gè)類的成員可以對(duì)同一個(gè)包中的其他類可見(jiàn),但對(duì)其他包中的類不可見(jiàn)。代碼組織
包有助于將相關(guān)的類和接口組織在一起,使代碼更易于管理和維護(hù)。通常,一個(gè)包會(huì)包含一組具有相似功能或用途的類和接口。例如,java.util 包包含了各種實(shí)用工具類,如 List、Map、Set 等。
1.3 src文件
src 文件夾(或目錄)通常代表“source”的縮寫,用于存放項(xiàng)目的源代碼文件。這個(gè)文件夾是項(xiàng)目的核心部分,包含了所有的業(yè)務(wù)邏輯、類定義、函數(shù)實(shí)現(xiàn)等代碼文件。
項(xiàng)目的標(biāo)準(zhǔn)目錄結(jié)構(gòu)如下:

子文件夾組織:
src 文件夾通常會(huì)進(jìn)一步細(xì)分為多個(gè)子文件夾,以更好地組織代碼。
例如:
main/java:存放主要的 Java 源代碼文件。main/resources:存放資源文件,如配置文件、靜態(tài)文件等。test/java:存放測(cè)試代碼文件。test/resources:存放測(cè)試資源文件。
1.4 創(chuàng)建包
包時(shí)在src文件下創(chuàng)建的

接著創(chuàng)建包

包名通常是小寫的,并且通常使用公司域名的逆序來(lái)命名,以確保全局唯一性。
把圖片中的package_name改為:com.example.myapp
這個(gè)包名com.examplemyapp是一個(gè)文件的名字嗎?
我們看一下src文件的有沒(méi)有com.example.myapp文件

在src文件夾中只有com文件夾,沒(méi)有com.example.myapp文件,其實(shí).把包的名字分隔了,分割成三個(gè)鑲嵌的文件夾。

在com.example.myapp文件夾中創(chuàng)建Myclass類


在 Java 源文件的頂部,使用 package 關(guān)鍵字來(lái)指定包名。
目前該包的目錄結(jié)構(gòu)為:

2. 導(dǎo)包
2.1 什么是導(dǎo)包?
“導(dǎo)包”指的是使用 import 語(yǔ)句將一個(gè)類或接口從一個(gè)包中引入到當(dāng)前的編譯單元中,以便在代碼中可以直接使用這些類或接口,而不需要每次都寫完整的類名或接口名。
導(dǎo)包的作用:
- 簡(jiǎn)化代碼:
導(dǎo)包可以讓你在代碼中直接使用類或接口的簡(jiǎn)單名稱,而不是完整的類名或接口名。這使得代碼更簡(jiǎn)潔、易讀。
例如,java.util.ArrayList 可以簡(jiǎn)化為 ArrayList。 - 避免命名沖突:
當(dāng)兩個(gè)不同的包中有同名的類或接口時(shí),通過(guò)導(dǎo)包可以明確指定你使用的是哪個(gè)包中的類或接口。
例如,java.util.Date 和 java.sql.Date 都有 Date 類,通過(guò)導(dǎo)包可以區(qū)分它們。
2.2 導(dǎo)包的語(yǔ)法
導(dǎo)入單個(gè)類或接口:
import package_name.ClassName;
package_name:包的名子。ClassName:類的名字。
導(dǎo)入整個(gè)包中的所有類和接口:
import package_name.*;
package_name:包的名子。
*:表示該包下的所有類
靜態(tài)導(dǎo)入(Java 5 及以上):
靜態(tài)導(dǎo)入允許你直接使用類中的靜態(tài)成員(如靜態(tài)方法和靜態(tài)字段),而不需要類名前綴。
import static package_name.ClassName.staticMember
static關(guān)鍵字:表示靜態(tài)導(dǎo)入。package_name:包的名子。ClassName:類的名字。staticMember:類中靜態(tài)成員變量或靜態(tài)方法。
示例:
單個(gè)類的導(dǎo)入,導(dǎo)入
ArrayList類import java.util.ArrayList; public class InOut { public static void main(String[] args){ // 創(chuàng)建數(shù)組 ArrayList<String> arr = new ArrayList<>(); // 添加元素 arr.add("Hello"); arr.add("World"); // 打印 System.out.println(arr); }ArrayList是java.util包中的泛型類,是一個(gè)動(dòng)態(tài)數(shù)組。整個(gè)包的導(dǎo)入,使用ArrayList和HashMap類
import java.util.*; public class InOut { public static void main(String[] args){ // 創(chuàng)建數(shù)組 ArrayList<String> arr = new ArrayList<>(); // 添加元素 arr.add("Hello"); arr.add("World"); // 打印 System.out.println(arr); HashMap<String, Integer> map = new HashMap<>(); map.put("One", 1); map.put("Two", 2); System.out.println(map); } }ArrayList和HashMap是java.util包中的兩個(gè)類
2.3 習(xí)題
關(guān)于包的說(shuō)法, 下列錯(cuò)誤的是:( )
A.包是一組類的集合
B.包能防止類的名字沖突
C.import 語(yǔ)句能夠?qū)胍粋€(gè)指定的包
D.import static 能夠?qū)胍恍╈o態(tài)方法
答:C
import java.util.Arrays; import java.util; // 報(bào)錯(cuò) import java.util.*;
第1行導(dǎo)入的是具體的包中的類。
第2行報(bào)錯(cuò),不能導(dǎo)入指定包。
第3行導(dǎo)入的是包下的所有類,用到這個(gè)包底下哪個(gè)類就回調(diào)用哪個(gè)。
3. Scanner 類
3.1 什么是 Scnner 類?
我們?nèi)伺c人之間的交流一般都是通過(guò)對(duì)話,但是我們?cè)趺磁c程序進(jìn)行對(duì)話呢?
答:用Scanner類。
Scanner 類是 Java 標(biāo)準(zhǔn)庫(kù)中的一個(gè)實(shí)用工具類,用于從標(biāo)準(zhǔn)輸入(通常是鍵盤輸入)或其他輸入源(如文件或字符串)讀取不同類型的輸入數(shù)據(jù)。Scanner 類提供了多種方法來(lái)讀取和解析不同類型的數(shù)據(jù),如整數(shù)、浮點(diǎn)數(shù)、字符串等。
主要特點(diǎn):
- 輸入源多樣:Scanner 可以從多種輸入源讀取數(shù)據(jù),包括標(biāo)準(zhǔn)輸入、文件、字符串等。
- 類型豐富:Scanner 支持讀取多種數(shù)據(jù)類型,如 int、double、String 等。
- 分隔符靈活:Scanner 使用分隔符(默認(rèn)為空白字符,包括空格、制表符、換行符等)來(lái)分隔輸入數(shù)據(jù),但也可以自定義分隔符。
- 簡(jiǎn)單易用:Scanner 提供了豐富的 API,使得讀取和解析輸入數(shù)據(jù)變得非常簡(jiǎn)單。
3.2 創(chuàng)建一個(gè) scanner 對(duì)象
Scanner類在java.util包中,使用Scanner需要調(diào)包。
示例:
import java.util.Scanner;
public class InOut {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//讀取字符串
System.out.println("請(qǐng)輸入您的名字");
String s = sc.next();
// 讀取整型
System.out.println("請(qǐng)輸入您的年齡");
int n = sc.nextInt();
//打印
System.out.println(s+"年齡是:"+n+"歲");
// 使用結(jié)束后釋放資源
sc.close()
}
}
同學(xué)們可以發(fā)現(xiàn),創(chuàng)建Scanner對(duì)象的時(shí)傳入了一個(gè)參數(shù)System.in,為什么要傳參呢?
在創(chuàng)建 Scanner 對(duì)象時(shí)傳遞 System.in 參數(shù)是為了指定輸入源。System.in 是一個(gè)標(biāo)準(zhǔn)輸入流,通常用于從鍵盤讀取用戶輸入。通過(guò)傳遞 System.in給 Scanner 構(gòu)造函數(shù),你可以讓 Scanner 從標(biāo)準(zhǔn)輸入(即鍵盤)讀取數(shù)據(jù)。
3.3 輸入源
標(biāo)準(zhǔn)輸入 (System.in):
System.in 是一個(gè) InputStream 對(duì)象,表示標(biāo)準(zhǔn)輸入流,通常是從鍵盤輸入的數(shù)據(jù)。import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("請(qǐng)輸入您的名字:"); String name = scanner.nextLine(); System.out.println("你好," + name); scanner.close(); } }字符串輸入:
從字符串讀取數(shù)據(jù)時(shí),可以傳遞一個(gè) String 對(duì)象給 Scanner 構(gòu)造函數(shù)。import java.util.Scanner; public class Main { public static void main(String[] args) { String input = "100 200 300"; Scanner scanner = new Scanner(input); while (scanner.hasNextInt()) { int number = scanner.nextInt(); System.out.println(number); } scanner.close(); } }文件輸入:
從文件讀取數(shù)據(jù)時(shí),可以傳遞一個(gè) File 對(duì)象給 Scanner 構(gòu)造函數(shù)。import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class Main { public static void main(String[] args) { try { File file = new File("input.txt"); Scanner scanner = new Scanner(file); while (scanner.hasNextLine()) { String line = scanner.nextLine(); System.out.println(line); } scanner.close(); } catch (FileNotFoundException e) { System.out.println("文件未找到!"); e.printStackTrace(); } } }
4. Scanner(System.in) 常用的方法
4.1 讀取數(shù)值
| 方法名 | 描述 |
|---|---|
next() | 讀取下一個(gè) token(默認(rèn)以空白字符分隔)。 |
nextLine() | 讀取下一行(字符串)。 |
nextInt() | 讀取下一個(gè)整數(shù)。 |
nextDouble() | 讀取下一個(gè)雙精度浮點(diǎn)數(shù)。 |
nextBoolean() | 讀取下一個(gè)布爾值。 |
nextByte() | 讀取下一個(gè)字節(jié)。 |
nextShort() | 讀取下一個(gè)短整數(shù)。 |
nextLong() | 讀取下一個(gè)長(zhǎng)整數(shù)。 |
nextFloat() | 讀取下一個(gè)單精度浮點(diǎn)數(shù)。 |
nextLine():nextLine() 會(huì)讀取包括空格在內(nèi)的所有字符,直到遇到換行符\n為止。next():next() 方法讀取輸入中的下一個(gè) token,并返回一個(gè)字符串。一個(gè) token 是由空白字符分隔的一段連續(xù)的字符序列。默認(rèn)的分隔符是空白字符,包括空格( )、制表符(\t)、換行符(\n)、回車符(\r)等。例如,輸入字符串 “Hello World” 會(huì)被 next() 方法分成兩個(gè) token:“Hello” 和 “World”。
示例:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("請(qǐng)輸入您的名字:");
String name = scanner.nextLine(); // 讀取一行(字符串)
System.out.println("你好," + name);
System.out.print("請(qǐng)輸入您的愛(ài)好(用空格分隔):");
String hobbies = scanner.next(); // 讀取下一個(gè) token
System.out.println("你的愛(ài)好是:" + hobbies);
System.out.print("請(qǐng)輸入您的年齡:");
int age = scanner.nextInt(); // 讀取下一個(gè)整數(shù)
System.out.println("你的年齡是:" + age);
System.out.print("請(qǐng)輸入您的身高(米):");
double height = scanner.nextDouble(); // 讀取下一個(gè)雙精度浮點(diǎn)數(shù)
System.out.println("你的身高是:" + height + " 米");
scanner.close();
}
}
4.2 檢查輸入
在使用 Scanner 類讀取輸入時(shí),檢查輸入的作用非常重要。這些檢查方法可以幫助你在讀取數(shù)據(jù)之前驗(yàn)證輸入的類型和格式,從而避免潛在的運(yùn)行時(shí)錯(cuò)誤和異常。
| 方法 | 描述 |
|---|---|
hasNext() | 檢查是否還有下一個(gè) token(默認(rèn)以空白字符分隔)。 |
hasNextLine() | 檢查是否還有下一行。 |
hasNextInt() | 檢查是否還有下一個(gè)整數(shù)。 |
hasNextDouble() | 檢查是否還有下一個(gè)雙精度浮點(diǎn)數(shù)。 |
hasNextFloat() | 檢查是否還有下一個(gè)單精度浮點(diǎn)數(shù)。 |
hasNextLong() | 檢查是否還有下一個(gè)長(zhǎng)整數(shù)。 |
hasNextByte() | 檢查是否還有下一個(gè)字節(jié)。 |
hasNextShort() | 檢查是否還有下一個(gè)短整數(shù)。 |
示例:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("請(qǐng)輸入一個(gè)整數(shù):");
if (scanner.hasNextInt()) {
int number = scanner.nextInt();
System.out.println("你輸入的整數(shù)是:" + number);
} else {
System.out.println("輸入的不是整數(shù)!");
scanner.next(); // 清除錯(cuò)誤輸入
}
scanner.close();
}
}
總結(jié)
到此這篇關(guān)于Java中包和導(dǎo)包、Scanner類、輸入源的文章就介紹到這了,更多相關(guān)Java包和導(dǎo)包、Scanner類、輸入源內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java中對(duì)象轉(zhuǎn)json字符串的三種常用方式
本文主要介紹了java中對(duì)象轉(zhuǎn)json字符串的三種常用方式,包含Jackson庫(kù),Gson庫(kù)和Hutool工具類這三種,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06
淺析SpringBoot中過(guò)濾器配置與應(yīng)用場(chǎng)景
過(guò)濾器是 Web 三大組件之一,也是項(xiàng)目中常用的工具,這篇文章主要介紹一下過(guò)濾器的概念及在 Spring Boot 中的常用使用方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-05-05
Java http加簽、驗(yàn)簽實(shí)現(xiàn)方案詳解
這篇文章主要介紹了Java http加簽、驗(yàn)簽實(shí)現(xiàn)方案詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-07-07
IDEA如何一鍵部署SpringBoot項(xiàng)目到服務(wù)器
文章介紹了如何在IDEA中部署SpringBoot項(xiàng)目到服務(wù)器,使用AlibabaCloudToolkit插件進(jìn)行配置部署,步驟包括設(shè)置服務(wù)名稱、選擇文件上傳類型、選擇jar文件、添加服務(wù)器信息、輸入上傳路徑、選擇上傳后執(zhí)行的腳本以及執(zhí)行前的操作命令2024-12-12
SpringBoot數(shù)據(jù)校驗(yàn)及多環(huán)境配置的問(wèn)題詳解
這篇文章主要介紹了SpringBoot數(shù)據(jù)校驗(yàn)及多環(huán)境配置,本文以SpringBoot-02-Config 項(xiàng)目為例,給大家詳細(xì)介紹,需要的朋友可以參考下2021-09-09
Java NIO Path接口和Files類配合操作文件的實(shí)例
下面小編就為大家分享一篇Java NIO Path接口和Files類配合操作文件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-11-11

