1 java異常的分類
2 java處理異常的兩種方式
2.1 try…catch…finally
文法:
使用try結構擴充可能出錯的代碼塊, 緊接try部分必須跟随catch部分或finally部分
try{
可能出錯的代碼塊…..
}catch(jdk定義錯誤類型或自定義錯誤類型 變量名){
處理語句
}finally{
}
finally塊必須與try塊連用,finally塊作用無論try中代碼是否出錯,finally總會執行
兩種變形:
第一種:try..catch...finally允許嵌套;
第二種:多重catch塊,catch中的錯誤類型,必須錯誤範圍從小到大;
練習:
接收使用者輸入的兩個整數,要求即使使用者輸入除數是0,我們程序也不終止;
總結:
int test1(){
int res=0;
try{
return res;
res=3;
//調用test1()方法後傳回0,原因return語句直接傳回目前res為0式的值;
int test2(){
int res=0;
return res;
res=6;
return res;
//調用test2()方法傳回6,原因finally最終執行模闆,所有finally中return語句最後執行;
2.2 java異常處理的第二種方式
throw, throws
throw表示強制抛出異常,用于違反業務規定,手工抛出異常;
throws用于在方法上聲明異常,當調用該方法時,必須處理異常;
throw new 異常類(“錯誤描述”);
throws文法
在方法聲明最後使用throws語句聲明該方法包含某個異常;
注意:
throws 中的異常類型分為非檢查異常以RuntimeException或其子類為主,這種異常方法被調用,可以不處理方法中聲明的異常;
除了RuntimException異常類型外其他,throws後面聲明的異常為檢查異常,這些異常方法被調用必須處理方法中聲明的異常;
例如:
import java.io.IOException;
public class Demo4 {
int age;
//throws用于在方法上聲明異常,當調用該方法時,必須處理異常;
public void setAge(int age)throws IOException {
if(age<1){
//throw表示強制抛出異常,用于違反業務規定,手工抛出異常;
throw new IOException("年齡輸入錯誤");
}
this.age = age;
}
public static void main(String[] args) {
Demo4 m4=new Demo4();
try {
// //執行方法
m4.setAge(-8);
} catch (IOException e) {
e.printStackTrace();
System.out.println("over...");
/* 可以在調用時,使用throws再次抛出異常
public static void main(String[] args)throws Exception{
//執行方法
m4.setAge(-8);
}*/
3 自定義異常
作用,用于企業中将錯誤資訊進行相應的格式轉換;
步驟:
① 自定義一個繼承異常的自定義類;
② 在構造方法中輸出自定義格式的錯誤資訊;
③ 在對應的方法中使用throw和throws語句使用自定義異常類;
//① 自定義一個繼承異常的自定義類;
class MyExp extends Exception{
//② 在構造方法中輸出自定義格式的錯誤資訊;
public MyExp(String msg){
//通過父類處理自定義異常資訊
super(msg);
//③ 在對應的方法中使用throw和throws語句使用自定義異常類;
public class Demo5 {
public static void say(int x)throws MyExp{
if(x<10)
throw new MyExp("你咋不帶嗎?");
say(5);
} catch (MyExp myExp) {
myExp.printStackTrace();