最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中斷言(assert)的使用場景與注意事項

 更新時間:2026年05月18日 09:52:06   作者:希望永不加班  
文章詳細(xì)介紹了Java斷言(assert)的使用方法、適用場景及注意事項,斷言是一種調(diào)試工具,用于開發(fā)和測試階段快速定位代碼邏輯錯誤,但非業(yè)務(wù)級校驗,不應(yīng)用于對外接口、業(yè)務(wù)容錯等場景,應(yīng)嚴(yán)格區(qū)分?jǐn)嘌耘c常規(guī)異常,避免濫用,確保代碼質(zhì)量和生產(chǎn)環(huán)境穩(wěn)定性

引言

在Java開發(fā)中,斷言(關(guān)鍵字assert)是一種內(nèi)置的調(diào)試校驗機制,設(shè)計初衷是在開發(fā)和測試階段,快速定位代碼中的邏輯錯誤,預(yù)判某個條件必須為true,若不成立則直接終止程序,倒逼開發(fā)者及時發(fā)現(xiàn)問題。

很多開發(fā)者對斷言的理解停留在“簡單校驗”層面,要么濫用斷言替代業(yè)務(wù)校驗,要么不知道如何正確開啟、合理使用,甚至踩中“生產(chǎn)環(huán)境斷言失效”“斷言表達(dá)式有副作用”等坑。

一、什么是斷言?

1.1 定義與核心定位

斷言(assert)是Java提供的一種輕量級調(diào)試工具,用于在代碼中聲明一個“必須成立”的邏輯條件(布爾表達(dá)式)。其核心作用是:在開發(fā)/測試階段,主動校驗代碼邏輯的合法性,提前暴露潛在bug,避免錯誤邏輯流轉(zhuǎn)到后續(xù)流程。

核心特點:

  • 非業(yè)務(wù)級校驗,屬于調(diào)試級校驗,不適合用于業(yè)務(wù)邏輯容錯;
  • 默認(rèn)關(guān)閉,需手動開啟虛擬機參數(shù)才能生效;
  • 斷言失敗會拋出AssertionError(屬于Error級別,而非Exception),程序直接終止,無法通過常規(guī)try-catch恢復(fù);
  • 關(guān)閉斷言后,JVM會直接跳過所有assert代碼,無任何性能損耗。

1.2 兩種標(biāo)準(zhǔn)語法格式

斷言只有兩種合法語法,無其他變體,使用時需嚴(yán)格遵循:

格式1:僅判斷條件,無錯誤提示

// 語法:assert 布爾表達(dá)式;
// 說明:條件為true,正常執(zhí)行;為false,拋出AssertionError(無自定義信息)
assert num > 0;

格式2:判斷條件 + 自定義錯誤提示

// 語法:assert 布爾表達(dá)式 : 錯誤描述信息;
// 說明:條件為false時,拋出的AssertionError會攜帶自定義信息,便于快速定位問題
assert num > 0 : "數(shù)值必須大于0,當(dāng)前值:" + num;

1.3 底層執(zhí)行原理

很多人疑惑“斷言默認(rèn)關(guān)閉,為什么不影響代碼編譯和運行?”,核心在于JVM對斷言的處理機制:

1. 編譯階段:編譯器會保留assert語法,但不會對斷言表達(dá)式進(jìn)行提前執(zhí)行或優(yōu)化,僅做語法校驗;

2. 運行階段:JVM會根據(jù)啟動參數(shù)(-ea/-da)決定是否執(zhí)行斷言校驗:

  • 開啟斷言(-ea):JVM執(zhí)行斷言表達(dá)式,若為false,創(chuàng)建AssertionError實例并拋出,終止程序;
  • 關(guān)閉斷言(默認(rèn),-da):JVM直接跳過所有assert語句,如同這些代碼不存在,無任何性能開銷。

3. 異常本質(zhì):AssertionError繼承自Error,屬于系統(tǒng)級嚴(yán)重錯誤,設(shè)計目的是“終止程序、暴露 bug”,而非業(yè)務(wù)容錯,因此不建議捕獲處理。

