Java項目實戰開發Day15 2020-04-09

內容

詳細請看:http://www.lxweimin.com/p/7cf0611738b1

1.異常簡介
2.常見異常
3.trycatch
4.throws
5.自定義異常

一.異常簡介

當程序出現異常情況時,如果我們沒有處理,那么程序會直接終止運行,也就是崩潰。但是我們不知道是哪里出了問題。所以為了解決這個問題,就要使用“異常”。
注意:錯誤是和異常是有區別的,錯誤不能被處理,只能退出JVM,而異常是可以處理的。兩者都繼承Throwable。

異常繼承結構圖(蘊含與錯誤關系)

二.常見異常

常見異常有
空指針異常NullPointerException
類型轉換異常ClassCastException
數組越界IndexOutOfBoundsException
等等

三.trycatch

可以使用try catch捕獲異常

1.注意點

①當try代碼塊里面出現異常之后,后面的代碼不會執行。
所以②不要讓try包裹太多的內容,雖然try可以嵌套,但是最好不要多層嵌套。這樣代碼結構會混亂,可讀性會變差。如果非要嵌套,那最多弄兩層就夠了。
其實③catch可以寫多個,所以沒必要搞嵌套
即try{
}catch(){
}catch(){
}finally{
}

2.finally

這里finally是釋放資源。不管有沒有異常,finally里面的東西一定會執行。
注意:①
一般需要釋放文件、網絡和數據庫資源的時候需要用finally,就是哪些代碼必須要執行,就把這些代碼放在finally里面。
②Java只會自動釋放在堆或者棧上的資源,不會釋放外部資源。比如打開文件之后,出現了異常,那么文件可能不會關閉,這里Java不會自動關閉文件的
③finally里面也可以進行trycatch,比如文件可能也關閉不了,就在finally里面trycatch一下。

3.使用格式

        try {
            
        }catch() {
            
        }catch() {
            
        }finally {
            try {
                
            }catch() {
                
            }
        }

4.注意點(續)

④當有多個catch的時候,按照子類到父類的順序進行捕獲,如果父類的異常捕獲在前,那么就會攔截子類的catch。
⑤但是很多情況我們不太會關心具體是捕獲什么異常只是關心異常的處理,就可以使用所有異常的父類Exeption來捕獲即可。打印出來的內容其實也是具體的異常。這樣會方便很多,而且代碼也會更加簡潔。

四.throws

除了使用trycatch,也可以使用throws拋出異常,后面可以是拋出具體的異常,也可以直接拋出Exception

1.何時用

某個方法完成某個功能,當執行時可能出現異常,這種異常需要調用者自己決定該如何處理,也就是說程序員自己不知道,不確定該怎么處理,就使用throws拋出異常

2.使用示例

import java.io.*;
import java.util.*;

class Test{
    public void show() throws IOException{
        FileReader fr = null;
    }
}

public class 測試程序   {                                                                                                             
               
    public static void main(String[] args)    {
    
        Test t = new Test();
        try {
            t.show();
        }catch(IOException e) {
            e.printStackTrace();
        }    
        
    }

}

五.自定義異常

1.使用

1.如果是編譯時異常:直接繼承Exception
2.如果是運行時異常:直接繼承RuntimeException
當然也都可以籠統繼承Exception

2.注意點

自定義異常里面一般提供兩個構造方法,其中一個是無參的,另外一個傳字符串,并且在構造函數里面執行super(傳入的字符串)
(這個字符串就是出現異常的時候提示的內容)

3.使用示例

import java.io.*;
import java.util.*;

class Test{
    //登錄方法
    //不允許首字母是數字1
    public void login(String name,String pwd) throws LoginException {
        if(name.startsWith("1")) {
            //自己定義一個異常
            LoginException e = new LoginException("用戶名不能以1開頭");
            throw e;
            //或者直接
            //throw new LoginException("用戶名不能以1開頭");
        }
    }
}

class LoginException extends Exception{
      public LoginException() {
          
      }
      public LoginException(String s) {//字符串是提示的內容
          super(s);
      }
    
}
public class 測試程序   {                                                                                                             
           
    
    public static void main(String[] args)    {
    
        Test t = new Test();
        try {
            t.login("1Jack", "123");
        }catch(LoginException e) {
            e.printStackTrace();
        }

    
        
    }

}
輸出結果

總結

收獲頗豐!尤其是對throws和自定義異常的理解更透徹了!

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容