18.異常.md

1.try...catch

2.異常了的繼承機制

2.1基本概念

2.2經常使用異常

public static void main(String[] args) {
        //
        try {
            int a = Integer.parseInt(args[0]);
            int b = Integer.parseInt(args[1]);
            int c = a / b;
            System.out.println("輸入的兩個數相除結果爲: " + c);
        } 
        //IndexOutOfBoundsException
        catch(IndexOutOfBoundsException ie){
            System.out.println("數組越界");
        }
        //NumberFormatException
        catch(NumberFormatException ne){
            System.out.println("數字格式異常");
        }
        //ArithmeticException
        catch(ArithmeticException ae){
            System.out.println("算術異常");
        }
        catch (Exception e) {
            System.out.println("未知異常");
        }      
    }

2.3多異常捕獲

Java7後提供一個catch捕獲多個異常
數組

public static void main(String[] args) {
        //
        try {
            int a = Integer.parseInt(args[0]);
            int b = Integer.parseInt(args[1]);
            int c = a / b;
            System.out.println("輸入的兩個數相除結果爲: " + c);
        } 
        //Multiple Exception
        catch(IndexOutOfBoundsException
            | NumberFormatException
            | ArithmeticException me){
            System.out.println("多個異常");
        }
        catch (Exception e) {
            System.out.println("未知異常");
        }      
    }

2.4獲取異常信息

public static void main(String[] args) {
        //
        try {
            FileInputStream i = new FileInputStream("a.txt");
        } 
        //Multiple Exception
        catch(IOException ie){
            System.out.println("exception message: " + ie.getMessage());
            ie.printStackTrace();
        }
        catch (Exception e) {
            System.out.println("未知異常");
        }      
    }
exception message: a.txt (系統找不到指定的文件。)
java.io.FileNotFoundException: a.txt (系統找不到指定的文件。)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at com.company.project.exception.ExceptionPrint.main(ExceptionPrint.java:11)

2.5finally回收資源

2.6Checked異常和Runtime異常

2.7throw拋出異常

package com.company.project.exception;
 
import java.io.FileInputStream;
import java.io.IOException;
 
public class ExceptionPrint {
 
    public static void main(String[] args)throws IOException {//這裏拋出IOException
        //throw exception
        FileInputStream i = new FileInputStream("a.txt");
    }
     
    //定義的新函數拋出指定的異常
    public static void test() throws Exception {};
}

throw和throws區別:jvm

  • throw用在方法內部,而throws用於方法的聲明
  • throw使用須要new一個異常,throws是聲明有什麼類型的異常
  • throw後面只能有一個異常對象,throws後面一次能夠多個異常

public class ExceptionPrint {
    /*throws & throw*/
    public static void main(String[] args)throws IOException {//這裏拋出IOException
        FileInputStream i = new FileInputStream("a.txt");
    }
     
    //定義的新函數拋出指定的異常
    public static void test() throws Exception {};
    public void DoSomething(){
        int a = 1;
        int b = 2;
        if (a != b) {
            //能夠定義本身的異常
            throwMyException(); 
            //也能夠定義其餘的異常,根據須要使用
            throw new IndexOutOfBoundsException();
        }
    }
     
    public static void throwMyException(){
        System.out.println("我本身定義的異常");
    }
}

2.8自定義異常類

package com.company.project.exception;
//MyNewException。java
public class MyNewException extends Exception {
    //無參構造
    public MyNewException(){};
    //有參構造
    public MyNewException(String msg){
        super(msg);
    }
     
}

2.9throw和catch一塊兒使用

3.異常的做用

  • 捕獲異常的做用是否就是輸出一句話:友好的異常處理;收集定位錯誤狀況幫助解決問題;異常狀況加的應對提供幫助
  • 捕獲異常是否就是不會Exception:不一樣的異常,須要處理的方式不一,特別是在實際項目中

4.finnaly

finnaly在有try語句塊的時候才能使用,在jvm不退出的狀況下必定會執行函數

相關文章
相關標籤/搜索