二、斷言的開啟與關(guān)閉

斷言默認(rèn)處于關(guān)閉狀態(tài),無論代碼中寫了多少assert,不開啟VM參數(shù)就不會生效。以下是不同場景下的開啟/關(guān)閉方法,覆蓋開發(fā)、測試、生產(chǎn)全場景。

2.1 核心VM參數(shù)

參數(shù)全稱作用適用場景
-eaenableassertions開啟全局?jǐn)嘌?/td>開發(fā)、測試階段
-dadisableassertions關(guān)閉全局?jǐn)嘌?/td>生產(chǎn)環(huán)境(默認(rèn))

2.2 IDEA中開啟/關(guān)閉斷言

開發(fā)階段,在IDEA中配置VM參數(shù),快速啟用斷言,步驟如下(以IDEA 2023版本為例):

補充:若想給單個類、單個包開啟斷言,可在VM options中指定粒度,例如:

-ea:com.test.AssertDemo  // 只給com.test包下的AssertDemo類開啟斷言
-ea:com.util            // 給com.util整個包開啟斷言
-da:com.service         // 給com.service整個包關(guān)閉斷言

2.3 命令行運行時開啟/關(guān)閉斷言

測試、部署階段,通過命令行運行Java程序時,指定VM參數(shù)即可:

// 1. 開啟全局?jǐn)嘌?,運行AssertDemo類
java -ea AssertDemo
// 2. 開啟指定包的斷言,運行AssertDemo類
java -ea:com.test -ea:com.util AssertDemo
// 3. 關(guān)閉全局?jǐn)嘌裕J(rèn),可省略)
java -da AssertDemo
// 4. 運行jar包時開啟斷言
java -ea -jar demo.jar

2.4 生產(chǎn)環(huán)境的斷言建議

生產(chǎn)環(huán)境嚴(yán)禁開啟斷言,原因有二:

核心原則:斷言只在開發(fā)、測試階段啟用,生產(chǎn)環(huán)境保持默認(rèn)關(guān)閉狀態(tài)。

三、斷言的基礎(chǔ)使用示例

結(jié)合日常開發(fā)中的調(diào)試場景,給出4個典型示例,幫你快速上手?jǐn)嘌缘氖褂?,區(qū)分“正確用法”和“潛在風(fēng)險”。

示例1:數(shù)值合法性校驗

校驗方法入?yún)?、局部變量的?shù)值范圍,快速定位非法值:

public class AssertDemo {
    public static void setAge(int age) {
        // 斷言:年齡必須在0~150之間(開發(fā)階段校驗,防止非法值)
        assert age > 0 && age < 150 : "年齡范圍非法,當(dāng)前值:" + age;
        System.out.println("年齡設(shè)置成功:" + age);
    }
    public static void main(String[] args) {
        setAge(20);  // 正常執(zhí)行
        setAge(-5);  // 開啟斷言后,拋出AssertionError
    }
}

開啟-ea后的運行結(jié)果:

年齡設(shè)置成功:20
Exception in thread "main" java.lang.AssertionError: 年齡范圍非法,當(dāng)前值:-5
    at com.test.AssertDemo.setAge(AssertDemo.java:6)
    at com.test.AssertDemo.main(AssertDemo.java:13)

示例2:對象非空校驗

校驗內(nèi)部方法的參數(shù)、返回值是否為null,避免后續(xù)空指針異常:

public class UserService {
    // 私有內(nèi)部工具方法,僅本類調(diào)用
    private User getValidUser(Long userId) {
        User user = userDao.selectById(userId);
        // 斷言:查詢結(jié)果不為null(開發(fā)階段校驗,防止漏處理null場景)
        assert user != null : "用戶不存在,userId:" + userId;
        return user;
    }
    // 對外公開方法(禁止用斷言做校驗)
    public void updateUser(Long userId, String name) {
        // 業(yè)務(wù)校驗:用常規(guī)異常,不使用斷言
        if (userId == null) {
            throw new IllegalArgumentException("userId不能為空");
        }
        User user = getValidUser(userId);
        user.setName(name);
        userDao.update(user);
    }
}

