tij3筆記 004

•    以構造器確保初始化
構造器是類的特殊方法
若類具有構造器,則該類之對象被創建時java會在用戶操作對象之前自動調用相應的構造器,以確保初始化。
命名:構造器採用與類相同的名稱(因而“每個方法均首字母小寫”的代碼風格對其不適用)。
構造器可帶參,可在初始化對象時提供實際參數。
構造器並無返回值,這與返回值爲空(void)不同。
•    方法重載method overloading
很明顯構造器名僅能有一個。但有如下情況需要兩個構造器:一個帶參(如文件名字符串,自該文件創建對象),一個不帶參(直接創建對象)。這時牽扯到“方法重載”之概念:令名稱相同但參數不同的構造器(亦可其它方法)同時存在。
爲區分不同相同名字的方法,每個重載的方法都必須有一個獨一無二的參數類型列表。
涉及基本類型的重載
以返回值區分重載方法是行不通的。
缺省構造器:若無構造器則編譯器將自動提供缺省(無參)構造器,但若定義構造器但創建對象時發生錯誤(如帶參等)將致使編譯器報錯。

this關鍵字:this關鍵字用於方法內,表示對“調用方法的那個對象”的引用。
在方法內部調用同一個類的方法就不必使用this,直接調用之即可。
有時一個類擁有多個構造器,若欲於構造器中調用另一構造器,則可利用this關鍵字。在構造器中,若爲this添加參數列表,則將產生對符合此參數列表的某個構造器的明確調用。這是直接的調用其它構造器的途徑。
注意-除構造器之外,編譯器禁止任何其它方法調用構造器。
見詳例:
public class Flower{
  int petalCount = 0;
  String s = new String("null");
  Flower(int petals){ //構造器一,整型參,應輸出參數
    petalCount = petals;
    System.out.println("Constructor w/ int arg only, petalCount="+petalCount);
  }
  Flower(String ss){ //構造器二,字符串參,輸出字符串
    System.out.println("Constructor w/String arg onlym s="+ss);
    s=ss;
  }
  Flower(String s,int pentals){ //構造器三
    this(pentals); //調用構造器一
    this.s = s; //this的又一用法,爲這個類中的對象賦值
    System.out.println("String & int args");
  }
  Flower(){ //構造器四,無參
    this("hi",47); //調用構造器三
    system.out.println("default constructor (no args)");
  }
  void print(){
    System.out.println("pentalCount="+pentalCount+"s="+s);
  }
  public static void main(String[] args){
    Flower x = new Flower(); //調用無參構造器,其將調用構造器三,而後分別調用構造器一和二
    x.print();
  }
}

再議static
•    清除(cleanup):終結(finalization)和垃圾回收(garbage collection)
java提供一種類中的特殊方法:finalization(),它“應”具備如下工作原理:一旦垃圾回收器準備好釋放對象佔用的存儲空間,將首先調用其finalization方法,並在下一次垃圾回收工作發生時才真正回收對象佔用的內存。
因此可以考慮運用finalization方法,在“垃圾回收時刻”做一些(清除)工作。
這裏要注意一些問題:
1、對象可能不被回收
2、垃圾回收不等於c++中用以銷燬對象的“析構”
有此兩前提,則可知不該將finalization()方法作爲通用的清除方法,須知:
3、垃圾回收只與內存相關
也即:垃圾回收器存在的唯一原因是爲了回收程序不再使用的內存,因而任何同垃圾回收相關的方法也同內存(及其回收)相關。

java與c++不同,java不允許創建局部對象,必須使用new。可以暫時認爲垃圾收集機制的存在使得java沒有析構函數。若希望進行進行除釋放存儲空間之外的清除工作,還是需要自行明確調用恰當的方法。
依然說明:無論“垃圾回收”還算“終結”,都不保證一定發生。除非面臨內存耗盡,jvm不會浪費時間在回收垃圾上。
•    成員初始化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章