java對象不具備和基本類型一樣的生命週期.當你用new創建一個java對象時,它可以存活於作用域之外.
例如代碼如下:
{
String name=new String("hello world");
} //end of cope
引用name在作用域終點就消失了.然而:name指向的String對象仍繼續佔據內存的空間.在這一小段代碼中,我們似乎無法想象再訪問這個對象,因爲對它唯一的引用已超出了作用域的範圍.
但是我們可以通過傳遞對象的引用,傳遞給需要的方法
{
String name=new String("hello world");
test(name);
}
public void test(String name){
}
這樣這個對象又可以再其他地方使用了.
那麼事實證明,由new創建的對象,只要你需要,就會一直保留下去.這樣,需要C++編程問題在Java中就會完全消失.在C++中,最難的問題視乎在於:程序員並不能從語言本身中獲得任何幫助,以確保在需要調用對象時,該對象仍可用.更重要的是:在C++中,一旦使用完對象後,你必須確保要銷燬對象.
這樣便帶給我們另一個問題.如果java讓這個對象繼續存在,那麼靠什麼才能防止這些對象填滿內存空間,今兒阻塞你的程序呢?
java有一個垃圾回收器,用來監視用new創建的所有對象,並辨別那些不會再被引用的對象.隨後,釋放這些對象的內存空間,並提供其他新的對象使用.也就是說,你根本不需要擔心內存會後的問題.你只需要創建對象,一旦不再需要,他們就會自動消失.