JAVA引用的誤區以及應用

來源:互聯網
上載者:User

呵呵!還是先給大家出個題吧!

 

public class PreferenceTest {</p><p>public int testVar = 0;</p><p>/**<br /> * create data: 2009-12-30</br> Just for me to test preference.<br /> *<br /> * @author XiangJie<br /> * @param args<br /> *<br /> */<br />public static void main(String[] args) {<br />// TODO Auto-generated method stub<br />PreferenceTest test1 = new PreferenceTest();<br />test1.testVar = 10;<br />PreferenceTest test2 = test1;<br />test2.testVar = 5;<br />test1 = null;<br />System.out.println(test2.testVar);<br />}</p><p>}

 

請問列印結果是什麼?

 

下面我來分析一下這個問題,和以前一樣先不給出答案啊!

要討論這個問題,就首先要瞭解JAVA對象和引用的關係,以及堆棧的儲存關係!

以這個例子來討論:PreferenceTest test1 = new PreferenceTest();在初始化的時候,首先是在堆中new出一片地區用於儲存物件,也就是說對象是儲存在堆中的,而PreferenceTest test1 只是一個引用,它存在與棧中,“=”的目的是讓這個引用指向對應的對象,

。理清了這些關係我們來討論結果到底是什麼,首先是引用test1指向已經初始化的Object(對象),然後,test1.testVar=10的意思就是通過這個引用拿到object,再將它的變數testVar賦值為10,而PreferenceTest test2 = test1是指引用test2通過引用test1拿到object,也就是說現在object有兩個引用指向它,test2.testVar=5實質上還是在操作當前的object,現在它的變數testVar賦值為5了,現在最關鍵的也就是test1=null,這句的意思是什麼呢?其實很簡單,將它的引用指向空(null),而並不是說當前的object變為null了,通過這一句,其實在棧中只有test2指向當前的object,答案也就出來了。

列印的結果為:5

 

大家也許會覺的這些都是小兒科,其實當真正遇到這個問題的時候,大家會發現往往是最基礎的問題把你給欄注了。

 

下面給大家說一下在項目中實實在在遇到的問題:

開發過eclipse的朋友也許遇到過No more handles Exception ,引起這個exception的具體原因以及該怎麼解決以後在講,現在只是簡單的說一下,其實SWT與JAVA的一個區別說造成的,java有一套完整的記憶體回收機制,所以我們不用擔心記憶體回收的問題,而在SWT中的很多個物件有一個dispose方法,這個方法就是用於釋放對象的,只不過是它已經處理了很多實作類別,但是有一種資源它沒有處理過,那就是Resource對象,這個有點類似於C++,你要手動的去釋放這些資源,否則的話它是一直存在與記憶體中的,導致的結果就是對象越來越多,而eclipse能夠handle的對象是有限的,我記得好像是5000多個,如果太多的話就會拋出這個異常了。

 

下面來帖一下解決的代碼(其中Color就是Resource的子類):

 

Color tempBgColor = bgColor;<br />bgColor = ColorChangeTool.mapStringToColor(model.getBackground());</p><p>((Label) getFigure()).setBackgroundColor(bgColor);</p><p>tempBgColor.dispose();

這幾句代碼就巧妙應用到了引用和對象的轉換。釋放了之前已經存在的對象,而重新設定新的對象!

 

更多精彩:http://www.eclipselight.org/swt-jface/168/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.