【Java】異常 —— throw, throws, try catch 相關內容

嗯……面試考到了這個,又是一個如無心外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
View Code

 · 有異常時:

//執行順序爲:3 → 4(緩存return的值爲2) → 5 → 6(更改緩存的return值爲3)
catch
finally
3
View Code

 

② 當finally沒有return語句時

· 沒有異常時:

//執行順序:1 → 2(緩存return的值)→ 5 → 返回return的值
finally 
1
View Code

· 有異常時

//執行順序:3 → 4(緩存return的值)→ 5 → 返回return的值
finally 
2
View Code

 

若是返回的不是基本數據類型,可參照這篇文章: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/

相關文章
相關標籤/搜索