Java中import static使用方式小結(jié)
import static基本介紹
import static 的作用是把某個(gè)類中的 靜態(tài)方法 直接引入當(dāng)前類的作用域,從而在調(diào)用時(shí)可以省略類名前綴。當(dāng)然,import static 在 Java 中不僅可以導(dǎo)入 靜態(tài)方法,還可以導(dǎo)入 靜態(tài)變量 / 靜態(tài)常量 / 靜態(tài)內(nèi)部類 / 靜態(tài)枚舉成員。
? 能導(dǎo)入的內(nèi)容
靜態(tài)方法
import static java.util.Objects.requireNonNull;
String s = requireNonNull("abc");
靜態(tài)常量 / 變量
import static java.lang.Math.PI; import static java.lang.Math.E; double area = PI * r * r;
靜態(tài)內(nèi)部類
import static java.util.Map.Entry;
for (Entry<String, String> e : map.entrySet()) {
System.out.println(e.getKey());
}
枚舉常量
import static java.time.DayOfWeek.*;
DayOfWeek today = MONDAY;
if (today == FRIDAY) {
System.out.println("Weekend is coming!");
}
? 不能導(dǎo)入的內(nèi)容
- 實(shí)例方法 / 實(shí)例變量(因?yàn)樗鼈円蕾噷?duì)象實(shí)例,不能通過
ClassName.method()直接調(diào)用)。 - 構(gòu)造方法(構(gòu)造函數(shù)本來就不能被繼承或靜態(tài)調(diào)用)。
總之,import static 可以導(dǎo)入 類中所有的靜態(tài)成員(方法、常量、內(nèi)部類、枚舉值),但不能導(dǎo)入需要對(duì)象實(shí)例才能訪問的成員(實(shí)例方法、實(shí)例變量)。
測(cè)試案例
下面通過一個(gè)小 Demo,把 靜態(tài)方法 / 靜態(tài)常量 / 靜態(tài)內(nèi)部類 / 枚舉常量 的 import static 用法都使用一遍。
package per.mjn.demo;
import static java.lang.Math.*; // 導(dǎo)入靜態(tài)常量 & 方法
import static java.util.Map.Entry; // 導(dǎo)入靜態(tài)內(nèi)部類
import static java.time.DayOfWeek.*; // 導(dǎo)入枚舉常量
import static java.util.Objects.requireNonNull; // 導(dǎo)入靜態(tài)方法
import java.time.DayOfWeek;
import java.util.HashMap;
import java.util.Map;
public class StaticImportDemo {
public static void main(String[] args) {
// 1. 使用靜態(tài)常量 (Math.PI, Math.E)
double r = 2.0;
double area = PI * pow(r, 2); // 直接用 PI 和 pow()
System.out.println("圓面積: " + area);
System.out.println("自然常數(shù) e: " + E);
// 2. 使用靜態(tài)方法 (Objects.requireNonNull)
String s = requireNonNull("Hello");
System.out.println("字符串: " + s);
// 3. 使用靜態(tài)內(nèi)部類 (Map.Entry)
Map<String, Integer> scores = new HashMap<>();
scores.put("Alice", 95);
scores.put("Bob", 88);
for (Entry<String, Integer> e : scores.entrySet()) {
System.out.println(e.getKey() + " -> " + e.getValue());
}
// 4. 使用枚舉常量 (DayOfWeek.MONDAY, FRIDAY)
DayOfWeek today = MONDAY; // 直接用 MONDAY 而不是 DayOfWeek.MONDAY
if (today == FRIDAY) {
System.out.println("周五啦,周末快到了!");
} else {
System.out.println("今天是: " + today);
}
}
}
輸出示例
圓面積: 12.566370614359172
自然常數(shù) e: 2.718281828459045
字符串: Hello
Bob -> 88
Alice -> 95
今天是: MONDAY
這樣我們就能看到 import static 的四種典型用法:
- Math.PI / Math.pow(靜態(tài)常量 & 方法)
- Objects.requireNonNull(靜態(tài)方法)
- Map.Entry(靜態(tài)內(nèi)部類)
- DayOfWeek.MONDAY(枚舉常量)
static import最佳實(shí)踐
? 推薦使用的場(chǎng)景
工具類中的語義明確方法 / 常量
方法名/常量名獨(dú)特,不容易和其他類沖突。
例子:
import static java.util.Objects.requireNonNull;
import static java.lang.Math.PI;
double area = PI * r * r;
String s = requireNonNull("hello");
常量集合 / 枚舉常量
寫法更簡(jiǎn)潔,尤其是枚舉。
例子:
import static java.time.DayOfWeek.*; DayOfWeek today = MONDAY;
單元測(cè)試斷言 / Mock 框架
測(cè)試代碼可讀性提升明顯。
例子:
import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; assertEquals(42, result); verify(service, times(1)).doSomething();
DSL 風(fēng)格 API
讓代碼更“自然語言化”,常見于流式 API / 匹配器。
例子:
import static java.util.stream.Collectors.toList;
List<String> names = users.stream()
.map(User::getName)
.collect(toList());
? 不推薦使用的場(chǎng)景
- 方法名太通用: 比如
get()、set()、build(),看不出來源,建議保留類前綴:BuilderUtils.build()。 - 多個(gè)類里有相同名字的方法/常量:例如
StringUtils.isEmpty()和CollectionUtils.isEmpty(),同時(shí) static import 會(huì)沖突,建議只保留類名前綴。 - 通配符導(dǎo)入過多:
import static xxx.*;在業(yè)務(wù)代碼中容易引入過多方法,影響可讀性和維護(hù)。測(cè)試代碼里可以接受,但業(yè)務(wù)代碼里建議只導(dǎo)入需要的成員。
?? 建議
- 業(yè)務(wù)代碼:精確導(dǎo)入,控制范圍,保證可讀性。
- 測(cè)試代碼:可以大膽用,尤其是斷言、Mock。
- 團(tuán)隊(duì)規(guī)范:建議在 Code Style 文檔里約定:
- 允許測(cè)試類使用
import static ...*。 - 業(yè)務(wù)代碼必須顯式導(dǎo)入具體方法或常量,不允許
*。
- 允許測(cè)試類使用
總之,能讓代碼更清晰就用,可能讓人困惑就不用。
到此這篇關(guān)于Java中import static使用方式小結(jié)的文章就介紹到這了,更多相關(guān)Java import static 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解SpringCloud Gateway之過濾器GatewayFilter
這篇文章主要介紹了詳解SpringCloud Gateway之過濾器GatewayFilter,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-10-10
spring為java.util.Properties類型的屬性進(jìn)行賦值過程解析
這篇文章主要介紹了spring為java.util.Properties類型的屬性進(jìn)行賦值過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
Spring MVC配置雙數(shù)據(jù)源實(shí)現(xiàn)一個(gè)java項(xiàng)目同時(shí)連接兩個(gè)數(shù)據(jù)庫(kù)的方法
這篇文章主要給大家介紹了關(guān)于Spring MVC如何配置雙數(shù)據(jù)源實(shí)現(xiàn)一個(gè)java項(xiàng)目同時(shí)連接兩個(gè)數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-05-05
Java通過在主循環(huán)中判斷Boolean來停止線程的方法示例
這篇文章主要介紹了Java通過在主循環(huán)中判斷Boolean來停止線程的方法,結(jié)合具體實(shí)例形式分析了java針對(duì)線程的判斷與停止操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-04-04
Springboot敏感字段脫敏的實(shí)現(xiàn)思路
這篇文章主要介紹了Springboot敏感字段脫敏的實(shí)現(xiàn)思路,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09
java根據(jù)模板實(shí)現(xiàn)填充word內(nèi)容并轉(zhuǎn)換為pdf
這篇文章主要為大家詳細(xì)介紹了java如何根據(jù)模板實(shí)現(xiàn)填充word內(nèi)容并轉(zhuǎn)換為pdf,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-04-04
淺談BeanPostProcessor加載次序及其對(duì)Bean造成的影響分析
這篇文章主要介紹了淺談BeanPostProcessor加載次序及其對(duì)Bean造成的影響分析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04

