1. 程式人生 > >java中使用try-catch-finally一點值得注意的事

java中使用try-catch-finally一點值得注意的事

我們知道,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進行處理。