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

Java 介面與打包部署實戰:interface、abstract class、enum、package、jar、manifest 完整筆記

     編輯:Java 綜合教學

Java 介面與打包部署實戰:interface、abstract class、enum、package、jar、manifest 完整筆記

本文系統整理 Java 介面定義規則、抽象類與介面組合模式、枚舉類型、套件管理、JAR 打包與 Manifest 主類別配置,附完整代碼範例與命令列操作流程。

一、介面 (interface) 核心規則

  • 隱含 public abstract 修飾方法 (Java 8+ 可 default/static 方法,Java 9+ 可 private 方法)。
  • 欄位隱含 public static final (常量),必須初始化。
  • 不可實例化,無建構子。
  • 類用 implements 實現介面,**必須實現所有抽象方法** (除非類也是 abstract)。
  • 單類可實現多介面 (多實現),介面可繼承多介面 (interface C extends A, B)。

二、抽象類 vs 介面 組合設計模式

// 1. 抽象類實現介面 (部份實現,留給子類完成)
interface Clothing {
    void calcArea(); void getColor(); void getDate();
    int SIZE = 1;
}
abstract class Frock implements Clothing { // 抽象類可不完全實現介面
    public String toString() { return "red"; }
    // calcArea/getColor/getDate 留給具體子類
}

// 2. 具體類繼承抽象類 + 實現多介面
class Shirt extends Frock implements Clothing, Serializable {
    int age;
    @Override public String toString() { return super.toString() + age; }
    @Override public void calcArea() { System.out.println("...eat1"); }
    @Override public void getColor() { System.out.println("...eat2"); }
    @Override public void getDate() { System.out.println("...eat3"); }
}

// 3. 多型應用
public class Test {
    public static void main(String[] args) {
        Frock f = new Shirt(); // 向上轉型
        System.out.println(f.toString()); // 多型調用子類實現

        Clothing c = new Shirt(); // 介面引用
        c.calcArea(); // 介面多型
    }
}

設計原則速查

場景選擇理由
定義「是什麼」核心契約、多重實現介面支援多實現、解耦、JDK 動態代理需介面
提供共享程式碼、狀態、模板方法抽象類可有建構子、欄位、非抽象方法、單繼承
既要契約又要共享邏輯抽象類 implements 介面介面對外暴露,抽象類內部複用

三、枚舉 (enum) 進階用法

enum Signal {
    RED("停止", 1), GREEN("通行", 2), YELLOW("警示", 3); // 實例必須在第一行

    private final String desc;
    private final int code;
    Signal(String desc, int code) { this.desc = desc; this.code = code; }
    public String getDesc() { return desc; }
    public int getCode() { return code; }

    // 靜態方法查找
    public static Signal ofCode(int code) {
        for (Signal s : values()) if (s.code == code) return s;
        throw new IllegalArgumentException("無效 code: " + code);
    }
}

// 使用
Signal s = Signal.RED;
System.out.println(s.getDesc()); // "停止"
for (Signal sig : Signal.values()) System.out.println(sig + "=" + sig.getCode());

// EnumMap/EnumSet 高效集合
EnumMap map = new EnumMap<>(Signal.class);
map.put(Signal.RED, "紅燈");
EnumSet set = EnumSet.of(Signal.RED, Signal.GREEN);

四、套件 (package) 與匯入 (import) 規範

  • 套件命名:com.公司.專案.模組 (全小寫),對應目錄結構。
  • package com.a.b; 必須在源檔**第一行非註解語句**。
  • import com.a.b.*; 或 import com.a.b.MyClass; (單類別匯入優先,避免命名衝突)。
  • 同套件類別免匯入;java.lang 自動匯入。

五、JAR 打包與執行完整流程

1. 編譯帶套件結構

# 專案結構
src/
  com/
    example/
      Main.java
      util/Helper.java

# 編譯到 out 目錄,保留套件結構
javac -d out src/com/example/Main.java src/com/example/util/Helper.java

2. 建立 Manifest 檔 (指定主類別)

# manifest.txt (注意最後一行必須換行)
Main-Class: com.example.Main
Class-Path: lib/dependency1.jar lib/dependency2.jar  # 可選:外部依賴相對路徑

3. 打包 JAR

java -jar MyApp.jar

5. 解壓/檢視 JAR

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved