一切都是對象之永遠不需要銷燬對象(二)對象的作用域

對象的作用域
  Java對象不具備和基本類型一樣地生命週期。當用new創建一個Java對象時,它可以存活於作用域之外。所以假如你採用代碼

		{
			String s = new String("a string");
		}//End of scope

      引用S在作用域終點就消失了。然而,s指向的String對象仍然繼續佔據內存空間。在這一小段代碼中,我們無法在這個作用域之後訪問這個對象,因爲對它唯一的引用已超出了作用域的範圍。
  事實證明,由new創建的對象,只要你需要,就會一直保留下去。這樣,許多C++編程問題在Java中就完全消失了。在C++中,你不僅必須要確保對象的保留時間與你需要這些對象的時間一樣長,而且還必須在你使用完它們後,將其銷燬。
  這樣便帶來一個有趣的問題。如果Java讓對象繼續存在,那麼靠什麼才能防止這些對象填滿內存空間,進而阻塞你的程序呢?這正是C++裏可能會發生的問題。這也是Java神奇之所在。Java有一個垃圾回收器,用來監視用new創建的所有對象,並辨別那些不會再被引用的對象。隨後,釋放這些對象的內存空間,以便供其他新的對象使用。也就是說,你根本不必擔心內存回收的問題。你只需要創建對象,一旦不再需要,它們就會自行消失。這樣做就消除了這類編程問題(即“內存泄漏”),這是由於程序員忘記釋放內存而產生的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章