java引用類(lèi)型是一個(gè)對(duì)象類(lèi)型,值是什么呢?它的值是指向內(nèi)存空間的引用,就是地址,所指向的內(nèi)存中保存著變量所表示的一個(gè)值或一組值。
Java 提供兩種不同的類(lèi)型:引用類(lèi)型和原始類(lèi)型(或內(nèi)置類(lèi)型)。
引用類(lèi)型和原始類(lèi)型的行為完全不同,并且它們具有不同的語(yǔ)義。
引用類(lèi)型和原始類(lèi)型具有不同的特征和用法,它們包括:大小和速度問(wèn)題,這種類(lèi)型以哪種類(lèi)型的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),當(dāng)引用類(lèi)型和原始類(lèi)型
用作某個(gè)類(lèi)的實(shí)例數(shù)據(jù)時(shí)所指定的缺省值。
對(duì)象引用實(shí)例變量的缺省值為 null,而原始類(lèi)型實(shí)例變量的缺省值與它們的類(lèi)型有關(guān)。同時(shí)為了面向?qū)ο蟛僮鞯囊恢滦浴?/p>
這些基本類(lèi)型都有相應(yīng)的封裝類(lèi)型:Integer、Short、Long、Byte、Float、Double、Character等。
Java的4種引用類(lèi)型:
他們分別是強(qiáng)引用(StrongReference),軟引用(SoftReference),弱引用(WeakReference)以及PhantomReference(虛引用),他們被 GC回收的可能性從大到小排列。
強(qiáng)引用(StrongReference)
只要強(qiáng)引用存在,垃圾回收器將永遠(yuǎn)不會(huì)回收被引用的對(duì)象,哪怕內(nèi)存不足時(shí),JVM也會(huì)直接拋出OutOfMemoryError,不會(huì)去回收。如 果想中斷強(qiáng)引用與對(duì)象之間的聯(lián)系,可以顯示的將強(qiáng)引用賦值為null,這樣一來(lái),JVM就可以適時(shí)的回收對(duì)象了。
軟引用(SoftReference)
軟引用是用來(lái)描述一些非必需但仍有用的對(duì)象。在內(nèi)存足夠的時(shí)候,軟引用對(duì)象不會(huì)被回收,只有在內(nèi)存不足時(shí),系統(tǒng)則會(huì)回收軟引用對(duì) 象,如果回收了軟引用對(duì)象之后仍然沒(méi)有足夠的內(nèi)存,才會(huì)拋出內(nèi)存溢出異常。這種特性常常被用來(lái)實(shí)現(xiàn)緩存技術(shù),比如網(wǎng)頁(yè)緩存,圖片 緩存等。
在 JDK1.2 之后,用java.lang.ref.SoftReference類(lèi)來(lái)表示軟引用。
弱引用(WeakReference)
弱引用的引用強(qiáng)度比軟引用要更弱一些,無(wú)論內(nèi)存是否足夠,只要 JVM 開(kāi)始進(jìn)行垃圾回收,那些被弱引用關(guān)聯(lián)的對(duì)象都會(huì)被回收。
在 JDK1.2 之后,用 java.lang.ref.WeakReference 來(lái)表示弱引用。
PhantomReference(虛引用)
虛引用是最弱的一種引用關(guān)系,如果一個(gè)對(duì)象僅持有虛引用,那么它就和沒(méi)有任何引用一樣,它隨時(shí)可能會(huì)被回收,在 JDK1.2 之后,用PhantomReference 類(lèi)來(lái)表示,通過(guò)查看這個(gè)類(lèi)的源碼,發(fā)現(xiàn)它只有一個(gè)構(gòu)造函數(shù)和一個(gè) get() 方法,而且它的 get() 方法僅僅是返回一個(gè)null,也就是說(shuō)將永遠(yuǎn)無(wú)法通過(guò)虛引用來(lái)獲取對(duì)象,虛引用必須要和 ReferenceQueue 引用隊(duì)列一起使用。
以上就是Java中什么叫引用類(lèi)型的詳細(xì)內(nèi)容,更多請(qǐng)java相關(guān)內(nèi)容請(qǐng)關(guān)注深圳達(dá)內(nèi)教育java學(xué)院官網(wǎng),每天會(huì)有精彩內(nèi)容分享與你。