2008年4月30日 星期三

SCJP - 自修重點筆記與心得 (4)

<<1-5-2>>
非存取的成員修飾子(Nonaccess Member Modifiers)
  • 包含 final、abstract、transient、synchronized、native、strictfp、static。


Final 函式
  • final 關鍵字可以防止函式被子類別覆寫,而且通常被用來當成 API 的一部份。
  • 防止子類別覆寫函式也扼殺了許多 OO 的優勢,包含透過多型達到可擴充性。


Final 引數(Final Arguments)
  • 在函式宣告的括號中出現的變數宣告,就是函式引數(method arguments),函數引數基本上和區域變數一樣,所以可使用 final,例:
    public Record getRecord(int fileName, final int recordNumber) { ... }
    代表 recordNumber 變數在此函式內,不能被修改。


抽象函式(Abstract Methods)
  • 一個 abstract 函式是指該函式已經被宣告了,但還沒被實作,也就是它沒有函式的主體(method body)。
  • 在一個沒有宣告成 abstract 的類別放進一個抽象函式,是不合法的!可是一個抽象類別可不包含任何抽象函式。
  • 第一個抽象類別的具象子類別(concrete subclass)必須實作所有父類別的抽象函式。
    總覺得這段原文敘述有點怪,還是改為以下:
    當一具象類別(concrete subclass)繼承了抽象類別時,此具象類別必須實作所有父類別的抽象函式。
  • abstract 不可和 final、private 和 static 一起使用。
  • public abstract class A {
     abstract void foo();
    }
    class B extends A {
     void foo(int I) { }
    }
    這段程式碼是無法完成編譯的,因為 B 並未實作 A 的 foo() 抽象函式,而 foo(int I) 只是一個多載化函式(overloaded method,一個使用相同的識別字,但不相同的引數的函式)。
Synchronized 函式
  • synchronized 這個關鍵字是指讓函式一次只能被一個執行緒(thread)存取。

Native 函式
  • native 修飾子是指該函式被和平台相關(platform-dependent)的程式碼實作,通常是 C。
  • 只能用於函式,不可用於類別或變數。
  • 必須注意 native 函式的宣告必須以分號來結尾(就像抽象函式),也就是實作是省略的。
Strictfp 函式
  • strictfp 強迫浮點數(和其他浮點數運算)遵循 IEEE 754 的標準。
  • 優點是可確保每個平台所得到的結果是一致的,且可預測。
    缺點是如困底層的平台支援更精準的浮點數運算,則 strictfp 函式將沒辦法使用到此優點。
  • strictfp 可使用於類別及函式,但不可用於變數。

沒有留言: