Java中的异常处理

前言

在学习过程中,遇到较少的异常处理,对这方面的知识不太熟。在这次重新学习的时候整理一次。

1. 异常

1.1 分类

  1. 运行时异常: 可以被避免,编译时可以忽略。
  2. 检查时异常: 人的问题无法遇见,例如打开不存在的文件
  3. 错误:编译检查不到,脱离人的控制。

1.2 处理框架

  1. 将异常定义为类处理, Throwable是所有异常的父类。
  2. 异常处理分为 Error和Exception两大类。
  3. 在运行时异常中可以从逻辑上避免,在程序中可以处理。
    image

2. 异常的处理

2.1 捕获异常

surround快捷键套代码,ctrl+alt+t
捕获异常可以使发生异常的程序继续运行。

  1. 可以写多个catch语句进行多个捕获,但是,捕获类型的顺序必须按照异常框架顺序,由低到高进行捕获。
  2. try和catch相关部分只有一个会执行,finally都会执行。因此释放io连接,资源等放在finally中。
public static void main(String[] args) {
        int a=1,b=0;
        int[] arr = {1,2,3};
        try {    //监控区域
//            System.out.println(a/b);
            System.out.println(arr[3]);
        }catch (ArithmeticException e){     //处理区域
            System.out.println("捕获到运行时异常");
        }catch (Throwable e) {
            System.out.println("所有都捕获");
        }
        finally {   //善后工作,释放资源之类的
            System.out.println("我都执行");
        }
    }

2.2 抛出异常

  1. 方法内throw 主动制造异常,方法上throws表明方法无法处理这个异常。
  2. 对于RuntimeException,程序会自动抛出异常。
  3. throw抛出异常后的代码不会继续执行。
public static void main(String[] args) {
        try {
            new Application().compute(2,0);
        } catch (Exception e) {
            System.out.println("除数不能为0");
        }

    }

//    public   void compute(int a,int b) {    //运行时异常可以自动抛出
//        System.out.println(a/b);
//    }

    public void compute(int a,int b) throws  ArithmeticException{
        if(b==0) {
            throw new ArithmeticException();
        }
        System.out.println(a/b);
    }

自定义异常

步骤:

  1. 创建自定义异常类 继承Exception
  2. 在方法中throw抛出
  3. 若在当前方法处理异常使用try-catch捕获。
  4. 否则在方法声明处throws抛出给方法调用者处理出现异常方法的调用者捕获并处理。
//自定义异常,方法中判断时抛出,由调用者处理。
public class MyException extends Exception{
    int age;
    public MyException(int age) {
        this.age = age;
    }
//打印对象会调用toString方法。
    @Override  
    public String toString() {
        return "MyException{" +
                "age=" + age +
                '}';
    }
}

    public static void main(String[] args) {
        try {
            test(12);
        } catch (MyException e) {
            System.out.println(e);
        }
    }

    public static  void test(int a) throws MyException{
        System.out.println("传递参数为:" + a);
        if(a>10) {
            throw new MyException(a);
        }
    }

image

posted @   不準  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示