嗯……面試考到了這個,又是一個如無心外html
那麼接下來就總結吧java
1、什麼是異常程序員
程序運行過程當中發生的異常事件。面試
RuntimeException一般是由於編程員由於疏忽沒有檢查而引發的錯誤。 編程
2、Exception和Error的區別緩存
Exception:ide
1.能夠是可被控制(checked)或者不可控制(unchecked);spa
2.表示一個由程序員致使的錯誤;.net
3.應該在應用程序級被處理;code
Error:
1.老是不可控制的(unchecked);
2.常常用來表示系統錯誤或者底層資源錯誤;
3.若是可能的話,應該在系統級被捕捉;
3、throw、throws、try...catch...
①throw
②throws
③try...catch...finally...以及語句中出現return的狀況
④自定義異常
①
throw是語句拋出一個異常,語法:
throw e
例子:
String a = "abcd";
if(a.length()>5) {
throw new NullPointerException(); //具體的異常需與方法內容相關,不然編譯不經過
}
if(a.length()>5) {
throw new IndexOutOfBoundsException();
}
if(a.length()>5) {
//throw new IOException(); 編譯不經過
}
throws是方法拋出一個異常,語法:
public void doSomething() //具體方法
throws Exception1, Exception2{}//拋出的異常
//示例
public static int calculate(int a, int b) throws ArithmeticException {
int c = a/b;
return c;
}
throw和throws的總結:
throw | throws | |
定義 | 語句拋出異常 | 聲明異常/方法拋出異常 |
語法 | throw e | [方法] throws e1,e2 |
位置 | 用於方法內 | 位於方法聲明後 |
使用狀況 | 不能單獨使用, 一般與try...catch搭配使用 |
可以單獨使用 |
編譯 | 對方法中可能出現的異常進行捕獲 | |
運行 | 拋出異常實例 | 只有出現異常時才拋出 |
try...catch...finally
若是如下部分中出現return,其返回結果將是如何?
public static int method(int a,int b) {
try {
int c = a/b; //1
return 1; //2
} catch (Exception e) {
System.out.println("catch"); //3
return 2; //4
} finally {
System.out.println("finally"); //5
return 3; //6
}
}
try、catch中任一部分含有return:首先執行try\catch語句中的內容,緩存語句中return的值,最後執行finally中的內容。
所以,
①當finally中有return語句時,執行順序爲
· 沒有異常時:
//執行順序 1 → 2(緩存return的值)→5 → 6 (更改了return的值),所以打印結果爲
finally
3
· 有異常時:
//執行順序爲:3 → 4(緩存return的值爲2) → 5 → 6(更改緩存的return值爲3)
catch
finally
3
② 當finally沒有return語句時
· 沒有異常時:
//執行順序:1 → 2(緩存return的值)→ 5 → 返回return的值 finally 1
· 有異常時
//執行順序:3 → 4(緩存return的值)→ 5 → 返回return的值 finally 2
若是返回的不是基本數據類型,可參照這篇文章:https://blog.csdn.net/zoujian1993/article/details/45362931
try..catch..中涉及運算:http://www.javashuo.com/article/p-yowfqdjg-a.html
涉及的堆和棧:https://blog.csdn.net/pt666/article/details/70876410/