示例3:分支邏輯完備性校驗

switch、枚舉判斷中,用斷言兜底,防止后續(xù)新增分支、枚舉值時漏處理:

// 訂單狀態(tài)枚舉
enum OrderStatus {
    PENDING, PAID, SHIPPED, FINISHED, CANCELLED
}
public class OrderService {
    public void handleOrder(OrderStatus status) {
        switch (status) {
            case PENDING:
                System.out.println("處理待支付訂單");
                break;
            case PAID:
                System.out.println("處理已支付訂單");
                break;
            case SHIPPED:
                System.out.println("處理已發(fā)貨訂單");
                break;
            case FINISHED:
                System.out.println("處理已完成訂單");
                break;
            case CANCELLED:
                System.out.println("處理已取消訂單");
                break;
            // 兜底斷言:若新增枚舉值,未添加分支,開發(fā)階段會直接報錯
            default:
                assert false : "未處理的訂單狀態(tài):" + status.name();
        }
    }
}

說明:若后續(xù)新增枚舉值REFUNDED(退款),但未在switch中添加分支,開發(fā)階段調(diào)用handleOrder(OrderStatus.REFUNDED),開啟斷言后會直接拋出錯誤,提醒開發(fā)者補充分支處理。

示例4:方法后置結(jié)果校驗

校驗方法執(zhí)行后的返回結(jié)果,確保符合邏輯預(yù)期,防止計算錯誤、數(shù)據(jù)異常:

public class CalculationUtil {
    // 計算兩個正整數(shù)的和
    public static int add(int a, int b) {
        assert a > 0 && b > 0 : "參數(shù)必須為正整數(shù)"; // 前置斷言
        int result = a + b;
        // 后置斷言:確保計算結(jié)果大于任一參數(shù)(邏輯兜底)
        assert result > a && result > b : "加法計算異常,a:" + a + ",b:" + b + ",result:" + result;
        return result;
    }
    public static void main(String[] args) {
        add(2, 3);  // 正常執(zhí)行,result=5
        add(2, -3); // 開啟斷言后,前置斷言失敗,拋出錯誤
    }
}

四、斷言的適用場景

斷言的核心價值是“開發(fā)調(diào)試、邏輯兜底”,僅適用于內(nèi)部邏輯校驗,嚴(yán)禁用于業(yè)務(wù)相關(guān)校驗。以下是斷言的4個核心適用場景,每個場景都結(jié)合實戰(zhàn)場景說明,幫你精準(zhǔn)判斷何時能用。

場景1:內(nèi)部邏輯狀態(tài)校驗

用于校驗“理論上絕對不可能發(fā)生”的邏輯錯誤,比如:

核心原則:這種場景下,斷言失敗意味著“代碼邏輯有bug”,需要開發(fā)者修復(fù),而非業(yè)務(wù)異常。

場景2:私有工具方法的前置/后置校驗

僅針對本類內(nèi)部的私有方法(不對外暴露),做參數(shù)、返回值的校驗,用于開發(fā)階段快速發(fā)現(xiàn)調(diào)用錯誤。

原因:私有方法的調(diào)用者是本類開發(fā)者,可控制調(diào)用參數(shù),用斷言調(diào)試效率更高;對外公開方法則不適用(調(diào)用者不可控,且斷言默認(rèn)關(guān)閉)。

場景3:系統(tǒng)初始化時的配置、常量校驗

系統(tǒng)啟動、類初始化時,校驗配置參數(shù)、常量的合法性,確保系統(tǒng)運行的基礎(chǔ)條件成立:

public class SystemConfig {
    // 系統(tǒng)分頁最大條數(shù)(配置文件讀?。?
    public static final int MAX_PAGE_SIZE = 100;
    // 靜態(tài)代碼塊中用斷言校驗常量
    static {
        assert MAX_PAGE_SIZE > 0 && MAX_PAGE_SIZE <= 100 : "分頁最大條數(shù)配置非法,需在1~100之間";
        assert !StringUtils.isBlank(DB_URL) : "數(shù)據(jù)庫URL配置不能為空";
    }
}

