OCJP(1z0-808)題庫解析(1)
下文所有字元僅為個人觀點,如有錯誤懇請指正。
All the characters below is a personal opinion, if there is any mistake, please correct me.
1)類中的靜態成員屬於類本身。
2)String類的concat方法需要返回值。
3)考核java異常機制:
- 改進專案結構,分離錯誤處理程式碼與正常函式。
- 選擇處理錯誤的位置。
- 自定義異常。
4)this關鍵字表示呼叫構造方法,題中this方法沒有引數,而類中沒有無參構造器從而發生錯誤。
5)B選項super方法在main函式中調用出錯(靜態方法只能呼叫靜態方法),且引數應為n1與n2
C選項子類使用父類預設構造方法定義出錯。
E選項非靜態方法且靜態方法不能繼承。
6)關於日期的格式。
7)略。
8)ISO_DATE_TIME精確到時間。
9)args[0]為用控制檯編譯時候傳入的第一個引數。
10)11)略。
12)這裡的indexOf是屬於ArrayList類的方法,功能如下:
- 返回此列表中首次出現的指定元素的索引,或如果此列表不包含元素,則返回 -1。更確切地講,返回滿足 (o==null ? get(i)==null : o.equals(get(i))) 的最低索引i ,如果不存在此類索引,則返回 -1。
- 是否包含元素不是根據值是否相等判定,而是根據地址的比較。
13)Super
1.普通的直接引用,super相當於是指向當前物件的父類,這樣就可以用super.xxx來引用父類的成員。
2.子類與父類同名方法的區別呼叫。
3.引用父類的構造器,例如super(引數),需要注意的是此語句只能出現在子類構造器的第一條。
14)略。
15)知識點:一個類有唯一的私有構造器。
16)講真C和D都能執行,至於正確答案為什麼是C,以及為什麼最後需要丟擲總的異常類有待考究(或許為了預防其他異常)。
17)略。
18)switch語句規範。
19)Product p3建立了一個引用,之後初始化的過程中,將這個引用指向了p1的記憶體地址。p1和p3共同引用一個記憶體地址(引用相等),此時對p3或者p1進行的操作都會反映在兩者身上。
物件的“==”與equals(沒經過重寫,繼承於object基類)方法比較的都是記憶體地址。
20)關於java基本型別以及其預設值:
- boolean false
- char '\uoooo'(null)
- byte (byte)0
- short (short)0
- int 0
- long 0L
- float 0.0f
- double 0.0d
21)關於丟擲異常的方式:
- println方法:普通預設toString方法將列印異常名以及異常詳細訊息(無訊息不將只打印異常),getMessage方法只會列印異常詳細訊息(無訊息列印null)。
- printStackTrace方法:將列印異常的棧軌跡(以紅色字元列印toString的內容以及報錯位置)。
22)23)24)25)26)27)略。
28) replace方法返回替代後的字串需要變數接收。
29)關於異常的處理方式:
- 捕獲:通過try、catch、finaly關鍵字的語句塊捕獲處理檢查性異常。
try{ // 程式程式碼 }catch(異常型別1 異常的變數名1){ // 程式程式碼 }catch(異常型別2 異常的變數名2){ // 程式程式碼 }finally{ // 程式程式碼 }
- 丟擲:處理不了的異常或者要轉型的異常,在方法的宣告處通過throws語句宣告異常throw關鍵字丟擲異常。
public class className { public void withdraw(double amount) throws RemoteException, InsufficientFundsException { // Method implementation } //Remainder of class definition }
30)31)32)略。
33)關於foreach迴圈的語法糖(Syntactic Sugar)。
34)略。
35)pdf中解析說的很清楚,就翻譯一下:當一個抽象類被繼承的時候,子類往往實現了其父類的所有抽象方法,如果不這麼做,子類必須也為抽象類。
36)二維陣列length方法返回行數。
37)物件"="是更換引用地址,nums1=nums2;使nums1的引用指向了nums2的記憶體地址,與之前的引用地址(包括限制的長度)不再有關聯。
38)引數生命週期。
39)見第20提題解析。
40)41)略。
42)答案錯誤,應該選擇B。
43)關於Java8的lambda表示式與函式式介面的應用。
44)見第29題對異常的處理方式。
Runtime Exception:
在定義方法時不需要宣告會丟擲runtime exception; 在呼叫這個方法時不需要捕獲這個runtime exception(被JVM處理);runtime exception是從java.lang.RuntimeException或java.lang.Error類衍生出來的。 例如:nullpointexception,IndexOutOfBoundsException就屬於runtime
exception。
Exception:
定義方法時必須宣告所有可能會丟擲的exception; 在呼叫這個方法時,必須捕獲它的checked exception,不然就得把它的exception傳遞下去;exception是從java.lang.Exception類衍生出來的。例如:IOException,SQLException就屬於Exception。
46)args[0]是用命令列編譯執行java程式時,傳入的第一個引數。
47)Java運算子優先順序
48)StringBuilder的append方法:
StringBuilder sb=new StringBuilder("abc");
sb.append("123");
System.out.println(sb);//輸出abc123
insert方法:
StringBuilder sb=new StringBuilder("abc");
sb.insert(0,"123");//第一個引數是位置
System.out.println(sb);//輸出123abc
49)trim方法返回值需要變數來接收。
50)略。