您好,登錄后才能下訂單哦!
System類是jdk提供的一個工具類,有final修飾,不可繼承,由名字可以看出來,其中的操作多數和系統相關。其功能主要如下:
• 標準輸入輸出,如out、in、err
• 外部定義的屬性和環境變量的訪問,如getenv()/setenv()和getProperties()/setProperties()
• 加載文件和類庫的方法,如load()和loadLibrary()、
• 一個快速拷貝數組的方法:arraycopy()
• 一些jvm操作,如gc()、runFinalization()、exit(),該部分并未在源碼的java doc中提到,可能因為本身不建議主動調用吧。而且這幾個方法都僅僅是Runtime.getRuntime()的調用,兩者沒有區別 下邊直接看圖,主要的方法和功能都已經列出來。
下邊我們重點來該類是如何初始化的。 首先在開頭我們就可以看如下代碼:
private static native void registerNatives(); static { registerNatives(); }
類中的靜態代碼塊調用了一個native方法registerNatives(),可以猜到該方法應該是一個入口方法,看一下注釋:通過靜態初始化注冊native方法,該方法會令vm通過調用initializeSystemClass方法來完成初始化工作。果然如此,那么接下來我們看下initializeSystemClass方法吧:
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(); }
以上所述是小編給大家介紹的Java System類詳解_動力節點Java學院整理,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。