欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

十分鐘速懂java知識點 System類

 更新時間:2015年12月13日 11:56:46   作者:oO脾氣不壞Oo  
這篇文章主要介紹了java知識點System類,根據(jù)一次面試總結的,可以十分鐘速懂System類,感興趣的小伙伴們可以參考一下

上次面試中遇到的一個問題,問到System.out.println()中的out是不是內部類,當時就給問蒙了,直觀感覺out應該是System類的一個屬性,跟內部類有什么關系?而且之前整理IO部分的時候記得有個PrintStream的類用于標準輸出的,但是從沒看過System的源碼,也不敢隨便再說了。后來看了下源碼,發(fā)現(xiàn)的確是PrintStream,可能當時想問的是內部類的用法吧,不過歸根結底自己水平差得多,還是要認真學習。
言歸正傳,System類是jdk提供的一個工具類,有final修飾,不可繼承,由名字可以看出來,其中的操作多數(shù)和系統(tǒng)相關。其功能主要如下:

  • 標準輸入輸出,如out、in、err
  • 外部定義的屬性和環(huán)境變量的訪問,如getenv()/setenv()和getProperties()/setProperties()
  • 加載文件和類庫的方法,如load()和loadLibrary()、
  • 一個快速拷貝數(shù)組的方法:arraycopy()
  • 一些jvm操作,如gc()、runFinalization()、exit(),該部分并未在源碼的java doc中提到,可能因為本身不建議主動調用吧。而且這幾個方法都僅僅是Runtime.getRuntime()的調用,兩者沒有區(qū)別

下邊直接看圖,主要的方法和功能都已經(jīng)列出來。

下邊我們重點來該類是如何初始化的。
首先在開頭我們就可以看如下代碼:

private static native void registerNatives();
static {
  registerNatives();
}

類中的靜態(tài)代碼塊調用了一個native方法registerNatives(),可以猜到該方法應該是一個入口方法,看一下注釋:通過靜態(tài)初始化注冊native方法,該方法會令vm通過調用initializeSystemClass方法來完成初始化工作。果然如此,那么接下來我們看下initializeSystemClass方法吧:

private static void initializeSystemClass() {
  // 初始化props
  props = new Properties();
  initProperties(props); 
  sun.misc.VM.saveAndRemoveProperties(props);

  //獲取系統(tǒng)相關的換行符
  lineSeparator = props.getProperty("line.separator");
  sun.misc.Version.init();

  //分別創(chuàng)建in、out、err的實例對象,并通過setXX0()初始化,查看setXX0()方法可知,這是個native方法,將系統(tǒng)的標準流管理到類內的對象
  FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
  FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
  FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err);
  setIn0(new BufferedInputStream(fdIn));
  setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));
  setErr0(new PrintStream(new BufferedOutputStream(fdErr, 128), true));
  //加載zip包以獲取java.util.zip.ZipFile這個類,以便之后加載利庫使用
  loadLibrary("zip");

  // 設置平臺相關的信號處理
  Terminator.setup();

  // 初始化sun.misc相關的環(huán)境變量
  sun.misc.VM.initializeOSEnvironment();

  // 主線程不會在同一個線程組中添加相同的線程,我們必須在這里自己實現(xiàn)。注釋半天沒弄明白,看代碼就是主線程自己把自己加到了自己的線程組中......
  Thread current = Thread.currentThread();
  current.getThreadGroup().add(current);

  // 注冊共享秘鑰?注釋沒看明白,該方法就是實例化一個JavaLangAccess
  setJavaLangAccess();

  // 子系統(tǒng)在初始化的時候可以調用sun.misc.VM.isBooted(),以保證在application類加載器啟動前不做任何事。booted()其實就是改了個狀態(tài),使isBooted()變?yōu)閠rue。
  sun.misc.VM.booted();
}

至此,System基本上便講完了,希望本文所述對大家學習有所幫助。

相關文章

  • Java GUI編程實現(xiàn)在線聊天室

    Java GUI編程實現(xiàn)在線聊天室

    這篇文章主要為大家詳細介紹了Java GUI編程實現(xiàn)在線聊天室,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 30條Java代碼編寫經(jīng)驗分享

    30條Java代碼編寫經(jīng)驗分享

    你知道寫好Java代碼的30條經(jīng)驗是什么嗎?這篇文章主要為大家分享了30條Java代碼編寫經(jīng)驗技巧,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Spring七大事務傳遞機制深入分析實現(xiàn)原理

    Spring七大事務傳遞機制深入分析實現(xiàn)原理

    實際項目開發(fā)中,如果涉及到多張表操作時,為了保證業(yè)務數(shù)據(jù)的一致性,大家一般都會采用事務機制,好多小伙伴可能只是簡單了解一下,遇到事務失效的情況,便會無從下手,下面這篇文章主要給大家介紹了關于Spring事務傳遞機制的相關資料,需要的朋友可以參考下
    2023-03-03
  • 詳解解密Java中的類型轉換問題

    詳解解密Java中的類型轉換問題

    這篇文章主要介紹了Java中的類型轉換問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • MybatisPlus批量保存原理及失效原因排查全過程

    MybatisPlus批量保存原理及失效原因排查全過程

    這篇文章主要介紹了MybatisPlus批量保存原理及失效原因排查全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 如何利用Java?AWT?創(chuàng)建一個簡易計算器

    如何利用Java?AWT?創(chuàng)建一個簡易計算器

    這篇文章主要介紹了如何利用Java?AWT?創(chuàng)建一個簡易計算器,AWT?是一個有助于構建?GUI?的?API?基于?java?應用程序,下面關于其相關資料實現(xiàn)計算器的內容詳細,需要的朋友可以參考一下
    2022-03-03
  • Java中的FutureTask源碼解析

    Java中的FutureTask源碼解析

    這篇文章主要介紹了Java中的FutureTask源碼解析,FutureTask是一個可取消的異步計算,這個類是Future的實現(xiàn)類,有開始和取消一個計算的方法,如果一個計算已經(jīng)完成可以查看結果,需要的朋友可以參考下
    2023-12-12
  • Spring中@Async的使用小結

    Spring中@Async的使用小結

    在Java開發(fā)中,我們常常會遇到需要執(zhí)行耗時操作的場景,例如文件上傳、網(wǎng)絡請求等,本文將介紹如何在Java中使用異步方法,并探討其中的一些注意事項,感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • 深入理解MyBatis中的一級緩存與二級緩存

    深入理解MyBatis中的一級緩存與二級緩存

    這篇文章主要給大家深入的介紹了關于MyBatis中一級緩存與二級緩存的相關資料,文中詳細介紹MyBatis中一級緩存與二級緩存的工作原理及使用,對大家具有一定的參考性學習價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • Java中synchronized的幾種使用方法

    Java中synchronized的幾種使用方法

    本文主要介紹了Java中synchronized的幾種使用方法,synchronized可用于修飾普通方法、靜態(tài)方法和代碼塊,下面詳細內容介紹,需要的小伙伴可以參考一下
    2022-05-05

最新評論