Java中對象、對象引用、堆、棧、值傳遞以及引用傳遞的詳細解釋

Java中對象、對象引用、堆、棧、值傳遞以及引用傳遞的詳細解釋 
1.對象和對象引用的區別: 
(1).對象: 
萬物皆對象。對象是類的實例。在Java中new是用來在堆上建立對象用的。一個對象能夠被多個引用所指向。 
(2).對象引用: 
相似於C++中的地址。經過對象引用能夠找到對象。一個引用能夠指向多個對象。操縱的標識符其實是指向對象的引用。 
就像:對象存放在屋子裏,對象的引用就至關於屋子的鑰匙。 
2.值傳遞和引用傳遞的區別: 
(1).值傳遞:傳遞的是值的拷貝。也就是說傳遞後就不互相關了。 
(2).引用傳遞:傳遞的是值的引用。是內存空間的地址。也就是說傳遞前和傳遞後都指向同一個引用(也就是同一個內存空間)。 
3.堆和棧的區別: 
(1).棧:在函數中定義的一些基本類型的變量。和對象的引用變量都在函數的棧內存中分配。當在一段代碼塊定義一個變量時,Java就在棧中爲這個變量分配內存空間。當超過變量的做用域後,Java會自動釋放掉爲該變量所分配的內存空間。該內存空間能夠當即被另做他用。引用變量就至關因而爲數組或對象起的一個名稱。之後就能夠在程序中使用棧中的引用變量來訪問堆中的數組或對象。 
(2).堆:堆內存用來存放由new建立的對象和數組。在堆中分配的內存,由Java虛擬機的自動垃圾回收器來管理。 
(3).生命週期: 
A.引用變量的生命週期:程序運行一直到變量的做用域以外就被釋放 
B.數組和對象的生命週期:程序運行到使用new產生數組或者對象的語句所在的代碼塊以外,數組和對象自己佔據的內存不會被釋放。數組和對象在沒有引用變量指向它的時候,才變爲垃圾,不能再被使用。但仍然佔據內存空間不放,在隨後的一個不肯定的時間被垃圾回收器收走。這也是Java比較佔內存的緣由,實際上棧中的變量指向堆內存中的變量,這就是Java中的指針。 
4.Java中的內存機制: 
Java把內存分爲兩種:一種是棧內存。一種是堆內存。 
棧內存:在函數中定義的一些基本類型的變量和對象的引用變量。 
堆內存:由new建立的對象和數組。在堆中產生了一個數組或者對象以後,還能夠在棧中定義一個特殊的變量。讓棧中的這個變量的取值等於數組或對象在堆內存中的首地址。棧中的這個變量就成了數組或對象的引用變量,之後就能夠在程序中使用棧中的引用變量來訪問堆中的數組或者對象,引用變量就至關因而爲數組或對象起的一個名稱。引用變量是普通的變量,定義時在棧中分配。數組

相關文章
相關標籤/搜索