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í)例,不能通過(guò)
ClassName.method()直接調(diào)用)。 - 構(gòu)造方法(構(gòu)造函數(shù)本來(lái)就不能被繼承或靜態(tài)調(diào)用)。
總之,import static 可以導(dǎo)入 類中所有的靜態(tài)成員(方法、常量、內(nèi)部類、枚舉值),但不能導(dǎo)入需要對(duì)象實(shí)例才能訪問(wèn)的成員(實(shí)例方法、實(shí)例變量)。
測(cè)試案例
下面通過(guò)一個(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)景
工具類中的語(yǔ)義明確方法 / 常量
方法名/常量名獨(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
讓代碼更“自然語(yǔ)言化”,常見(jiàn)于流式 API / 匹配器。
例子:
import static java.util.stream.Collectors.toList;
List<String> names = users.stream()
.map(User::getName)
.collect(toList());
? 不推薦使用的場(chǎng)景
- 方法名太通用: 比如
get()、set()、build(),看不出來(lái)源,建議保留類前綴:BuilderUtils.build()。 - 多個(gè)類里有相同名字的方法/常量:例如
StringUtils.isEmpty()和CollectionUtils.isEmpty(),同時(shí) static import 會(huì)沖突,建議只保留類名前綴。 - 通配符導(dǎo)入過(guò)多:
import static xxx.*;在業(yè)務(wù)代碼中容易引入過(guò)多方法,影響可讀性和維護(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)文章
SpringBoot統(tǒng)一返回結(jié)果問(wèn)題
這篇文章主要介紹了SpringBoot統(tǒng)一返回結(jié)果問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Spring?Security?基于URL的權(quán)限判斷源碼解析
這篇文章主要介紹了Spring?Security?基于URL的權(quán)限判斷問(wèn)題,我們想要實(shí)現(xiàn)自己的基于請(qǐng)求Url的授權(quán)只需自定義一個(gè)?AccessDecisionManager即可,接下來(lái)跟隨小編一起看看實(shí)現(xiàn)代碼吧2021-12-12
使用@Valid+BindingResult進(jìn)行controller參數(shù)校驗(yàn)方式
這篇文章主要介紹了使用@Valid+BindingResult進(jìn)行controller參數(shù)校驗(yàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
如何使用IntelliJ?IDEA進(jìn)行Java內(nèi)存分析詳解
這篇文章主要介紹了如何使用IntelliJ?IDEA進(jìn)行Java內(nèi)存分析的相關(guān)資料,包括內(nèi)存消耗情況的查看、內(nèi)存泄漏的分析、垃圾回收情況的優(yōu)化等,通過(guò)IntelliJIDEA提供的工具,開(kāi)發(fā)者可以有效地提升應(yīng)用程序的性能和穩(wěn)定性,需要的朋友可以參考下2025-05-05
Spring IOC的相關(guān)注解運(yùn)用詳解
這篇文章主要介紹了Spring IOC的相關(guān)注解運(yùn)用詳解,純注解實(shí)現(xiàn)IOC需要一個(gè)Java類代替xml文件,這個(gè)Java類上方需要添加@Configuration,表示該類是一個(gè)配置類,作用是代替配置文件,需要的朋友可以參考下2023-08-08
RestTemplate報(bào)錯(cuò)400 Bad Request的解決方案
在使用Spring Boot時(shí),若直接通過(guò)@Autowired注入RestTemplate可能會(huì)遇到400BadRequest錯(cuò)誤,原因在于Spring Boot官方文檔指出,由于RestTemplate實(shí)例通常需要在使用前進(jìn)行定制,因此Spring Boot不會(huì)自動(dòng)配置單個(gè)RestTemplate Bean2024-11-11
JavaFx 中創(chuàng)建計(jì)時(shí)器的步驟詳解
本文介紹了如何在JavaFx中創(chuàng)建計(jì)時(shí)器,通過(guò)創(chuàng)建計(jì)時(shí)器界面、編寫計(jì)時(shí)器邏輯以及關(guān)聯(lián)計(jì)時(shí)器按鈕,我們可以快速實(shí)現(xiàn)一個(gè)靈活可靠的計(jì)時(shí)器組件,本文能夠幫助讀者在 JavaFx 中成功實(shí)現(xiàn)自己的計(jì)時(shí)器功能,感興趣的朋友一起看看吧2023-11-11
通過(guò)Spring Boot配置動(dòng)態(tài)數(shù)據(jù)源訪問(wèn)多個(gè)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了通過(guò)Spring Boot配置動(dòng)態(tài)數(shù)據(jù)源訪問(wèn)多個(gè)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2018-03-03

