一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 十分鐘速懂java知識點 System類

十分鐘速懂java知識點 System類

2020-03-10 11:47oO脾氣不壞Oo JAVA教程

這篇文章主要介紹了java知識點System類,根據一次面試總結的,可以十分鐘速懂System類,感興趣的小伙伴們可以參考一下

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

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

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

十分鐘速懂java知識點 System類

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

?
1
2
3
4
private static native void registerNatives();
static {
  registerNatives();
}

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

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
private static void initializeSystemClass() {
  // 初始化props
  props = new Properties();
  initProperties(props);
  sun.misc.VM.saveAndRemoveProperties(props);
 
  //獲取系統相關的換行符
  lineSeparator = props.getProperty("line.separator");
  sun.misc.Version.init();
 
  //分別創建in、out、err的實例對象,并通過setXX0()初始化,查看setXX0()方法可知,這是個native方法,將系統的標準流管理到類內的對象
  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相關的環境變量
  sun.misc.VM.initializeOSEnvironment();
 
  // 主線程不會在同一個線程組中添加相同的線程,我們必須在這里自己實現。注釋半天沒弄明白,看代碼就是主線程自己把自己加到了自己的線程組中......
  Thread current = Thread.currentThread();
  current.getThreadGroup().add(current);
 
  // 注冊共享秘鑰?注釋沒看明白,該方法就是實例化一個JavaLangAccess
  setJavaLangAccess();
 
  // 子系統在初始化的時候可以調用sun.misc.VM.isBooted(),以保證在application類加載器啟動前不做任何事。booted()其實就是改了個狀態,使isBooted()變為true。
  sun.misc.VM.booted();
}

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本96在线精品视频免费观看 | 欧美午夜视频一区二区三区 | 亚洲国产精品自在在线观看 | jzjzjz日本在线观看 | 色老板在线视频 | 91精品久久国产青草 | 魔镜号中文字幕 | 视频一本大道香蕉久在线播放 | 久久综合视频网站 | 美女奶口隐私免费视频网站 | 久久99热成人精品国产 | 成人激情| 日本爽p大片免费观看 | eeuss免费快捷| 人人艹在线视频 | 极品主播的慰在线播放 | 四虎影视在线影院在线观看观看 | 日韩成人一区ftp在线播放 | 亚洲第一永久色 | 满城尽带黄金甲大胸片 | 国产成人精品三级在线 | 久久99精品久久久久久园产越南 | 亚洲性夜 | 亚洲a视频在线 | 欧美肥b| 国产高清一区二区 | 亚洲精品tv久久久久久久久久 | 男人猛进女人屁股免费 | 国产另类视频一区二区三区 | 色综合天天综合网国产人 | 成年人在线免费观看视频网站 | 免费网站国产 | 日本在线视频网址 | 天天做日日做天天添天天欢公交车 | 欧美专区在线视频 | 校花在公车上被内射好舒 | 日本视频观看 | 2021国产麻豆剧传媒剧情最新 | 视频一区国产精戏刘婷30 | tiny4k欧美极品在线 | 亚洲香蕉视频 |