說明:這種校驗僅在開發(fā)、測試階段生效,若配置錯誤,啟動時直接拋出錯誤,便于及時修正配置。

場景4:調(diào)試階段的臨時校驗

開發(fā)自測時,用斷言臨時校驗?zāi)硞€邏輯點,替代繁瑣的日志打印,快速卡死bug位置。例如:

// 開發(fā)自測時,校驗集合大小是否符合預(yù)期
List<Order> orderList = orderDao.selectByUserId(1L);
assert orderList.size() == 3 : "用戶1的訂單數(shù)量異常,預(yù)期3條,實際:" + orderList.size();

注意:自測完成后,可根據(jù)需求保留或刪除這類臨時斷言,避免冗余。

五、斷言絕對禁止使用的場景

這是開發(fā)者最容易踩坑的地方——把斷言當(dāng)作業(yè)務(wù)校驗工具,導(dǎo)致生產(chǎn)環(huán)境出現(xiàn)邏輯漏洞。以下5個場景,嚴(yán)禁使用斷言,必須用常規(guī)異常、業(yè)務(wù)校驗替代。

場景1:禁止用于對外公開接口、業(yè)務(wù)入?yún)⑿r?/h3>

這是最嚴(yán)重、最常見的錯誤!生產(chǎn)環(huán)境默認(rèn)關(guān)閉斷言,若用斷言做業(yè)務(wù)入?yún)⑿r?,會?dǎo)致校驗邏輯完全失效,非法參數(shù)直接流入業(yè)務(wù)流程,引發(fā)嚴(yán)重bug。

? 錯誤寫法:

// 對外公開接口,用斷言做入?yún)⑿r灒ㄉa(chǎn)環(huán)境失效)
public void login(String username, String password) {
    assert username != null && !username.isBlank() : "用戶名不能為空";
    assert password != null && password.length() >= 6 : "密碼長度不能小于6位";
    // 業(yè)務(wù)邏輯...
}

? 正確寫法:

public void login(String username, String password) {
    if (username == null || username.isBlank()) {
        throw new IllegalArgumentException("用戶名不能為空");
    }
    if (password == null || password.length() < 6) {
        throw new IllegalArgumentException("密碼長度不能小于6位");
    }
    // 業(yè)務(wù)邏輯...
}

核心原因:業(yè)務(wù)入?yún)⑿r炐枰?ldquo;始終生效”,而斷言默認(rèn)關(guān)閉,無法保證可靠性;且斷言失敗是Error,無法優(yōu)雅捕獲并返回業(yè)務(wù)錯誤信息。

場景2:禁止在斷言表達(dá)式中寫有副作用的代碼

斷言表達(dá)式中,嚴(yán)禁寫“改變變量狀態(tài)、執(zhí)行IO操作、數(shù)據(jù)庫操作、接口調(diào)用”等有副作用的代碼——關(guān)閉斷言后,這些代碼會被直接跳過,導(dǎo)致業(yè)務(wù)邏輯行為不一致。

? 錯誤寫法:

List<String> list = new ArrayList<>();
// 斷言表達(dá)式中執(zhí)行add操作(有副作用)
assert list.add("test") : "添加元素失敗";
// 關(guān)閉斷言后,list.add()不會執(zhí)行,list為空,后續(xù)邏輯出錯

? 正確寫法:

List<String> list = new ArrayList<>();
boolean addSuccess = list.add("test");
// 先執(zhí)行操作,再斷言結(jié)果
assert addSuccess : "添加元素失敗";

場景3:禁止用于業(yè)務(wù)異常、容錯處理

斷言的設(shè)計目的是“暴露 bug”,而非“處理業(yè)務(wù)異常”。業(yè)務(wù)異常(如用戶不存在、訂單已取消)是預(yù)期內(nèi)的,需要用Exception捕獲并做容錯處理,而斷言失敗是預(yù)期外的邏輯bug,無需容錯。

? 錯誤寫法:

