5.初始化和清理

這章重點講了構造器

1.構造器的名字和類名完全相同

2.構造器本身不返回任何東西,沒有void,而返回值爲空(void)是方法本身不返回什麼,但是可以選擇返回別的東西。

3.構造器可以重載,且靠參數列表識別,參數是可以提升的,比如
Constructor(int i),那麼傳入char j時  j就被提升到int

4.用返回值區別重載方法行不通
  void f()
  String f()
如果調用String s = f();這是沒問題,如果調用f();將無法區分混亂。避免之。

5.默認構造器
這個也總是在面試題裏出現。
不寫構造器,則java自動給個無參構造器。如果寫了構造器,不管有參還是無參,默認的無參構造器都會消失。

6.this
返回當前對象引用,這是普通用法。
如果在構造器中調用構造器,this(參數列表),這時它就是有不同含義了,這是對符合此格式的某個構造器的明確調用。而且得寫在第一句。 除構造器除外,編譯器禁止在其他方法裏調用它。
static 方法裏是沒有 this的方法。

7.清理
  如果一個對象沒有引用變量指向它,這個對象就被應用拋棄了。隨時可能被回收。
 丟棄並不代表被回收,因爲回收也會有較大開銷,影響效率,所有只有在有對象要回收且系統需要回收時才進行。
  干預垃圾回收的兩種方式一個對象的引用都移走。
 調用System.gc(),向jvm發出請求,然後對幾個垃圾回收算法做了加權,使垃圾回收操作更易發生。相反,還有在某段時間內不要回收垃圾,要求速度的實時系統和嵌入式系統,因爲垃圾回收影響效率。
  垃圾回收時做的善後工作寫在
protected void finalize()  
 
{  
 
// finalization code here  
 


回收機制:
引用計數,對對象上的引用計數,如果爲零,則應該被回收。缺陷是循環引用,引用不爲零,但應當被回收。
停止複製,沒有的引用的對象將不被複制,缺點,程序要掛起,所以有了
標記-清掃,當程序達到穩態時,對程序進行檢查,如果沒有垃圾產生,則換到另一種工作模式,標記過程中活對象將被加上標記,加標記的將被複制。思路是從堆棧和靜態存儲區遍歷所有引用。

內存泄露,c++中對象被分配空間,但不可達,無法釋放。java中對象無用,但仍有引用相連。

8.成員初始化
java盡力保證:所有變量在使用之前都能得到恰當的初始化。對於方法的局部變量,java以編譯錯誤的形式保證。
9.初始話順序
靜態->成員變量->構造器

10.靜態塊
static int i;
static{
i = 47;
}
首次生成一個對象,或首次訪問類的靜態數據成員,靜態塊將被首先執行。
同樣非靜態成員變量也可以這樣
 int i;
{
i = 47;
}
只不過來了static。  目的都是在構造器之前執行這些。
11.數組初始化
基本類型的數組自動初始化爲 0 ,布爾型爲false;
而對象數組需要明確初始化。
這裏有個打印數組的方法 java.util.Array.toString(a)

12.可變參數列表
method(String ... args) 相當於method(String [] args)大小未知。
目的是不用顯式編寫數組然後傳參,method("a","b","c")可以自動填充數組args

13.java 參數傳遞
值傳遞--當基本類型作爲參數時
實參不會被改變,傳遞的是值。
引用傳遞--當對象作爲參數時
形參的改變會引起實參的改變,它們引用的是同一對象。
14.enum 不多說了 到後面專門有枚舉這章,在這提主要是想和switch 組合。

 

 

 

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