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

跨平台 Java 程式設計的十二條鐵律

     編輯:Java 程式設計入門

前言

Java 「一次編譯,處處運行」的承諾並非自動兌現。相當一部分 Java 程式因忽視平台差異而無法跨平台運行。以下十二條規則助你編寫真正可移植的 100% Pure Java 程式。

十二條跨平台鐵律

1. 僅使用 Java 核心 API 與 100% Pure Java 第三方庫

避免依賴特定廠商擴展(如 Visual J++ 專有類庫)。發布時若依賴非標準庫,需附帶對應 JVM,違背跨平台初衷。

2. 編譯時開啟所有警告選項

javac -Xlint 或 IDE 相應設置。警告往往暴露平台相關代碼,無警告不保證跨平台,但有警告大概率存在移植隱患。

3. 拒絕使用 @Deprecated 與 Undocumented 方法

查閱官方 Javadoc,確認方法未標註過時、非內部實現細節(如 sun.*、com.sun.* 套件)。

4. 謹慎使用 System.exit()

System.exit() 會終止整個 JVM,若同一進程運行多個應用(如應用服務器部署多個 Webapp)會殃及無辜。正常退出應:

  • 單線程:自然返回 main()。
  • 多線程:關閉所有非守護線程。
  • 僅在異常終止時使用 exit()。

5. 避免本地方法 (JNI) 與 Native 代碼

優先用 Pure Java 重寫。若必須用,隔離為獨立服務(RMI、CORBA、REST),主程式作客戶端調用。

6. 避免 Runtime.exec() 執行平台相關命令

exec() 本身跨平台,但命令參數強綁定 OS(Windows notepad.exe vs Linux vi)。若必須調用外部程式,交由用戶配置命令路徑參數。

7. 字符編碼統一使用 ASCII/UTF-8,勿假設平台支持 Unicode

早期某些平台對 Unicode 支持不全。資源檔、屬性檔採用 native2ascii 轉義或 UTF-8 存儲。

8. 絕不硬編碼平台相關常量(路徑/行/檔案分隔符)

使用 System.getProperty() 動態獲取:

  • file.separator:/ (Unix) / \ (Windows)
  • path.separator:: (Unix) / ; (Windows)
  • line.separator:\n / \r\n / \r

9. 網絡程式避免 InetAddress.getHostName(),優先用 IP 地址

主機名格式跨平台不一致。getAddress() 返回標準 IP 字節陣列。配置檔、代碼中統一使用 IP 或可解析的域名。

10. 檔案操作不硬編碼路徑,遵守命名規範

路徑由用戶配置或相對路徑構建。檔案名僅用 ASCII 字符,避免與系統保留名衝突(如 Windows CON, PRN, NUL 等)。

11. GUI 佈局必須使用 LayoutManager,禁用絕對座標

AWT/Swing 組件大小/位置隨平台字體、DPI、Look&Feel 變化。FlowLayout、BorderLayout、GridBagLayout 等佈局管理器自動適配。

12. 動態獲取系統顏色與螢幕屬性

  • 顏色:java.awt.SystemColor(如 window, menu, textHighlight)。
  • 解析度:Toolkit.getDefaultToolkit().getScreenResolution() (DPI)。
  • 尺寸:Toolkit.getDefaultToolkit().getScreenSize()。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved