首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 入門 FAQ 精選 (四):異常處理、JAR 打包、優質資源站

     編輯:Java 程式設計入門

FAQ:throw vs throws 核心差異

關鍵字位置語意範例
throw方法體內 / 靜態初始化塊 / 建構子**拋出** 具體例外實例,中斷當前流程throw new IllegalArgumentException("id 不可空");
throws方法宣告 / 建構子宣告**宣告** 可能拋出的受檢例外類別,轉嫁處理責任給呼叫端public void save() throws IOException, SQLException

實戰組合

public User findById(String id) throws UserNotFoundException, DataAccessException {
    if (id == null || id.isBlank()) {
        throw new IllegalArgumentException("id 不可空"); // 非受檢,無需 throws
    }
    try {
        return userRepository.findById(id)
            .orElseThrow(() -> new UserNotFoundException("找不到使用者: " + id));
    } catch (SQLException e) {
        throw new DataAccessException("資料庫查詢失敗", e); // 包裝原始例外保留堆疊
    }
}

💡 原則:throw 是動作 (丟球),throws 是契約 (告知對方可能丟什麼球)。**受檢例外必須 throws 或 try-catch 處理**;非受檢例外 (RuntimeException 子類) 可選擇性宣告。


FAQ:JAR 打包完整指南

jar 命令語法

jar {c|t|x|u}[vfm0MiC] jar-file [manifest-file] [-C dir] files...

核心選項

選項功能常用組合
c建立新 JARcvf (建立+詳細輸出+指定檔名)
t列出 JAR 內容tvf
x解壓 JARxvf
u更新現有 JARuvf
v詳細輸出幾乎總是加上
f指定 JAR 檔名 (後接檔名)**必須**,否則讀寫 stdout/stdin
m包含指定 Manifest 檔cvfm app.jar manifest.mf
0僅儲存不壓縮資源檔 (圖片/音訊) 已壓縮時避免二次壓縮
M不建立預設 Manifest完全自訂 Manifest 時使用
C切換目錄後包含檔案cvf app.jar -C build/classes . -C src/main/resources .
i產生索引資訊 (JAR Index)加速類別載入 (舊版優化,模組系統較少用)

實戰範例

# 1. 簡單打包類別檔
jar cvf app.jar com/example/*.class

# 2. 含 Manifest (指定主類別、Class-Path)
# manifest.mf 內容:
# Manifest-Version: 1.0
# Main-Class: com.example.Main
# Class-Path: lib/dependency1.jar lib/dependency2.jar
jar cvfm app.jar manifest.mf -C build/classes . -C lib .

# 3. Spring Boot Fat JAR (由 maven-shade-plugin / spring-boot-maven-plugin 產生)
# 內含所有依賴,特殊啟動器 JarLauncher 解壓依賴至臨時目錄
java -jar app.jar

# 4. 模組化 JAR (JDK 9+)
# 含 module-info.class,支援 --module-path
jar cvf app.jar --main-class=com.example.Main -C build/classes .

Manifest 關鍵屬性

屬性用途範例
Main-Class可執行 JAR 進入點Main-Class: com.example.Application
Class-Path相依 JAR 相對路徑 (空白分隔)Class-Path: lib/json.jar lib/db.jar
Module-Main-Class模組化應用主類別Module-Main-Class: com.example.Application
Automatic-Module-Name非模組化 JAR 作為自動模組名稱Automatic-Module-Name: com.example.lib
Implementation-Version建構版本資訊Implementation-Version: 1.2.3-SNAPSHOT

優質 Java 學習資源精選 (2024 持續更新版)

官方權威

高品質技術站點

站點特色推薦專欄
BaeldungSpring 生態、Java 核心、測試、安全、Kotlin、實戰教程Spring Security、JPA、REST、併發、Jackson
InfoQ架構案例、新技術深度報導、QCon/ArchSummit 講稿微服務、領域驅動、雲原生、效能工程
Vlad MihalceaHibernate/JPA/資料庫效能權威專家連線池、批次處理、鎖、查詢優化
Aleksey ShipilёvJMH/JCStress/併發/JVM 內部核心貢獻者JMH 基準測試、記憶體模型、JIT 編譯
Nicolai ParlogJava 語言演進、模組系統、JShell、新特性深度解析JDK 9-21 新特性、模組化遷移

程式碼範例庫

中文優質社群

  • 知乎 Java 話題 — 實戰經驗、面試心得、技術選型討論
  • 掘金 Java 標籤 — 前後端整合、工具鏈、源碼解析、職涯發展
  • 博客園 — 老牌技術部落格聚集地,搜尋特定技術關鍵字常有深度文章

提問智慧


本期關鍵字

  • throw / throws — 異常拋出與宣告雙核心
  • jar cvfm — 打包可執行 JAR 標準組合
  • Manifest — JAR 中繼資料核心
  • MCVE — 最小可重現範例,提問黃金標準
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved