Java之空间分配
? ? ?編寫Java程序不可避免的就會創建對象,因此早晚都會釋放掉它,從堆、棧、范圍、構造器、超極構造器、空間引用等進行介紹。在Java中,程序較為在乎內存中的兩種區域:對象的生存空間堆(heap)和方法以及變量的生存空間棧(stack).
1)實例變量
實例變量是被聲明在類中而不是方法中。它們代表每個獨立對象的“字段”,實例變量存在于所屬的對象中
public class Duck{int size;//每個Duck對象都有獨立的size }還有一種情況是,在一個類中聲明了一個實例變量,如:
public class CellPhone{//在類CellPhone中聲明一個私有的Antenna類對象antprivate Antenna ant; }當新建一個對象帶有對象引用的變量時,此時是否需要保留對象帶有的所有對象的空間呢?當然是否定的,無論如何,Java會留下空間給實例變量的值,但是引用變量的值并不是對象本身,所以若CellPhone帶有Antenna,Java只會留下Antenna引用率變量而不是對象本身所用到的空間,因此如果聲明變量但是沒有給其賦值,則只會留下變量的空間:
private Antenna ant;直到引用變量被賦值給一個新的Antenna對象才會在堆上占有空間
private Antenna ant = new Antenna();實例變量有默認值,默認值為0/0.0/false,引用的默認值是null
2)局部變量
局部變量和方法的參數都是被聲明在方法中,它們是暫時的,且聲明周期只限于方法被放在棧上的這段期間(也就是方法調用到執行完畢為止)
public void foo(int x){int i = x + 3;boolean b = true;//參數x和變量i,b都是局部變量 }- 實例變量是聲明在類中方法之外的地方,存在于對象所屬的堆空間上
- 局部變量聲明在方法或者方法的參數上
- 所有局部變量都存在于棧上相對應的堆棧塊中
- 對象引用變量與primitive主數據類型變量都是放在棧上
- 不管實例變量或者局部變量,對象本身都會在堆上
總結
- 上一篇: Java之接口
- 下一篇: java美元兑换,(Java实现) 美元