理解 Java Applet 的三種來源檔案類型,是正確部署、維護、逆向分析的基礎。本文釐清各檔案角色、關係與實務操作建議。
| 副檔名 | 名稱 | 內容 | 可讀性 | 可修改性 | 直接部署 | 典型用途 |
|---|---|---|---|---|---|---|
.java | 原始碼 | 人類可讀的 Java 程式碼 | 高 | ✅ 完全可修改 | ❌ 需編譯 | 開發、學習、二次開發 |
.class | 位元碼 | JVM 指令集 (二進位) | 低 (需反編譯) | ❌ 不可直接修改 | ✅ 瀏覽器/AppletViewer 直接載入 | 發布、生產環境部署 |
.jar | Java 封存檔 | ZIP 格式打包多個 .class + 資源檔 | 低 (解壓後反編譯) | ❌ 需解壓/重打包 | ✅ <APPLET archive="xxx.jar"> 加速載入 | 多類別應用、資源整合、網路傳輸優化 |
.java --(javac)--> .class --(jar cf)--> .jar
javac MyApplet.java 產生 MyApplet.class (含內部類別 MyApplet$1.class 等)。jar cf myapplet.jar *.class images/ sounds/ 打包類別與資源。code 永遠指定主類別 (含 public static void main 或繼承 Applet 的類別)。archive 列出一或多個 JAR (逗號分隔),瀏覽器單次連線下載,避免多類別多次 HTTP 請求延遲。com/example/MyApplet.class)。.class 易被反編譯 (JAD, Procyon, CFR, Fernflower 等工具還原度極高)。Applet 技術已淘汰 (瀏覽器移除 NPAPI、Java 11 移除模組)。現代 Web 部署採用:
java -jar app.jar。jlink 產生精簡運行時映像 + jpackage 產生原生安裝包 (exe, dmg, deb, msi)。.java 給人看、.class 給 JVM 看、.jar 給網路傳輸看。掌握三者轉換與部署細節,是 Java 開發者從入門到精通的必經之路。雖然 Applet 時代落幕,但位元碼、JAR、類別載入機制仍是 JVM 生態系統的基石。