日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【JDK源码】java.lang包常用类详解

發(fā)布時(shí)間:2024/4/14 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【JDK源码】java.lang包常用类详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??接下來(lái)的幾天開始JDK源碼的學(xué)習(xí)和總結(jié),之前看《java編程思想》的時(shí)候看到j(luò)ava的基礎(chǔ)知識(shí)有很多,其中支撐著這些基礎(chǔ)的基礎(chǔ)中的基礎(chǔ)當(dāng)屬JDK。JDK的基礎(chǔ)代碼里面又分了很多基礎(chǔ)的模塊,今天從最基礎(chǔ)的java.lang包開始學(xué)習(xí)。本次JDK源碼學(xué)習(xí)系列以JDK1.7為準(zhǔn)。
??觀察JDK的源碼,可以看到,java.lang包下面最為基礎(chǔ)和常用的幾個(gè)部分包括:常用的對(duì)象類型包,常用的異常類型包,常用的接口包,系統(tǒng)包,注解包,反射包,其它包。

一、常用的對(duì)象類型包
1、Object類
??類Object是類層次結(jié)構(gòu)的根類。每個(gè)類都使用Object作為超類。所有對(duì)象(包括數(shù)組)都實(shí)現(xiàn)這個(gè)類的方法。在Object類的方法里面會(huì)經(jīng)常用到hashCode()和==與equals()的區(qū)別,有關(guān)==、equals()和hashcode()的源碼分析請(qǐng)參看本人的另一篇博文。
java中的==、equals()、hashCode()源碼分析
2、字符串類
??在字符串類中,最常用到的是String、StringBuilder和StringBuffer三個(gè)類,有關(guān)這三個(gè)類的比較參看本人的一下博文: String Stringbuilder StringBuffer的區(qū)別和應(yīng)用
??本次JDK源碼學(xué)習(xí)的是1.7版本,在這里簡(jiǎn)單提一下,1.8版本里面String類還增加了join靜態(tài)方法用來(lái)結(jié)合多個(gè)字符串,有興趣的同學(xué)可自行搜索學(xué)習(xí)。

3、8種基本元素的包裝類
八種基本類型:

六種數(shù)字類型:
?? ?? 四個(gè)整數(shù)型(byte,short,int,long)
?? ??兩個(gè)浮點(diǎn)型(douvle,float)
一種字符類型:char
一種布爾型:boolean

包裝類對(duì)每種不同類型的基本進(jìn)行了包裝,并提供了相應(yīng)的操作方法。

二、常用的異常類型包
1、Throwable類


??Throwable類是java中所有錯(cuò)誤或者異常的超類,只有當(dāng)對(duì)象是此類(或者其子類之一)的實(shí)例時(shí),才能通過(guò)JVM或者Java的throw語(yǔ)句拋出。類似的,只有Throwable類或者其子類才可以是catch子句中的參數(shù)類型。Throwable包含了其線程創(chuàng)建時(shí)線程執(zhí)行堆棧的快照。它還包含了給出有關(guān)錯(cuò)誤更多信息的消息字符串。
2、Error類
??Error類是Throwable類的子類,這種異常一般表示與JVM有關(guān)的問(wèn)題,如系統(tǒng)崩潰,虛擬機(jī)錯(cuò)誤,內(nèi)存空間不足,方法調(diào)用棧溢出等。

3、Exception類
??Exception類也是Throwable類的子類,這種異常是程序可以處理、可以恢復(fù)的異常,對(duì)于這種異常應(yīng)該在代碼中進(jìn)行處理,不應(yīng)該被程序最終拋出。Exception類又被分為兩類,一類是需要檢查的異常,是被強(qiáng)制要在代碼中進(jìn)行處理,一類是運(yùn)行時(shí)異常,是在代碼運(yùn)行時(shí)出現(xiàn)的。

三、常用的接口包
1、Comparable接口


??Comparable接口用于可以比較大小的類。此接口強(qiáng)行對(duì)實(shí)現(xiàn)它的每個(gè)類的對(duì)象進(jìn)行整體排序,這種排序被稱為類的自然排序,類的comparaTo方法被稱為它的自然比較方法。
??實(shí)現(xiàn)此接口的對(duì)象列表(和數(shù)組)可以通過(guò)Collection.sort和Arrays.sort進(jìn)行自動(dòng)排序。實(shí)現(xiàn)此接口的對(duì)象可以用做有序映射中的鍵或有序集合中的元素,無(wú)需指定比較器。

