1. 程式人生 > 實用技巧 >java基礎篇——異常處理

java基礎篇——異常處理

異常

1概述

程式有可能出現問題,我們把出現的問題就稱為異常.

2主函式處理異常的方式:

A:主函式手動處理方式的方式.(異常處理機制)

B:採用的是jvm的預設處理機制.

把異常的資訊列印輸出到控制檯.

3異常的體系結構

AThrowable 異常的超類

Error:

我們不可解決的問題。面對此種問題,我們無能為力。

比如說:類不存在或者記憶體溢位。

Exception:

在執行時執行出現的一些不正常的狀況,這個狀況我們通過修改程式碼,是可以解決的。

舉例:騎自行車回家。

走不好的路,車爆胎,是異常。

發洪水,路給沖斷了,是錯誤。

2020年,疫情這個東西來了,就是錯誤。

頭疼,感冒了。是異常。

B:通過分析,發現我們要學習異常。

4異常的處理方式

A:try...catch...finally

**基本格式

try{

//有可能出現異常的程式碼

}catch(異常類 名字){

//處理異常的程式碼

}finally{

//一定會被執行的程式碼,如釋放資源

}

**變形格式

try...catch

try...catch...catch...catch...

try...finally

try...catch...finally

try...catch...catch...finally

**finally的特點

它永遠都會被執行.

有一個特殊情況:如果在程式碼中jvm退出系統而來,那麼finally

就不會被執行.

**面試題

***final,finally,finalize區別?

final用於宣告屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。 內部類要訪問區域性變數,區域性變數必須定義成final型別,例如,一段程式碼……

finally是異常處理語句結構的一部分,表示總是執行。

finalizeObject類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉檔案等。JVM不保證此方法總被呼叫

***

try{

System.out.println("aaa");

System.out.println(10/0);//ArithmeticException

}catch(Exception e){

System.out.println("bbb");

return;

}finally{

System.out.println("ccc");

}

請問這個程式執行結果?

aaa

bbb

ccc

B:throws,throw 丟擲

區別:------一旦執行throw語句,就結束功能!

**使用位置

throws在方法的宣告上使用

throw在方法體內使用

**使用格式

throws後面跟的使用異常的類名

throw後面跟的是物件.格式:throw new 異常類名(引數);

**聯絡

throws不一定有throw

throw一定有throws

C:兩種處理方式用哪種呢?<何時使用try,何時使用throw?>

**自己能夠處理的就自己處理.

**自己實在處理不了的交呼叫者.

5Exception的分類

A:Exception

這種型別的異常,如果丟擲,在編譯的時候就會檢查.此類異常需要編寫針對性的處 理程式碼進行處理。

B:RuntimeException

這種型別的異常,如果丟擲,在編譯的時候不檢查,執行的時候直接處理.

異常必須通過修改程式碼才能解決.所以,一般針對這異常,我們不處理,jvm

6、自定義異常

除數不能為負數.

1:繼承自Exception或者RuntimeException.必須的!

2:在自定義異常裡面,提供一個帶參構造

 1 class MyException extends Exception{
 2 
 3 MyException(){}
 4 
 5 MyExcepiton(String message){
 6 
 7 super(message);
 8 
 9 }
10 
11 }
12 
13 class Demo{
14 
15 int div(int a,int b)throws RuntimeException{
16 
17 if(b<0){
18 
19 throw new MyException("除數不能為負數!");
20 
21    }
22 
23  }
24 
25

7、異常使用細節

A:我們為什麼要使用trycatch語句進行異常處理呢?只有在某個功能上可能出現某種隱患,並且在該功能的宣告上進行了描述時,我們才能夠使用此種針對性的處理方式。

B:如果一個功能丟擲多個異常,那麼在呼叫該功能時,需要有多個catch進行每一個異常的針對性處理,如果多個catch中有父類異常,一定要定義在最下面,否則編譯失敗。

C:函式內丟擲異常,函式上一定要使用thows進行標識,呼叫者如果呼叫了該函式,就需要對其進行處理(try或者丟擲),否則編譯失敗。