天天看點

異常處理

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();