java中使用try-catch-finally一點值得注意的事
阿新 • • 發佈:2019-01-24
我們知道,try負責圈定可能會出異常的程式碼;catch負責處理try中可能異常的處理,如記錄錯誤日誌,使業務能夠正常執行;finally負責資源釋放等善後工作,無論有無異常都必須要執行的程式碼,一般都是放在finally中的。如果catch和finally也會出現異常,那麼會是什麼效果呢?
try { // java.lang.ArithmeticException int a = 1 / 0; } catch (Exception e) { System.out.println("catch"); // java.lang.NullPointerException String value = null; System.out.println(value.length()); } finally { System.out.println("finally"); // java.lang.ArrayIndexOutOfBoundsException int[] array = {1, 2, 3}; System.out.println(array[6]); }
這段程式碼最終的執行結果是:會丟擲ArrayIndexOutOfBoundsException。try中程式碼出現異常,會執行對應的catch;
catch出現異常,會執行finally;如果finally也出現異常,由於沒有進行處理,就會直接拋給JVM。如果這裡沒有使用
finally塊,那麼會丟擲NullPointerException。
這也就是說:catch和finally中出現的異常也會直接丟擲,如果我們沒有進行處理,就會在執行時產生錯誤。這提醒我們,如果catch和finally也可能出現異常,那麼必須要再次使用try-catch進行處理。