// 用斷言處理業(yè)務(wù)異常(用戶不存在是預(yù)期內(nèi)的業(yè)務(wù)場景)
User user = userDao.selectById(userId);
assert user != null : "用戶不存在"; // 錯誤:業(yè)務(wù)異常不能用斷言

? 正確寫法:

User user = userDao.selectById(userId);
if (user == null) {
    throw new BusinessException("用戶不存在,userId:" + userId); // 業(yè)務(wù)異常
}

場景4:禁止依賴斷言做流程控制

斷言是調(diào)試工具,不是流程控制語句,嚴(yán)禁用斷言的“失敗終止”特性來控制代碼流程(如替代if判斷)。

? 錯誤寫法(嚴(yán)禁):

// 用斷言控制流程(錯誤,關(guān)閉斷言后流程會錯亂)
assert num > 0;
// 若num<=0,開啟斷言會終止,關(guān)閉斷言會繼續(xù)執(zhí)行后續(xù)邏輯
System.out.println("num是正數(shù):" + num);

? 正確寫法:

if (num <= 0) {
    throw new IllegalArgumentException("num必須是正數(shù)");
}
System.out.println("num是正數(shù):" + num);

場景5:禁止用于權(quán)限校驗、安全校驗

權(quán)限校驗、安全校驗(如登錄態(tài)校驗、接口權(quán)限校驗)是核心業(yè)務(wù)校驗,必須始終生效,而斷言默認(rèn)關(guān)閉,無法保證安全。

? 錯誤寫法:

// 用斷言做登錄態(tài)校驗(生產(chǎn)環(huán)境失效,存在安全隱患)
assert loginUser != null : "未登錄";
// 關(guān)閉斷言后,未登錄用戶也能執(zhí)行后續(xù)邏輯

? 正確寫法:

if (loginUser == null) {
    throw new UnauthorizedException("未登錄,請先登錄");
}

六、斷言的使用限制與注意事項

除了上述禁止場景,使用斷言時還需注意以下6個細(xì)節(jié),避免踩中隱藏坑,同時規(guī)范使用方式。

注意事項1:斷言默認(rèn)關(guān)閉,生產(chǎn)環(huán)境絕對不能依賴

無論開發(fā)階段用斷言做了多少校驗,都不能把“斷言生效”當(dāng)作生產(chǎn)環(huán)境的依賴——生產(chǎn)環(huán)境默認(rèn)關(guān)閉斷言,所有校驗邏輯都會失效。

核心提醒:開發(fā)階段用斷言發(fā)現(xiàn)bug后,必須通過代碼邏輯修復(fù)bug,而非依賴斷言“兜底”。

注意事項2:斷言失敗是Error,不建議捕獲處理

AssertionError繼承自Error,屬于系統(tǒng)級錯誤,設(shè)計目的是“終止程序、暴露 bug”,因此不建議用try-catch捕獲。

若強行捕獲,會掩蓋邏輯bug,導(dǎo)致錯誤無法被發(fā)現(xiàn),違背斷言的設(shè)計初衷:

