Java try-catch、throw和throws的幾點想法


以前寫代碼,很少用到異常,后來發現這種習慣是錯的。異常也是一種信息,並不是錯誤。

1:先寫個簡單的類:

package com.exception.demo;

public class Main {
    public static void main(String[] args) {
        Main main = new Main();
    }

    public void methodTry() {

    }

    public void methodThrow() {

    }
}

初始環境就是這么簡答。

2:下面給方法methodTry加上方法主體:

    public static void main(String[] args) {
        Main main = new Main();
        main.methodTry();
    }

    public void methodTry() {
        int a=10;
        int b=0;
        int c=a/b;
    }

剛開始學代碼的時候都會寫這個方法,會拋出一個異常:

  

控制台很清楚的告訴我們,被除數不能為0.但是如果我們想自己獲取這個異常,然后做些操作呢?比如說 如果這個方法體有問題,我就做一個輸出。

    public void methodTry() {
        try {
            int a=10;
            int b=0;
            int c=a/b;
            System.out.println(c);
        } catch (Exception e) {
            System.out.println("這個方法體有問題:"+e.getMessage());
        }
        
    }

這個時候就用到了try-catch,手動的捕獲這個異常,然后進行我們需要的操作。畢竟異常分很多種,並不是所有的異常都是我們不需要的。比如說對用戶登錄來說,登錄成功 登錄失敗兩種結果,登錄失敗又分為重復登錄,賬號密碼不匹配等。我們可以把這些失敗全都寫成Exception。當成功的時候就直接返回,失敗的時候拋出異常,這個可比我們寫好多返回值簡單多了。

接着說try-catch

  

我們手動的捕獲了這個異常。上面的代碼告訴我們,當try-catch塊中有異常時,異常后面的代碼是不會執行的。try-catch還有什么好處?回滾。

3:throw

    public static void main(String[] args) {
        Main main = new Main();
        main.methodThrow();
    }



    public void methodThrow() {
        throw new Exception("這里有異常");
    }

其實當我簡單的拋出個異常的時候,throw new Exception()這里會報錯,現在看一個報錯信息:

  

顯示讓我們選擇是throws 還是try-catch。

我們寫好的throw是什么意思呢? 其實跟a/0是一個意思,都是拋出一個異常,只不過一個是jdk已經定義好的異常,被除數不能為0.一個是我們手動拋出的異常。

先用try-catch試試看

  

    public void methodThrow() {
        try {
            throw new Exception("這里有異常");
        } catch (Exception e) {
            System.out.println("MethodThrow:"+e.getMessage());
        }
    }

  

重點在於手動拋出異常后,我們要在catch中進行處理,在catch中寫我們的部門邏輯代碼。

4:throws

剛才我們選擇的是try-catch,現在選擇throws

    public static void main(String[] args) throws Exception {
        Main main = new Main();
        main.methodThrow();
    }

    public void methodThrow() throws Exception {
        throw new Exception("這里有異常");
    }

方法methodThrow throws Exception之后,他的父類就面臨着兩種情況,要么try-catch 要么throws這個異常。這種情況跟methodThrow中手動拋出異常遇到的問題是一樣的。

看來可以這么理解:

  throw是手動拋出異常,跟 被除數不能為0 數組下標越界等異常一樣,都是異常。

  try-catch是在catch中手動捕獲異常,然后進行一些操作。比如說輸出異常信息,打印錯誤日志等。

  throws是往上級拋出異常,我的方法methodThrow有異常,但是在這個方法中我不進行處理了,讓上級進行處理吧。然后就跑到main函數那去了。對main函數來說,可以throws讓系統進行處理,也可以自己處理這個異常啊。main.methodThrow()和a/0 、throw new Execption()沒什么區別,都是有異常。

其實可以整體的寫:

    public static void main(String[] args){
        Main main = new Main();
        try {
            main.methodThrow();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    public void methodThrow() throws Exception {
        throw new Exception("這里有異常");
    }

方法中的異常,到main函數中再進行處理。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM