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

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

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

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

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

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

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

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

類(lèi)中的靜態(tài)代碼塊調(diào)用了一個(gè)native方法registerNatives(),可以猜到該方法應(yīng)該是一個(gè)入口方法,看一下注釋?zhuān)和ㄟ^(guò)靜態(tài)初始化注冊(cè)native方法,該方法會(huì)令vm通過(guò)調(diào)用initializeSystemClass方法來(lái)完成初始化工作。果然如此,那么接下來(lái)我們看下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ì)象,并通過(guò)setXX0()初始化,查看setXX0()方法可知,這是個(gè)native方法,將系統(tǒng)的標(biāo)準(zhǔn)流管理到類(lèi)內(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è)類(lèi),以便之后加載利庫(kù)使用
  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)。注釋半天沒(méi)弄明白,看代碼就是主線程自己把自己加到了自己的線程組中......
  Thread current = Thread.currentThread();
  current.getThreadGroup().add(current);

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

  // 子系統(tǒng)在初始化的時(shí)候可以調(diào)用sun.misc.VM.isBooted(),以保證在application類(lèi)加載器啟動(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)行單元測(cè)試,需要的朋友可以參考下
    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)目,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 使用IDEA查看jar包及jar包的正確打開(kāi)方式

    使用IDEA查看jar包及jar包的正確打開(kāi)方式

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

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

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

    SpringBoot日志配置全過(guò)程

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

    瓮安县| 海兴县| 晋州市| 丰城市| 易门县| 永嘉县| 中宁县| 徐州市| 文水县| 苗栗县| 饶阳县| 仁怀市| 苍梧县| 桐乡市| 道孚县| 北碚区| 沂源县| 东乌珠穆沁旗| 上高县| 高雄县| 开阳县| 绩溪县| 德令哈市| 焦作市| 榕江县| 怀远县| 江油市| 神池县| 竹北市| 台山市| 龙州县| 安仁县| 库尔勒市| 永泰县| 福鼎市| 云梦县| 文成县| 本溪| 锡林浩特市| 乐安县| 阳城县|