Java核心類庫 -- 02 系統(tǒng)相關(guān)類

Java程序在不同操作系統(tǒng)上運行時,可能需要獲取平臺相關(guān)的屬性,或調(diào)用平臺命令來完成特定功能。
此時需要System、Runtime類來與程序的運行平臺進行交互

目錄導(dǎo)讀:
System類
    |
    ?類變量(in, out, err)
    ?獲取當(dāng)前時間(本地方法)
    ?垃圾回收/資源回收(依賴Runtime類實現(xiàn)的)
    ?退出JVM(依賴Runtime類實現(xiàn)的)
    ?訪問環(huán)境變量、系統(tǒng)屬性
    ?載入動態(tài)鏈接庫/加載文件
    ?返回對象的精確的hashCode值
Runtime類
    |
    ?得到Runtime實例
    ?垃圾回收/資源回收(本地方法)
    ?執(zhí)行所在操作系統(tǒng)的命令
    ?退出JVM
    ?訪問JvM的相關(guān)信息
    ?載入動態(tài)鏈接庫/加載文件

1.System類
System類代表當(dāng)前Java程序的運行平臺

1.不可以獲取System實例
private System() {
}
因此,其所有的變量和方法必須而且也是設(shè)置為static的

2.類變量(in, out, err)
public final static InputStream in = null; //標(biāo)準(zhǔn)輸入(鍵盤)
public final static PrintStream out = null; //標(biāo)準(zhǔn)輸出(控制臺,即顯示器)
public final static PrintStream err = null; //標(biāo)準(zhǔn)錯誤輸出流

重定向標(biāo)準(zhǔn)輸入/輸出流
//重定向標(biāo)準(zhǔn)輸入流
public static void setIn(InputStream in) {
    checkIO();
    setIn0(in); //本地方法 private static native void setIn0(InputStream in);
}
//重定向標(biāo)準(zhǔn)輸出流
public static void setOut(PrintStream out) {
    checkIO();
    setOut0(out); //本地方法 private static native void setOut0(PrintStream out);
}
//重定向錯誤輸出流
public static void setErr(PrintStream err) {
    checkIO();
    setErr0(err); //本地方法 private static native void setErr0(PrintStream err);
}

3.獲取當(dāng)前時間(返回的時間精度與所在平臺相關(guān))
返回的是當(dāng)前時間與UTC1970年1月1日午夜的時間差
public static native long currentTimeMillis(); //返回以毫秒做單位的當(dāng)前時間
public static native long nanoTime(); //返回以納秒的做單位當(dāng)前時間

4.垃圾回收
public static void gc() {
    Runtime.getRuntime().gc(); //借助Runtime的相關(guān)方法
}

5.資源清理
 public static void runFinalization() {
    Runtime.getRuntime().runFinalization();
}

6.退出JVM(程序退出)
public static void exit(int status) {
    Runtime.getRuntime().exit(status); //借助于Runtime的方法
}

7.訪問環(huán)境變量、系統(tǒng)屬性
因為涉及到訪問操作系統(tǒng)底層硬件設(shè)備,Java程序已無法完成,只能借助于C語言來完成,
即需要使用C語言為Java方法提供實現(xiàn)。具體見《瘋狂Java講義3版》P243

8.載入動態(tài)鏈接庫/加載文件

9.返回對象的精確的hashCode值(本地方法)
該方法返回指定對象的hashCode值是根據(jù)該對象的地址計算得到的hashCode值,因此它是能唯一標(biāo)識該對象
public static native int identityHashCode(Object x); 

2.Runtime類
Runtime類代表Java程序的運行時環(huán)境

每個Java程序都有一個(有且只有一個)與之對應(yīng)的Runtime實例,應(yīng)用程序通過該對象與其運行時環(huán)境相連。可以獲取訪問JVM的相關(guān)信息,如處理器數(shù)量、內(nèi)存信息等

1.得到Runtime實例
應(yīng)用程序不能自己創(chuàng)建自己的Runtime實例,只能通過getRuntime()方法獲取與之關(guān)聯(lián)的Runtime對象
private static Runtime currentRuntime = new Runtime(); //每個Java程序只有一個Runtime實例
public static Runtime getRuntime() {
    return currentRuntime;
}

2.不允許外界通過new的方式創(chuàng)建實例
private Runtime() {}

3.垃圾回收
public native void gc();  //通知系統(tǒng)本地進行垃圾回收

4.資源清理
 public void runFinalization() {
    runFinalization0(); //通知系統(tǒng)本地進行系統(tǒng)資源清理
}
 private static native void runFinalization0();

5.執(zhí)行所在操作系統(tǒng)的命令
單獨開啟一個進程來運行操作系統(tǒng)的命令
public Process exec(String command) throws IOException {
    return exec(command, null, null); //具體依賴ProcessBuilder類來實現(xiàn)的
}

注:結(jié)合該方法和IO流可以運行Java虛擬機,從而即可運行另一個Java程序

6.退出JVM(程序退出)
//status為0是正常終止程序,非0是異常終止程序
public void exit(int status) {
    SecurityManager security = System.getSecurityManager();
    if (security != null) {
        security.checkExit(status);
    }
    Shutdown.exit(status);
}

7.訪問JvM的相關(guān)信息
如處理器數(shù)量、內(nèi)存信息等

8.載入動態(tài)鏈接庫/加載文件
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,142評論 0 62
  • 自己常用的兩種儲存方式
    d1b0f55d8efb閱讀 670評論 0 1
  • 周三 晴 悶熱 晚上從孩子爺爺奶奶家回到自己家里,時間已經(jīng)很晚了。老婆把需要洗的衣服放在自動洗衣機里洗了一下。衣...
    戴驍勇閱讀 182評論 0 0