// 不推薦這樣做
try {
    assert num > 0 : "num非法";
} catch (AssertionError e) {
    // 捕獲后未做有效處理,掩蓋了bug
    System.out.println("斷言失?。? + e.getMessage());
}

注意事項3:斷言的錯誤信息要具體,便于定位問題

使用格式2(帶錯誤信息)時,錯誤信息要包含“當(dāng)前異常值、異常場景”,避免模糊描述,否則難以快速定位bug。

? 不推薦:assert num &gt; 0 : &#34;num錯誤&#34;;(信息模糊,不知道具體錯誤原因)

? 推薦:assert num &gt; 0 : &#34;num必須大于0,當(dāng)前值:&#34; + num;(包含具體值,快速定位)

注意事項4:團(tuán)隊開發(fā)需統(tǒng)一斷言使用規(guī)范

多人協(xié)作開發(fā)時,需約定斷言的使用場景,避免濫用、誤用:

注意事項5:避免與日志打印重復(fù)

斷言和日志的作用不同:斷言是“調(diào)試階段終止程序”,日志是“記錄運行狀態(tài)”,無需在斷言前后重復(fù)打印日志。

? 冗余寫法:

System.out.println("校驗num是否大于0");
assert num > 0 : "num非法";
System.out.println("num校驗通過");

注意事項6:斷言不能替代單元測試

斷言是“代碼內(nèi)的調(diào)試校驗”,單元測試是“獨立的測試用例”,兩者不能替代:

七、斷言 vs 常規(guī)異常

面試中常考“斷言和普通異常的區(qū)別”,以下從核心特性、適用場景等維度做對比,幫你快速記憶,應(yīng)對面試。

對比維度

斷言(assert)

普通業(yè)務(wù)異常(Exception)

默認(rèn)狀態(tài)

默認(rèn)關(guān)閉,需開啟VM參數(shù)

始終生效,無需額外配置

異常類型

Error級別(AssertionError)

Exception級別(可受檢/運行時異常)

可捕獲性

可捕獲,但不建議捕獲(掩蓋bug)

可正常捕獲,用于業(yè)務(wù)容錯

核心作用

開發(fā)調(diào)試,暴露邏輯bug

業(yè)務(wù)容錯,處理預(yù)期內(nèi)異常

適用場景

內(nèi)部邏輯校驗、調(diào)試兜底

業(yè)務(wù)入?yún)?、對外接口、?quán)限校驗

生產(chǎn)可靠性

不可靠(默認(rèn)關(guān)閉)

可靠(始終生效)

表達(dá)式限制

不能有業(yè)務(wù)副作用

可執(zhí)行有業(yè)務(wù)邏輯的表達(dá)式

八、全文總結(jié)

斷言(assert)是Java內(nèi)置的調(diào)試工具,核心價值是“開發(fā)階段快速定位邏輯bug”,記住以下3個核心原則,就能正確使用斷言,不踩坑:

1. 點擊頂部菜單欄「Run」→「Edit Configurations」;

2. 在彈出的窗口中,找到需要配置的Java類(如AssertDemo),點擊「Modify options」→「Add VM options」;

3. 在「VM options」輸入框中,填入-ea(開啟)或-da(關(guān)閉);

4. 點擊「Apply」→「OK」,重啟程序即可生效。

  • 斷言失敗會拋出AssertionError,直接終止程序,影響業(yè)務(wù)正常運行;
  • 斷言的校驗邏輯是“調(diào)試級”,不是“業(yè)務(wù)級”,生產(chǎn)環(huán)境無需依賴其做校驗。
  • 局部變量的狀態(tài)異常(如數(shù)值為負(fù)、對象為null);
  • 方法執(zhí)行過程中的中間狀態(tài)異常;
  • 邏輯分支的兜底(如switchdefault、枚舉未覆蓋的情況)。
  • 僅用于內(nèi)部邏輯校驗、開發(fā)調(diào)試,不準(zhǔn)用于業(yè)務(wù)入?yún)ⅰν饨涌冢?/li>
  • 禁止在斷言表達(dá)式中寫有副作用的代碼;
  • 統(tǒng)一使用格式2(帶錯誤信息),便于定位問題。
  • 斷言:在代碼運行過程中,實時校驗邏輯狀態(tài);
  • 單元測試:獨立于代碼,覆蓋各種場景(包括異常場景),確保代碼功能正確。

1. 適用場景:僅用于內(nèi)部邏輯校驗、開發(fā)調(diào)試、兜底校驗,比如私有方法參數(shù)校驗、分支兜底、系統(tǒng)初始化配置校驗;

2. 禁止場景:嚴(yán)禁用于業(yè)務(wù)入?yún)ⅰν饨涌?、?quán)限校驗、流程控制,這些場景必須用常規(guī)異常替代;

3. 核心細(xì)節(jié):默認(rèn)關(guān)閉,生產(chǎn)環(huán)境不依賴;斷言表達(dá)式無副作用;錯誤信息要具體;不建議捕獲AssertionError。

