74. throw 和 throws 的區別? 75. final、finally、finalize 有什麼區別? 76. try-catch-finally 中哪一個部分能夠省略? 77. try-catch-finally 中,若是 catch 中 return 了,finally 還會執行嗎? 78. 常見的異常類有哪些?
異常java
74. throw 和 throws 的區別?數據庫
throw:數組
throws:安全
75. final、finally、finalize 有什麼區別?指針
76. try-catch-finally 中哪一個部分能夠省略?code
答:catch 能夠省略orm
緣由:對象
更爲嚴格的說法實際上是:try只適合處理運行時異常,try+catch適合處理運行時異常+普通異常。也就是說,若是你只用try去處理普通異常卻不加以catch處理,編譯是通不過的,由於編譯器硬性規定,普通異常若是選擇捕獲,則必須用catch顯示聲明以便進一步處理。而運行時異常在編譯時沒有如此規定,因此catch能夠省略,你加上catch編譯器也以爲無可厚非。排序
理論上,編譯器看任何代碼都不順眼,都以爲可能有潛在的問題,因此你即便對全部代碼加上try,代碼在運行期時也只不過是在正常運行的基礎上加一層皮。可是你一旦對一段代碼加上try,就等於顯示地承諾編譯器,對這段代碼可能拋出的異常進行捕獲而非向上拋出處理。若是是普通異常,編譯器要求必須用catch捕獲以便進一步處理;若是運行時異常,捕獲而後丟棄而且+finally掃尾處理,或者加上catch捕獲以便進一步處理。繼承
至於加上finally,則是在無論有沒捕獲異常,都要進行的「掃尾」處理。
77. try-catch-finally 中,若是 catch 中 return 了,finally 還會執行嗎?
答:會執行,在 return 前執行。
代碼示例1:
/* * 若是catch裏面有return語句,finally裏面的代碼還會執行嗎? */ public class FinallyDemo2 { public static void main(String[] args) { System.out.println(getInt()); } public static int getInt() { int a = 10; try { System.out.println(a / 0); a = 20; } catch (ArithmeticException e) { a = 30; return a; } finally { a = 40; } } }
執行結果:30
代碼示例2:
package com.java_02; /* * 若是catch裏面有return語句,finally裏面的代碼還會執行嗎? */ public class FinallyDemo2 { public static void main(String[] args) { System.out.println(getInt()); } public static int getInt() { int a = 10; try { System.out.println(a / 0); a = 20; } catch (ArithmeticException e) { a = 30; return a; } finally { a = 40; return a; //若是這樣,就又從新造成了一條返回路徑,因爲只能經過1個return返回,因此這裏直接返回40 } } }
執行結果:40
78. 常見的異常類有哪些?