2014年1月15日 星期三

OCPJP 證照考試重點技巧

java program


考題概念:


這份筆記主要是針對OCPJP SE6.0作的重點整理,由於考證照跟實務上的程式撰寫需要掌握的概念有不少差異,所以既使對java程式撰寫相當熟悉,也有必要針對證照考試做準備,以免白白浪費錢去報名,而差別有哪些呢?比方說寫程式時,不用特別注意語法錯誤,因為你的IDE通常已經幫你標記出有問題的地方了,而函數與語法在實務上我們並不會硬性的背下它們,而是參考相關技術文件。
另外OCPJP SE6.0會慢慢淘汰,新版的證照考試會加入實務程式撰寫,所以趁SE6.0還能考的時候把這份筆記分享給大家吧。
首先考題就大概三類

  • 語法:了解甚麼樣的程式碼會導致編譯錯誤
  • 例外:了解甚麼樣的程式碼會導致執行錯誤
  • 結果:執行正確,會輸出甚麼樣的結果

從網路上可以找到各類題型的標準答案,所以我想這篇筆記的重點不是提供標準答案,而是提供解題技巧和重點整理

 


細節
繼承與覆寫的題型
  • Java Override Rules:
    • 方法名稱不能修改(必須相同)
    • 若父類別丟出例外,子類別必須丟出此例外或者其子類別
    • 子類別方法回傳直要與父類別一致
    • 若父類別為final,子類別不可修改
    • 若父類別方法為static,子類別不可為non-static
    • 覆寫方法的回傳型態不可以是父類別中被覆寫方法的回傳值的父類別
  • 繼承
    • 先注意類別的成員(方法與欄位),其修飾存取字符所對應的權限是否能讓程式碼中的其他敘述存取
  • 覆寫
    • 注意覆寫方法是否符合覆寫規則

繼承與多型
  • 多型規則
    • 父類別型別變數可以參考子類別之實體
    • 並且透過晚期鏈結使用子類別的方法,來實現動態方法配置
    • 晚期鏈結只對方法有效,換言之,父類別型別變數參考了子類別之實體後,成員變數不會被子類別覆蓋

多執行緒程式
  • 多執行緒程式要注意是否有synchronized修飾方法
  • thread-safe是說不管執行緒如何執行,都不會破壞掉類別資料完整性。
  • 類別中存在的non-static method,即使宣告成synchronized,也無法避免多個類別實體同時使用non-staitc method(因為每個實體都有一個non-static method,我們若希望同一時間只有一個thread能使用類別方法,除了宣告成synchronized,還必須宣告成static

介面(Interface)
  • 介面預設的存取修飾字符為public,實作時要注意是否宣告為public,不可為default

建構式
  • 建構式的原則
    • 編譯器需要知道使用哪個建構式來建立父類別,然後才能建立子類別,以完成初始化的配置
    • 顯性的調用建構式:若子類別使用建構式,必須能正確呼叫父類別的建構式才能正確編譯
    • 使用super()呼叫父類別建構式時,super()敘述需擺在子類別建構式的第一行,否則無法編譯
  • 撰寫可編譯的程式
    • 一般情況下父類別沒有定義建構式,子類別也沒有定義建構式,那建立子類別實體時就會使用預設的建構式完成初始化
    • 若父子類別有定義建構式,會使得預設建構式不會被執行,因此需要告訴編譯器,父類別與子類別要使用哪個建構式來完成初始化
  • 介面預設為public,其成員函數只能是public,final ,static

例外(Exception)
  • 看到throw Exception子句,就要注意有沒有對應的catch/try
  • 若父類別丟出例外,子類別必須丟出此例外或者其子類別,反之亦然
  • 若方法或類別有丟出例外,必須有對應的catch/try block去接住其例外,否則無法編譯

泛型(generic)
  • String為final Class,在Java類別階層中沒有任何類別是他的子類別(final Class不能被繼承)
  • 因此以下敘述第二行無法編譯
    • 1. List<? extends String
    • 2. list.add("foo");     
    • 要讓第二行通過編譯須將第一行修改為List<String>
  • 限制泛型可以利用:
    • <? extends suprclass>限制泛型類別必須是superclass的子類別(含superclass)
    • <? super subclass>限制泛型類別必須是subclass的父類別(不含subclass)

靜態方法(static method)
  • 靜態方法不能參考super或者this
    • cannot use super in a static context,because suepr is non-static method.

變數初始化

1、整數類型(byte、short、int、long)的基本類型變量的默認值為0。

2、單精度浮點型(float)的基本類型變量的默認值為0.0f。

3、雙精度浮點型(double)的基本類型變量的默認值為0.0d。

4、字符型(char)的基本類型變量的默認為“/u0000”。

5、布爾性的基本類型變量的默認值為false。

6、引用類型的變量是默認值為null。,

7、數組引用類型的變量的默認值為null。春關鍵數組變量的實例後,如果沒有沒有顯示的為每個元素賦值,Java 就會把該數組的所有元素初始化為其相應類型的默認值。


集合(collection)
  • Set
    • HashSets decide equality based on equals() and hashcode()
    • Determining a match in a hashSets is a two step process:
      • Calculate hashCode, to find out which 'bucket the item should be in.
      • Compare each items in that bucket to see if they are equal to the item you want to add.
    • if the hashCode() method isn't overriden, object hashcode() method will be used.
      which will return a unique hashCode for every object.
      Each object added to its own bucket, thehere the equals() method will not return match.
    • hashCode is a number which is unique for all object.
      • Java has its own mechanism to generate hashCode.
      • You can override this hashCode() in your class
      • at times, hashCode can be same for two different object.
  • 兩個String Variable如果有相同的字串,其hashcode相同,但可能有不同的記憶體位址(利用new配置)
  • canont apply for-each to an Iterator
  • TreeSet用compareTo去決定是否add item,因此item必須實作Comparable

存取修飾(modification )
  • 可視範圍:
    • Public:任何位置
    • Protected:相同子類別中
    • Defalut:相同package中
    • private:相同類別
  • 最大存取權限要從外而內(class>filed,method)
james.shieh 的標籤:

沒有留言:

張貼留言

此部落格主要作為學習研究、心得分享,歡迎大家討論指教...