以上就是Java中斷言(assert)的使用場景與注意事項的詳細(xì)內(nèi)容,更多關(guān)于Java斷言(assert)使用與注意事項的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • springboot自定義日志注解的實現(xiàn)

    springboot自定義日志注解的實現(xiàn)

    本文主要介紹了springboot自定義日志注解的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java編碼輔助工具M(jìn)apstruct用法詳解

    Java編碼輔助工具M(jìn)apstruct用法詳解

    這篇文章主要介紹了Java編碼輔助工具M(jìn)apstruct用法詳解,手動編碼setter/getter各個對應(yīng)屬性,會顯得臃腫繁瑣。通過Mapstruct框架可簡單方便地完成這一工作。,需要的朋友可以參考下
    2019-06-06
  • Java方法遞歸與輸入輸出深入探索

    Java方法遞歸與輸入輸出深入探索

    這篇文章主要介紹了Java方法遞歸與輸入輸出的相關(guān)資料,方法遞歸是一種在方法內(nèi)部調(diào)用自身的技術(shù),適用于具有遞歸結(jié)構(gòu)的問題,輸入輸出是Java程序與外部世界交互的橋梁,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • Mybatis的SqlRunner執(zhí)行流程實現(xiàn)

    Mybatis的SqlRunner執(zhí)行流程實現(xiàn)

    MyBatis提供了一個用于操作數(shù)據(jù)庫的SqlRunner工具類,對JDBC做了很好的封裝,本文主要介紹了Mybatis的SqlRunner執(zhí)行流程實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • Spring的事務(wù)管理你了解嗎

    Spring的事務(wù)管理你了解嗎

    這篇文章主要為大家介紹了Spring的事務(wù)管理,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Java Socket實現(xiàn)多人聊天系統(tǒng)

    Java Socket實現(xiàn)多人聊天系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java Socket實現(xiàn)多人聊天系統(tǒng),具有圖形界面,實現(xiàn)文件傳輸功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • java 文件名截取方法

    java 文件名截取方法

    在實際開發(fā)應(yīng)用中會應(yīng)到截取文件名,本文將介紹java中文件名的截取,需要了解的朋友可以參考下
    2012-11-11
  • java連接FTP服務(wù)器圖文教程

    java連接FTP服務(wù)器圖文教程

    這篇文章主要給大家介紹了關(guān)于java連接FTP服務(wù)器的相關(guān)資料,Ftp是一種常見的文件存儲服務(wù)器,在很多的項目中都有使用,方便存儲各種格式的文件,使用java連接ftp文件服務(wù)器也是常用的工具類,需要的朋友可以參考下
    2023-08-08
  • Spring Security組件一鍵接入驗證碼登錄和小程序登錄的詳細(xì)過程

    Spring Security組件一鍵接入驗證碼登錄和小程序登錄的詳細(xì)過程

    這篇文章主要介紹了Spring Security 一鍵接入驗證碼登錄和小程序登錄,簡單介紹一下這個插件包的相關(guān)知識,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-04-04
  • Spring 中的 @PathVariable 注解及應(yīng)用場景分析

    Spring 中的 @PathVariable 注解及應(yīng)用場景分析

    @PathVariable注解是 Spring 框架中一個非常實用的注解,它可以幫助我們輕松地從 URL 中提取參數(shù),從而實現(xiàn) RESTful API 的開發(fā),通過本文的介紹,我們了解了@PathVariable注解的基本使用方法和高級用法,以及它的應(yīng)用場景,感興趣的朋友跟隨小編一起看看吧
    2025-05-05

最新評論

博客| 木里| 临清市| 辛集市| 恩平市| 望都县| 靖远县| 桐城市| 施秉县| 商洛市| 德令哈市| 东乌珠穆沁旗| 海林市| 新丰县| 德钦县| 达孜县| 金堂县| 富顺县| 赫章县| 宜章县| 南平市| 沂源县| 抚顺县| 靖州| 清涧县| 德保县| 江津市| 清丰县| 武穴市| 忻州市| 勐海县| 昌邑市| 澎湖县| 若尔盖县| 驻马店市| 南城县| 安国市| 乐昌市| 大田县| 合作市| 宕昌县|