2、Runable接口
??Runnable 接口應(yīng)該由那些打算通過(guò)某一線程執(zhí)行其實(shí)例的類來(lái)實(shí)現(xiàn)。類必須定義一個(gè)稱為 run 的無(wú)參數(shù)方法。設(shè)計(jì)該接口的目的是為希望在活動(dòng)時(shí)執(zhí)行代碼的對(duì)象提供一個(gè)公共協(xié)議。例如,Thread 類實(shí)現(xiàn)了 Runnable。
??此外,Runnable 為非 Thread 子類的類提供了一種激活方式。通過(guò)實(shí)例化某個(gè) Thread 實(shí)例并將自身作為運(yùn)行目標(biāo),就可以運(yùn)行實(shí)現(xiàn) Runnable 的類而無(wú)需創(chuàng)建 Thread 的子類。大多數(shù)情況下,如果只想重寫 run() 方法,而不重寫其他 Thread 方法,那么應(yīng)使用 Runnable 接口。這很重要,因?yàn)槌悄愦蛩阈薷幕蛟鰪?qiáng)類的基本行為,否則不應(yīng)為該類創(chuàng)建子類。有關(guān)Runable和Thread的區(qū)別和使用請(qǐng)參看本人的另一篇博文:【Java線程】Thread && Runnable必知必會(huì)

3、Cloneable接口
??實(shí)現(xiàn)了Cloneable接口的類可以合法的使用Object.clone()方法對(duì)其實(shí)例進(jìn)行按字段復(fù)制。 如果在沒(méi)有實(shí)現(xiàn) Cloneable 接口的實(shí)例上調(diào)用 Object 的 clone 方法,則會(huì)導(dǎo)致拋出 CloneNotSupportedException 異常。 按照慣例,實(shí)現(xiàn)此接口的類應(yīng)該使用公共方法重寫 Object.clone(它是受保護(hù)的)。
??注意,此接口不 包含 clone 方法。因此,因?yàn)槟硞€(gè)對(duì)象實(shí)現(xiàn)了此接口就克隆它是不可能的。即使 clone 方法是反射性調(diào)用的,也無(wú)法保證它將獲得成功。
??有關(guān)java對(duì)象的克隆以及屬性拷貝請(qǐng)參看本人以下博文:Java提高—對(duì)象克隆(復(fù)制)/對(duì)象屬性拷貝深復(fù)制淺復(fù)制: 深復(fù)制VS淺復(fù)制(MemberwiseClone方法介紹)

4、Iterable接口
Iterable接口表示這個(gè)類可以執(zhí)行foreach循環(huán)操作。

四、系統(tǒng)包
1、System類
??System類包含一些有用的類字段和方法,是final類型,所以不能被實(shí)例化。在System類提供的設(shè)施中,有標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出流;對(duì)外部定義的屬性和環(huán)境變量的訪問(wèn);加載文件和庫(kù)的方法;還有快速?gòu)?fù)制數(shù)組的一部分實(shí)用方法。

2、 Runtime類
?? Runtime類里面可以獲得應(yīng)用運(yùn)行時(shí)的一些狀態(tài)(主要包括使用的內(nèi)存和cpu個(gè)數(shù))和在應(yīng)用運(yùn)行時(shí)執(zhí)行一些操作(程序退出、執(zhí)行g(shù)c、設(shè)置退出時(shí)的鉤子函數(shù))。

3、 Thread類
?? Thread類里面包括了線程相關(guān)的操作,主要有線程屬性的設(shè)置(優(yōu)先級(jí)、名稱、類別)和改變線程運(yùn)行狀態(tài)(啟動(dòng)、睡眠、中斷等)。Thread的sleep()和wait()方法的區(qū)別

4、ThreadLocal類
??該類提供了線程局部 (thread-local) 變量。這些變量不同于它們的普通對(duì)應(yīng)物,因?yàn)樵L問(wèn)某個(gè)變量(通過(guò)其 get 或 set 方法)的每個(gè)線程都有自己的局部變量,它獨(dú)立于變量的初始化副本。ThreadLocal 實(shí)例通常是類中的 private static 字段,它們希望將狀態(tài)與某一個(gè)線程(例如,用戶 ID 或事務(wù) ID)相關(guān)聯(lián)。每個(gè)線程都保持對(duì)其線程局部變量副本的隱式引用,只要線程是活動(dòng)的并且 ThreadLocal 實(shí)例是可訪問(wèn)的;在線程消失之后,其線程局部實(shí)例的所有副本都會(huì)被垃圾回收(除非存在對(duì)這些副本的其他引用)。

五、注解包
??這個(gè)系列的提供了可以用于自定義注解方法和一些常用的注解,其中最為重要的就是FunctionalInterface注解,一個(gè)接口如果使用了這個(gè)注解,則表示了具有l(wèi)ambda特性的接口。


六、反射包
??這個(gè)系列使得我們可以通過(guò)反射的方式得到對(duì)象的屬性或者通過(guò)反射的方式執(zhí)行對(duì)象的方法。主要常用的有Field、Method、Construct、Paramter、Array、Proxy幾個(gè)類。


1、AccessibleObject類
??java.lang.reflect.AccessibleObject類是Field,Method和Constructor類對(duì)象的基類。 它提供了將反射對(duì)象標(biāo)記為在使用它時(shí)抑制默認(rèn)Java語(yǔ)言訪問(wèn)控制檢查的功能。 當(dāng)使用Fields,Methods或Constructors類對(duì)象來(lái)設(shè)置或獲取字段,調(diào)用方法,或創(chuàng)建和初始化新的類實(shí)例時(shí),執(zhí)行訪問(wèn)分別檢查(對(duì)于public,默認(rèn)(包)訪問(wèn),protected和private成員) 。 在反射對(duì)象中設(shè)置可訪問(wèn)標(biāo)志允許具有足夠權(quán)限的復(fù)雜應(yīng)用程序(如Java對(duì)象序列化或其他持久性機(jī)制)以被禁止的方式操作對(duì)象。

