try-catch-finally的執行過程以及部分面試問題
阿新 • • 發佈:2019-02-08
try-catch-finally的執行過程
在Java程式碼編寫過程中,進行會使用到try-catch-finally,來對異常進行捕獲並進行處理,那麼try-catch-finally中的執行過程究竟是怎樣的,我們可以通過以下程式碼來驗證!下列為結果;
- 不管有沒有捕獲到異常,finally中的程式碼塊均會被執行
- finally是在return之後執行的,程式在執行完return之後,會將值儲存起來,當執行完finally中的程式碼塊之後,再將return的值進行返回
- *如果finally中存在return時,會導致最終返回的結果,就是finally中的值,而不會是try或者catch中的值
- 如果在finally中存在return時,會導致程式提前退出
程式碼
package com.test.demo;
public class Demo_03 {
public static void main(String[] args) {
System.out.println("tcf:" + tcf());
}
public static int tcf() {
String test_null = null;
/** 當try與catch中均有return時,finally依舊執行 :輸出 try,finally,返回1**/
/*
try {
System.out.println("try");
return 1;
} catch (NullPointerException e) {
System.out.println("catch");
return 2;
} finally {
System.out.println("finally");
}
* */
/**-------------------------------------------------------------------------------------
當try與catch中均有return時,finally依舊執行 :輸出 try,catch,finally,返回2 **/
/*
try {
System.out.println("try");
System.out.println(test_null.equals("123"));
return 1;
} catch (NullPointerException e) {
System.out.println("catch");
return 2;
} finally {
System.out.println("finally");
}
*/
/** -------------------------------------------------------------------------------------------
當try與catch,finally中均有return時,finally依舊執行,並輸出finally返回的值 :輸出 try,catch,finally,返回3**/
try {
System.out.println("try");
System.out.println(test_null.equals("123"));
return 1;
} catch (NullPointerException e) {
System.out.println("catch");
return 2;
} finally {
System.out.println("finally");
return 3;
}
}
/** 綜述,不管有無異常,只要存在finally,那麼finally均會執行,且finally中有return時,會返回finally中return的值,且finally是在return之後執行的,只是會把finally之前的return的值儲存起來,等執行結束後再進行返回**/
}
安卓中的異常分為什麼異常,最常見的異常有哪些
可以分為兩種:Error異常以及Exception異常,Excption又分為一般異常和常見異常,Exception一般為程式碼邏輯異常,通常使用try-catch-finally來對其進行捕獲,而Error異常一般是JVM異常,通常情況下是不可捕獲處理,難以恢復的異常。
一般常見異常為:
- 空指標異常:NullException –>通常出現在呼叫了未初始化的物件,導致程式找不到該物件的地址造成的異常
- 記憶體溢位:OutOfMemoryExcpetion–>通常出現在當前佔用的記憶體資源加上申請的記憶體資源超過了虛擬機器最大記憶體限制的時候就會丟擲這個異常,百分之八十的記憶體溢位都是Bitmap載入大圖片以及陣列物件使用不當造成。
- 強制轉換異常:ClassCastException–>通常出現在類與類之間進行強制轉換時,拋的異常。比如將TextView強制轉換為Button時,就會拋該異常
- 陣列越界異常:ArrayIndexException–>通常出現在使用陣列時,呼叫了超出陣列自身長度的item,導致丟擲該異常
- 程式無響應異常:Application Not Responding –>通常出現在主執行緒中有太多的耗時操作,或者按鍵超過5秒未響應,廣播超過10s未完成執行等。