天天看點

深入JDK源碼,這裡總有你不知道的知識點!

Java的基礎知識有很多,但是我認為最基礎的知識應該要屬jdk的基礎代碼,jdk的基礎代碼裡面,有分了很多基礎子產品,其中又屬jdk包下面的lang包最為基礎。

我們下面将總結和分析一下lang包下面最為基礎和常用的幾個部分。

1:常用的對象類型包

(1)其中最基礎的類為Object,所有的對象都是繼承于這個類的。我們知道所有的類如果沒有顯示的聲明繼承于哪個類的話,預設都會繼承于Object類,這個類裡面也有很多我們常用的方法的預設實作。

(2)然後就是字元串類了,我們常用的有String、StringBuilder和StringBuffer三個和字元串相關的類,在jdk1.8裡面String類還增加了join靜态方法用來結合多個字元串

(3)最好還有8種基本元素的包裝類,裡面對于每種不同類型的基本進行了包裝,并提供了相應的操作方法。

2: 常用的異常類型包:

(1)異常全部繼承于Throwable類,Throwable類是所有異常的基礎類。

(2)Error類型是Throwable類的子類,這種異常表示的是一般是指與虛拟機相關的問題,如系統崩潰,虛拟機錯誤,記憶體空間不足,方法調用棧溢等

(3)Exception類型是Throwable類的子類,這種異常表示程式可以處理、可以恢複的異常,對于這種異常應該在代碼中進行處理,不應該被程式最終抛出。 Exception類又被分為兩類,一類是需要檢查的異常,是被強制要在代碼中進行處理,另一類是運作時異常,是在代碼運作的時候出錯時出現。

3: 常用的接口包

(1)Comparable接口表示用于可以比較大小的類

(2)Runnable接口表示這個類是要被作為一個線程執行

(3)AutoCloseable接口表示類擁有資源,在銷毀類的時候需要自動銷毀擁有的資源。

(4)Iterable接口表示這個類可以執行foreach循環操作

4: 系統包

(1)System類,他裡面包含了幾個可以用于獲得系統相關的有用方法。最常見的有獲得系統時間,獲得系統屬性,獲得系統0/1/2檔案描述符,利用系統函數拷貝數組内容。

(2)Runtime類,他裡面可以獲得應用運作時的一些狀态(主要包括使用的記憶體和cpu個數)和在應用運作時執行一些操作(程式退出、執行gc、設定退出時的鈎子函數)。

(3)Thread類,他裡面包括了線程相關的操作,主要有線程屬性的設定(優先級、名稱、類别)和改變線程運作狀态(啟動、睡眠、中斷等)。

(4)ThreadLocal類主要是儲存以線程級别的運作狀态的類。

5: 注解包

這個系列的提供了可以用于自定義注解方法和一些常用的注解,其中最為重要的就是FunctionalInterface注解,一個接口如果使用了這個注解,則表示了具有lambda特性的接口。

6: 反射包

這個系列使得我們可以通過反射的方式得到對象的屬性或者通過反射的方式執行對象的方法。主要常用的有Field、Method、Construct、Paramter、Array、Proxy幾個類。

7: 其他包

其他類包括了一些不是太常用,但是在某些場景下特别有用的工具。

(1)Ref包提供了與 Java 垃圾回收器密切相關的引用類。這些引用類對象可以指向其它對象,但它們不同于一般的引用,因為它們的存在并不防礙 Java 垃圾回收器對它們所指向的對象進行回收。其好處就在于使者可以保持對使用對象的引用,同時 JVM 依然可以在記憶體不夠用的時候對使用對象進行回收。

(2)Management包提供提供管理接口,用于監視和管理 Java 虛拟機以及 Java 虛拟機在其上運作的作業系統。最常用的有MemoryMXBean、MemoryPoolMXBean、RuntimeMXBean、ThreadMXBean四個獲得不同類型資料的MXBean。

(3)Instrument包提供了提供允許 Java 程式設計語言代理檢測運作在 JVM 上的程式的服務,利用它提供的Instrumentation類和ClassFileTrasformation類,利用這兩個類加上-javaagent指令,可以在程式運作之前,完成對位元組碼的修改,利用這個方法可以有效的對程式進行監控。

最後附上一個關于jdk裡面lang包裡面常用類和方法的思維導圖:

如果你覺得我們總結的知識可以幫到你,可以到加群: 632109190一起進行學習和讨論。