Java 初始化與清理(5)

隨着計算機革命的發展,「不安全」的編程方式已逐漸成爲編程代價高昂的主因之一。編程

1.用構造器確保初始化

  • 構造器:在建立對象時被自動調用的特殊方法.
  • 構造器命名問題:1.所取得任何名字可能與類的某個成員命名衝突;2.調用構造器是編譯器的責任,因此應該讓編譯器知道該調用哪一個方法.
  • 構造器命名:與類名相同,因此"每一個方法首字母小寫"的編程風格不適用於構造器.
  • 構造器沒有返回值(new表達式返回了對新建對象的引用,但構造器本省並無返回任何值).

2.方法重載

  • 目的:爲了讓方法名相同而形式參數不一樣的構造器同時存在.
  • 方法重載是構造器所必需的,但亦可用於其餘方法.
  • 區分:參數類型列表,參數順序(代碼難以維護),涉及基本類型的重載(易混淆),返回值(爲了反作用而調用就會忽略其返回值 ×)

3.默認構造器

  • 若是類中沒有構造器,編譯器會自動建立一個默認構造器.
  • 若是已有構造器,則不會建立.

4.this關鍵字

  • 爲了能用簡便,面向對象的語法來編寫代碼,編譯器作了一些幕後工做,他把"所操做對象的引用"做爲第一個參數傳給方法(注:通常是經過對象的引用來調用方法,編譯以後經過對象來調用).
  • 只能在方法內部使用,表示對"調用方法的那個對象"的引用.
  • 若是在方法內部,調用同一個類的另外一個方法,則沒必要使用this,直接調用便可.
  • 須要返回當前對象的引用時,return this;.
  • 將當前對象做爲參數傳遞給其餘對象.
  • 在構造器中調用構造器(只能調用一個,且必須將構造器的調用至於最起始處).
  • static方法:沒有this的方法.

5.清理:終結處理和垃圾回收

  • finalize().
  • 對象可能不被垃圾回收.
  • 垃圾回收並不等於"析構".
  • 垃圾回收只與內存有關.
  • 引用計數:經常使用開說明垃圾收集的工做方式.
  • 複製式回收器:效率低(1,空間大;2,複製).
  • 標記-清掃 模式.

6.成員初始化

  • 局部變量必須進行初始化.
  • 類的數據成員(全局變量),基本類型會默認有一個初始值,對象引用會得到特殊值null.
  • 指定初始化:定義的時候直接賦值或經過方法調用賦值.

7.構造器初始化

  • 經過構造器來進行初始化(沒法阻止自動初始化的進行,它將在構造器調用以前發生).
  • 變量定義的前後順序決定了初始化的順序.
  • 靜態數據初始化:只有在第一個對象建立(或者第一次訪問靜態數據)的時候,纔會被初始化,僅執行一次.
  • 顯式的靜態數據初始化:靜態代碼塊.
  • 非靜態實例初始化:普通代碼塊(匿名內部類的chu'shi'hua).
  • 構造器沒有顯式地使用static,但也是靜態方法.
  • 對象的建立過程
    1.當詩詞建立對象或者類的靜態方法/靜態域首次被訪問時,Java解釋器查找類路徑,定位.class文件.
    2.載入.class,有關靜態初始化的全部動做被執行(首次加載時進行一次).
    3.用new操做符建立對象,在堆上爲對象分配足夠的存儲空間.
    4.存儲空間清零,爲對象中的全局變量賦值.
    5.執行全部出現於字段定義處的初始化動做.
    6.執行構造器.

8.數組初始化

  • 數組:相同類型的,用一個標識符名稱封裝到一塊兒的一個對象序列或基本類型數據序列.經過方括號下標操做符來定義和使用的.
  • 編譯器不容許指定數組的大小.
  • 初始化表達式:由一對花括號括起來的值組成.在這種狀況下,存儲空間的分配(等價於使用new)由編譯器負責.
  • 固有成員length,只能訪問不能修改.
  • 可變參數列表.

9.枚舉類型

  • 枚舉類型的實例是常量,按照命名慣例使用大寫字母表示(多個單詞用下劃線隔開).
  • 爲了使用enum,須要建立一個該類型的引用,並將其賦值給某個實例.
  • 編譯器自動添加toString(),ordinal()(聲明順序),values()(按聲明順序,產生由常量構成的數組)方法.
  • 與switch配合使用.

END數組

相關文章
相關標籤/搜索