SCJP 認證考試「Sun Certified Programmer for Java 2 Platform 5.0」認證測驗是針對具備Java程式語言使用經驗的程式設計師所提供的。獲得此認證即可證明程式設計師了解Java程式語言的基本語法與架構,並能夠使用J2SE 5.0建立執行於伺服器及桌面系統的Java技術應用程式。
Details
Delivered at: 全球Prometric授權考試中心
Prerequisites: 無
Other exams/assignments required for this certification: 無
Exam type: 複選題與拖放題
Number of questions: 72
Pass score: 59% (72個問題中的43個問題)
Time limit: 175分鐘
語言
英文版
日文版
Chinese (Traditional)
Chinese (Simplified)
德文版
韓文版
Portuguese (Brazilian)
西班牙文版
學習資格
無
測驗目的
第1部分:宣告、初始化及定義範疇(Scoping)
開發宣告類別(包括抽象及所有巢狀類別的形式)、介面、及enum的程式碼,並包含套件及import宣告(包含static import)的正確用法。
開發宣告介面的程式碼。開發實作或延伸一或多個介面的程式碼。開發宣告抽象類別的程式碼。開發延伸抽象類別的程式碼。
開發宣告、初始化並使用primitive、陣列、enum及物件作為static、實例及本地變數使用的程式碼。此外,使用合法的識別符作為變數名稱。
開發宣告static與non-static方法的程式碼,如果適合的話,使用符合JavaBeans命名標準的方法名稱。此外,開發宣告及使用可變長度引數清單的程式碼。
根據假設的程式碼範例,判斷某個方法是正確正確覆寫或過載另一個方法,並識別對於方法而言合法的傳回值(包含共變數傳回值)。
根據一組假設的class及superclass,為一或多個類別開發建構元。根據給定的類別宣告,判斷是否會建立預設的建構元,如果會,請判斷該建構元的行為。根據給定的巢狀或非巢狀類別列表,撰寫實例化類別的程式碼。
第2部分:流程控制
開發實作if或switch宣告的程式碼,並識別對這些宣告而言合法的引數。
開發實作所有loop及iterator類型的程式碼,包括for、loop的強化 (for-each)、do、while、labels、break及continue的使用;並解釋在loop執行時及執行後,loop計數器變數所接收的值。
開發使用assertion的程式碼,並辨別使用assertion是否適合。
開發使用例外及例外處理子句的程式碼(try、catch、finally),並宣告拋棄例外的方法及覆寫方法。
確認在程式碼片段中的特定點所發生之例外的效果。附註,此例外可能是執行時期例外、checked例外或是一項錯誤。
識別會產生下列任何thrown的情況:ArrayIndexOutOfBoundsException、ClassCastException、IllegalArgumentException、IllegalStateException、NullPointerException、NumberFormatException、AssertionError、ExceptionInInitializerError、StackOverflowError或NoClassDefFoundError。了解哪一個是由虛擬機器拋出的,並識別其他會以程式方式拋出的情況。
第3部分:API內容
開發使用primitive wrapper class (例如Boolean、Character、Double、Integer等),及/或autoboxing & unboxing的程式碼。討論String、StringBuilder及StringBuffer類別之間的差異。
根據包含瀏覽檔案系統、讀取檔案、或寫入檔案的情況的案例,使用下列java.io的類別開發正確的解決方案(有時可以結合類別):BufferedReader、BufferedWriter、File、FileReader、FileWriter及PrintWriter。
使用下列java.io的API開發序列化及/或反序列化物件的程式碼:DataInputStream、DataOutputStream、FileInputStream、FileOutputStream、ObjectInputStream、ObjectOutputStream及Serializable。
使用java.text套件中的標準J2SE API,針對某個地區正確格式化或parse日期、數字及幣值;另外,根據假設的案例,判斷比較正確的方法是使用預設的或特定的地區設定(locale)。描述java.util.Locale類別的目的與使用方法。
撰寫使用java.util及java.util.regex套件中標準J2SE API的程式碼,以格式化或parse字串或串流(stream)。針對字串,撰寫使用Pattern及Matcher類別及String.split方法的程式碼。認識及使用正規表示法型態以進行計算(限於: (dot)、* (star)、+ (plus)、?、\d、\s、\w、[]、())。*、+及?的使用 將受限於貪婪的quantifier,而括弧運算子只會用於聚集機制,而不會在運算時擷取內容。針對串流,撰寫使用Formatter及Scanner類別及PrintWriter.format/printf方法的程式碼。認識以及在格式化字串中使用格式化參數(限於%b、%c、%d、%f、%s)。
第4部分:同時性
使用java.lang.Thread及java.lang.Runnable撰寫程式碼以定義、instantiate及開始新的執行緒。
認識執行緒可以存在的狀態,並識別可將執行緒從一個狀態傳送至另一個狀態的方法。
根據假設的案例,撰寫正確運用object locking以保護static或instance變數的程式碼,以避免同時存取的問題。
根據假設的案例,撰寫正確使用wait、notify或notifyAll的程式碼。
第5部分:物件導向概念
開發在類別中實作緊密封裝、鬆散結合(coupling)、及高度結合(high cohesion)的程式碼,並描述其優點。
根據假設的案例,開發展示多形的使用方法的程式碼。此外,判斷何時需要casting,並識別與物件參照casting有關的編譯器與 執行時期錯誤。
解釋修飾子繼承建構元、實例或靜態變數、及實例或靜態方法的效果。
根據假設的案例,開發宣告及/或呼叫覆寫或過載方法的程式碼,以及開發宣告及/或呼叫 superclass 或過載建構元的程式碼。
開發實作「is-a」及/或「has-a」關係的程式碼。
第6部分:收集/泛型
根據假設的設計案例,判斷應使用哪些collection類別及/或介面以正確實作該設計,包括Comparable介面的使用。
辨別正確與錯誤的corresponding hashCode及equals方法的覆寫,並解釋==與equals方法的不同。
撰寫使用泛型版本Collections API的程式碼,特別是Set、List及Map介面及實作類別。識別非泛型Collections API的限制,以及如何refactor程式碼以使用泛型版本。
開發在類型/介面宣告、實例變數、方法引數及傳回值中正確使用型別參數的程式碼;並撰寫泛型方法或使用萬用字元型別的方法,並了解這兩種方法的相似處與不同處。
使用java.util套件的功能撰寫程式碼,以排序操作清單、執行二進位搜尋,或將清單轉換為陣列。使用java.util套件的功能撰寫程式碼,以排序操作陣列、執行二進位搜尋,或覆寫陣列至清單。使用java.util.Comparator及java.lang.Comparable介面以影響清單及陣列的排序。此外,識別primitive wrapper類別的「natural ordering」效果,以及java.lang.String的排序效果。
第7部分:基本原理
根據假設的程式碼範例及案例,使用正確的存取修飾子、套件宣告、及import宣告來撰寫程式碼,與範例中的程式碼互動(透過存取或介面)。
根據類別及命令列的範例,判斷預期的執行時期行為。
判斷當物件參照及primitive值傳遞至在參數中執行指派或其他修改作業的方法時所產生的效果。
根據假設的程式碼範例,確認某物件在某個點將成為合法可供垃圾收集,並判斷何者受到垃圾收集系統的保證,以及何者不受保證。識別System.gc及finalization的行為。
根據部署至JAR檔案內部及外部的類別的完全合格名稱,為該類別建構適當的目錄架構。根據假設的程式碼範例及classpath,判斷classpath是否將允許程式碼成功編譯。
撰寫正確套用適當運算子的程式碼,包括指定運算子(限於:=、+=、-=)、計算運算子(限於:+、-、*、/、%、++、–)、關係運算子(限於<、<=、>、>=、==、!=)、instanceof運算子、邏輯運算子(限於:&、|、^、!、&&、||),及條件運算子( ?: ),以產生希望的結果。撰寫判斷兩個物件或兩個primitive的相等性的程式碼。
來源:Sun 官方網站