2、Array類
??java.lang.reflect.Array類提供靜態(tài)方法來(lái)動(dòng)態(tài)創(chuàng)建和訪問(wèn)Java數(shù)組。 Array允許在get或set操作期間擴(kuò)展轉(zhuǎn)換,但如果發(fā)生縮小轉(zhuǎn)換,則會(huì)拋出IllegalArgumentException異常。

3、Constructor類
??java.lang.reflect.Constructor類提供了一個(gè)類的單個(gè)構(gòu)造函數(shù)的信息和訪問(wèn)權(quán)限。 構(gòu)造函數(shù)允許在將實(shí)際參數(shù)傳到newInstance()與底層構(gòu)造函數(shù)的形式參數(shù)進(jìn)行匹配時(shí)進(jìn)行擴(kuò)展轉(zhuǎn)換,但如果發(fā)生縮小轉(zhuǎn)換,則會(huì)拋出IllegalArgumentException異常。

4、Field類
??java.lang.reflect.Field類提供有關(guān)類或接口的單個(gè)字段的信息和動(dòng)態(tài)訪問(wèn)。反射的字段可以是類(靜態(tài))字段或?qū)嵗侄巍W侄卧试S在獲取或設(shè)置訪問(wèn)操作期間擴(kuò)展轉(zhuǎn)換,但如果發(fā)生縮小轉(zhuǎn)換,則會(huì)引發(fā)IllegalArgumentException。

5、Method類
??java.lang.reflect.Method類提供有關(guān)類或接口上單個(gè)方法的信息和訪問(wèn)權(quán)限。反映的方法可以是類方法或?qū)嵗椒?包括抽象方法)。 當(dāng)匹配實(shí)際參數(shù)以使用底層方法的形式參數(shù)調(diào)用時(shí),方法允許擴(kuò)展轉(zhuǎn)換,但如果發(fā)生縮小轉(zhuǎn)換,則會(huì)引發(fā)IllegalArgumentException異常。

6、Modifier類
??java.lang.reflect.Modifier類提供了用于解碼類和成員訪問(wèn)修飾符的靜態(tài)方法和常量。修飾符集合被表示為具有表示不同修飾符的不同位位置的整數(shù)。表示修飾符的常量的值取自“Java虛擬機(jī)規(guī)范”第4.1,4.4,4.5和4.7節(jié)中的表中。

7、Proxy類
??java.lang.reflect.Proxy類提供用于創(chuàng)建動(dòng)態(tài)代理類和實(shí)例的靜態(tài)方法,它也是由這些方法創(chuàng)建的所有動(dòng)態(tài)代理類的超類。

??動(dòng)態(tài)代理的使用在日常工作也會(huì)經(jīng)常用到,如果理解不清楚,這部分的內(nèi)容也是有一定的難度。通過(guò)學(xué)習(xí)源碼可以加深自己對(duì)動(dòng)態(tài)代理的理解,參看本人以下博文: 【動(dòng)態(tài)代理】從源碼實(shí)現(xiàn)角度剖析JDK動(dòng)態(tài)代理

七、其它包
其他類包括了一些不是太常用,但是在某些場(chǎng)景下特別有用的工具。
(1)Ref包提供了與Java垃圾回收器密切相關(guān)的引用類。這些引用類對(duì)象可以指向其它對(duì)象,但它們不同于一般的引用,因?yàn)樗鼈兊拇嬖诓⒉环赖KJava垃圾回收器對(duì)它們所指向的對(duì)象進(jìn)行回收。其好處就在于使者可以保持對(duì)使用對(duì)象的引用,同時(shí)JVM依然可以在內(nèi)存不夠用的時(shí)候?qū)κ褂脤?duì)象進(jìn)行回收。
(2)Management包提供提供管理接口,用于監(jiān)視和管理Java虛擬機(jī)以及Java虛擬機(jī)在其上運(yùn)行的操作系統(tǒng)。最常用的有MemoryMXBean、MemoryPoolMXBean、RuntimeMXBean、ThreadMXBean四個(gè)獲得不同類型數(shù)據(jù)的MXBean。
(3)Instrument包提供了提供允許Java編程語(yǔ)言代理檢測(cè)運(yùn)行在JVM上的程序的服務(wù),利用它提供的Instrumentation類和ClassFileTrasformation類,利用這兩個(gè)類加上-javaagent命令,可以在程序運(yùn)行之前,完成對(duì)字節(jié)碼的修改,利用這個(gè)方法可以有效的對(duì)程序進(jìn)行監(jiān)控。

java.lang包常用類和方法的思維導(dǎo)圖:

總結(jié)

以上是生活随笔為你收集整理的【JDK源码】java.lang包常用类详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。