08.异常机制

1.什么是异常

简单分类

  • 检查性异常:最具代表的是用户错误或问题引起的异常,无法预见。如要打开一个不存在文件时。
  • 运行时异常:运行时异常是可能被程序员避免的异常。
  • 错误:错误不是异常,而是脱离程序员控制的问题。

2.Java 异常处理机制

Application.java

public class Application {
    public static void main(String[] args) {

        new Application().test(1,0);
        /*int a = 1;
        int b = 0;
        //假设要捕获多个异常,从小到大
        try { //try 监控区域

        }catch (Error e){ //catch(想要捕获的异常类型) 捕获异常
            System.out.println("Error");
        }catch (Exception e){ //catch(想要捕获的异常类型) 捕获异常
            System.out.println("Exception");
        }catch (Throwable e){ //catch(想要捕获的异常类型) 捕获异常
            System.out.println("Throwable");
        }finally { //处理善后工作
            System.out.println("finally");
        }*/
    }
    public void test(int a, int b){
        if (b == 0) {
            throw new ArithmeticException(); //主动抛出异常,一般在方法中使用
        }
        System.out.println(a/b);
    }
}

快捷键:Ctrl+Alt+T

3.自定义异常

继承 Exception 类
步骤:

  1. 创建自定义异常类;
  2. 在方法中通过 throw 关键字抛出异常对象;
  3. 如果在当前抛出异常的方法中处理异常,可以使用 try-catch 语句捕获并处理;否则在方法的声明处通过 throws 关键字指明要抛出给方法调用者的异常,继续进行下一步操作;
  4. 在出现异常方法的调用者中捕获并处理异常。

MyException.java


// 自定义异常类
public class MyException extends Exception {
    //传递数字 > 10
    private int detail;

    public MyException(int a){
        this.detail = a;
    }

    // toString: 异常的打印信息
    @Override
    public String toString() {
        return "MyException{" +
                "detail=" + detail +
                '}';
    }
}

Test.java

public class Test {
    //可能会存在异常的方法
    static void test(int a) throws MyException {
        System.out.println("传递的参数为:" + a);
        if (a > 10){
            throw new MyException(a); //抛出
        }
        System.out.println("OK");
    }

    public static void main(String[] args) {
        try {
            test(11);
        } catch (MyException e) {
            System.out.println("MyException => " + e);
        }
    }
}

4.总结

  • 处理运行时异常时,采用逻辑去合理规避同时辅助 try-catch 处理;
  • 在多重 catch 块后面,可以加一个 catch(Exception) 来处理可能会被遗漏的异常;(最大的异常)
  • 对于不确定的代码,也可以加上 try-cathch,处理潜在的异常;
  • 尽量去处理异常,切忌只是简单地调用 printStackTrace() 去打印输出;
  • 具体如何处理异常,要根据不同地业务需求和异常类型去决定;
  • 尽量添加 finally 语句块去释放占用地资源。
posted @ 2024-05-05 20:43  落落的学习  阅读(2)  评论(0编辑  收藏  举报