最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

十分鐘速懂java知識(shí)點(diǎn) System類

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

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

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

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

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

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

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

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

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

  //分別創(chuàng)建in、out、err的實(shí)例對(duì)象,并通過setXX0()初始化,查看setXX0()方法可知,這是個(gè)native方法,將系統(tǒng)的標(biāo)準(zhǔn)流管理到類內(nèi)的對(duì)象
  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這個(gè)類,以便之后加載利庫使用
  loadLibrary("zip");

  // 設(shè)置平臺(tái)相關(guān)的信號(hào)處理
  Terminator.setup();

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

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

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

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

至此,System基本上便講完了,希望本文所述對(duì)大家學(xué)習(xí)有所幫助。

相關(guān)文章

  • Spring Mvc中攔截器Interceptor用法解讀

    Spring Mvc中攔截器Interceptor用法解讀

    這篇文章主要介紹了Spring Mvc中攔截器Interceptor用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Java編程中void方法的學(xué)習(xí)教程

    Java編程中void方法的學(xué)習(xí)教程

    這篇文章主要介紹了Java編程中void方法的學(xué)習(xí)教程,包括對(duì)void方法進(jìn)行單元測試,需要的朋友可以參考下
    2015-10-10
  • Jenkins+Maven+SVN自動(dòng)化部署java項(xiàng)目

    Jenkins+Maven+SVN自動(dòng)化部署java項(xiàng)目

    這篇文章主要介紹了Jenkins+Maven+SVN自動(dòng)化部署java項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 使用IDEA查看jar包及jar包的正確打開方式

    使用IDEA查看jar包及jar包的正確打開方式

    IDEA 是把 jar 包添加為 Libraries,然后展開后即可查看,因?yàn)槭蔷幾g后的 class 文件,所以注釋是沒有的,今天小編給大家介紹下使用IDEA查看jar包及jar包的正確打開方式,感興趣的朋友一起看看吧
    2023-07-07
  • SpringBoot實(shí)現(xiàn)異步事件Event詳解

    SpringBoot實(shí)現(xiàn)異步事件Event詳解

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)異步事件Event詳解,異步事件的模式,通常將一些非主要的業(yè)務(wù)放在監(jiān)聽器中執(zhí)行,因?yàn)楸O(jiān)聽器中存在失敗的風(fēng)險(xiǎn),所以使用的時(shí)候需要注意,需要的朋友可以參考下
    2023-11-11
  • SpringBoot日志配置全過程

    SpringBoot日志配置全過程

    Spring Boot默認(rèn)使用Logback作為日志框架,可以配置多種日志系統(tǒng),包括JavaUtilLogging、CommonsLogging、Log4J及SLF4J,默認(rèn)日志輸出在控制臺(tái),可以通過配置文件將日志保存到文件中,日志級(jí)別包括TRACE、DEBUG、INFO、WARN、ERROR和FATAL
    2025-01-01
  • 最新評(píng)論

    新源县| 荆州市| 桦川县| 四平市| 区。| 岐山县| 离岛区| 乌鲁木齐县| 吉林省| 张掖市| 万源市| 二手房| 武宣县| 文登市| 慈溪市| 玉林市| 七台河市| 城固县| 天门市| 江山市| 西华县| 文山县| 尉犁县| 将乐县| 获嘉县| 南川市| 岳阳市| 定陶县| 民丰县| 喀喇沁旗| 牡丹江市| 永安市| 乌拉特中旗| 扶沟县| 永吉县| 定远县| 霍林郭勒市| 松江区| 祁连县| 藁城市| 皮山县|