Java培訓(xùn)教程:Java的引用類型

Java培訓(xùn)教程:Java的引用類型

深圳達內(nèi)教育      2022-04-21 10:00:02     16

Java培訓(xùn)教程:Java的引用類型,1.java的引用類型分為強引用,軟引用,和弱引用以及虛引用.  創(chuàng)建強引用String text=new String(123);  利用=號來創(chuàng)建強引用 

課程價格 請咨詢

上課時段: 授課校區(qū):

詳細介紹

 

 

1.java的引用類型分為強引用,軟引用,和弱引用以及虛引用.

  創(chuàng)建強引用

String text=new String("123");

  利用=號來創(chuàng)建強引用

  創(chuàng)建軟引用

SoftReferencesfr=new SoftReference(text);

  針對上面的對象創(chuàng)建了一個軟引用,相當于對于同一個對象123,創(chuàng)建了兩個引用,分別是強引用和軟引用

  創(chuàng)建弱引用

WeakReferencewrf=new WeakReference(text);

  同理,針對同一個變量創(chuàng)建三個引用,分別是強引用,軟引用和弱引用

  另外還有最后一個虛引用,這里省略

2.關(guān)于四種引用,不同情況還有一種特性叫作及物性

  例如,不管對于一個變量,創(chuàng)建了多少種引用,只要存在強引用,那么這個變量就叫做強及物性,針對這種情況,垃圾回收器,也就是gc,是永遠不會回

收這種變量的.

  假如,驅(qū)除了強引用,只剩下了軟引用和弱引用,那么這時候這個變量就叫做軟及物,針對這種情況,gc只有在內(nèi)存不夠的情況下,才會回收變量

  最后,驅(qū)除了強引用和軟引用,只剩下弱引用的時候,gc只要發(fā)現(xiàn)了這個變量,就會馬上回收內(nèi)存.

3.案例演示

①案例一:

//在堆里面創(chuàng)建一個對象,即是 new String(),同時也會在常量池里面創(chuàng)建一個常量,即是123; 并且String text指向的是堆里面的對象

String text=new String("123");

//創(chuàng)建軟引用

SoftReferencesfr=new SoftReference(text);

//創(chuàng)建弱引用

WeakReferencewrf=new WeakReference(text);

//這時候,變量是屬于強引用.

System.out.println(text);

②案例二:

//在堆里面創(chuàng)建一個對象,即是 new String(),同時也會在常量池里面創(chuàng)建一個常量,即是123; 并且String text指向的是堆里面的對象

String text=new String("123");

//創(chuàng)建軟引用

SoftReferencesfr=new SoftReference(text);

//創(chuàng)建弱引用

WeakReferencewrf=new WeakReference(text);

//這時候,變量是屬于強引用.

System.out.println(text);

//這時候驅(qū)除了強引用,也就是變量屬于軟引用,當內(nèi)存不夠的時候,gc才會回收

text=null;

//打印輸出變量的取值

System.out.println(sfr.get());

System.out.println(wrf.get());

//這時候是可以輸出123的效果的.

③案例三:

//在堆里面創(chuàng)建一個對象,即是 new String(),同時也會在常量池里面創(chuàng)建一個常量,即是123; 并且String text指向的是堆里面的對象

String text=new String("123");

//創(chuàng)建軟引用

SoftReferencesfr=new SoftReference(text);

//創(chuàng)建弱引用

WeakReferencewrf=new WeakReference(text);

//這時候,變量是屬于強引用.

System.out.println(text);

//這時候驅(qū)除了強引用,也就是變量屬于軟引用,當內(nèi)存不夠的時候,gc才會回收

text=null;

//這時候去除了軟引用,也就是說變量是屬于弱引用,只要gc發(fā)現(xiàn)了該變量,就會回收該內(nèi)存

sfr.clear();

//調(diào)用gc來回收變量,理論上,雖然即是調(diào)用了gc,但是gc也不是馬上會運行的,她自己會負責(zé)垃圾的回收.但是其實,一般來說,只要調(diào)用了gc,一般

來說,gc是會馬上運行的

System.gc();

//這時候,弱引用是拿不到值的,因為,前面調(diào)用了gc,而gc發(fā)現(xiàn)了變量,就會馬上回收內(nèi)存,所以說變量已經(jīng)不存在了,自然就沒有取值了.所以下面

代碼輸出為null

System.out.println(wrf.get());

注意點:

gc回收的內(nèi)存是只針對堆里面的,

  所以假如我們一開始的變量是這樣創(chuàng)建的,是可以被回收的.

String text=new String("123");

  但是假如我們的變量是這樣子創(chuàng)建了,gc就無法回收內(nèi)存了,而且弱引用仍舊可以輸出123的值

String text="123"

  這代碼只是在常量池里面創(chuàng)建了常量123,并沒有在堆里面創(chuàng)建了變量new String,所以只針對堆的內(nèi)存回收的gc自然就不起效果了,也就導(dǎo)致了常量123沒有被回收,所以弱引用還可以輸出值

 

   以上就是深圳達內(nèi)教育Java培訓(xùn)機構(gòu)小編介紹的“Java培訓(xùn)教程:Java的引用類型”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。

       Java全套自學(xué)資料

       Java自學(xué)視頻教程(免費下載學(xué)習(xí)):http://www.bjpowernode.com/video.html

      Java技術(shù)教程:http://www.bjpowernode.com/tutorial/

 

 相關(guān)文章

零基礎(chǔ)怎么自學(xué)Java,完整版Java學(xué)習(xí)路線圖

你還在糾結(jié)學(xué)Java,是自學(xué)還是去培訓(xùn)班嗎

一個標準的Java程序員如何進階?

Java學(xué)習(xí)路線清單,快速進階Java

Java編程初學(xué)者要如何進階

 

Java培訓(xùn) Java培訓(xùn)教程 Java教程

培訓(xùn)啦提醒您:交易時請核實對方資質(zhì),對于過大宣傳或承諾需謹慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險,謹防上當。