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

Java System 類核心方法實戰:時間戳、環境屬性、標準流、退出 JVM

     編輯:Java 相關知識

java.lang.System 為 final 工具類,提供**標準輸入輸出、系統屬性、環境變數、時間戳、垃圾回收提示、JVM 退出**等核心功能。所有方法皆為 static,不可實例化。

核心方法速查表

方法回傳/作用常見用途
currentTimeMillis()long 毫秒時間戳 (UTC 1970)計時、日誌、快取過期、唯一 ID 前綴
nanoTime()long 奈秒相對時間**高精度效能測量** (不受系統時間調整影響)
getProperties()Properties 系統屬性快照讀取 os.name, java.version, user.dir 等
getProperty(key) / getProperty(key, def)String單一屬性讀取,支援預設值
setProperty(key, value)String (舊值)運行時覆寫系統屬性 (謹慎使用)
getenv() / getenv(name)Map<String,String> / String讀取作業系統環境變數
exit(status)void (不返回)終止 JVM,0=正常,非 0=異常
gc()void**建議** 執行 GC,不保證立即執行
arraycopy(src, srcPos, dest, destPos, len)void高效陣列複製 (JNI 實作,比迴圈快)
identityHashCode(obj)int物件原始雜湊碼 (忽略覆寫 hashCode)

實戰範例


import java.util.Properties;

public class SystemDemo {
    public static void main(String[] args) {
        // 1. 高精度計時
        long start = System.nanoTime();
        // do something
        long elapsedMs = (System.nanoTime() - start) / 1_000_000;
        System.out.println("耗時: " + elapsedMs + " ms");

        // 2. 讀取系統屬性
        String os = System.getProperty("os.name");
        String javaVer = System.getProperty("java.version");
        System.out.println("OS: " + os + ", Java: " + javaVer);

        // 3. 列出所有屬性
        Properties props = System.getProperties();
        props.forEach((k, v) -> System.out.println(k + " = " + v));

        // 4. 自定義屬性 (僅影響當前 JVM)
        System.setProperty("my.app.config", "/etc/myapp");
        System.out.println("Custom: " + System.getProperty("my.app.config"));

        // 5. 環境變數
        String home = System.getenv("HOME"); // Linux/Mac
        if (home == null) home = System.getenv("USERPROFILE"); // Windows
        System.out.println("Home: " + home);

        // 6. 標準流
        System.out.println("標準輸出");
        System.err.println("標準錯誤輸出");
        // System.in 為 InputStream,可包裝 Scanner/BufferedReader

        // 7. 陣列高效複製
        int[] src = {1,2,3,4,5};
        int[] dest = new int[5];
        System.arraycopy(src, 0, dest, 0, src.length);

        // 8. 退出 JVM (謹慎)
        // System.exit(0);
    }
}

標準流重導向


// 將 System.out 導向檔案
PrintStream fileOut = new PrintStream(new FileOutputStream("app.log"));
System.setOut(fileOut);
System.out.println("這行會寫入 app.log");

// 還原
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));

注意事項

  • currentTimeMillis() 受系統時鐘調整影響 (NTP 同步、使用者改時間),**測量間隔必須用 nanoTime()**。
  • setProperty 僅影響當前 JVM 進程,不會寫回磁碟或影響其他進程。
  • exit() 會觸發 ShutdownHook (via Runtime.addShutdownHook),但不會執行 finally 區塊 (除非在 Hook 中)。
  • gc() 只是建議,**生產代碼勿依賴** 其行為。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved