欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

异常的捕获与处理

程序员文章站 2022-04-01 11:28:45
...

异常的捕获与处理

处理异常

组合方式:try…catch、try…catch…finally、try…finally

public class TestMain {
    public static void main(String[] args) {
        try {
            System.out.println(5 / 0);
        } catch(ArithmeticException e) {
            System.out.println("出现算数异常:");
             e.printStackTrace();   //输出异常的完整信息
        }finally{
            System.out.println("运行结束");
        }
    }
}

异常处理流程

所有异常类都是Throwable子类

Error与Exception的区别?

  • Error:指的是JVM错误,即程序还没有执行,用户无法进行处理。
  • Exception:指的是程序运行中产生的异常,用户可以处理。

请解释Java中的异常处理流程:

异常的捕获与处理

  1. 程序运行过程中出现异常后,JVM自动根据异常类型实例化一个与之类型匹配的异常类对象。
  2. 产生异常对象后,判断是否有异常处理。
    • 有:由try语句捕获产生的异常类实例化对象,再与每一个catch进行比较。如果匹配,则处理异常。
    • 没有:交由JVM进行默认处理,输出异常信息,结束程序调用。
  3. 无论异常处理是否匹配,都要向后执行finally语句。如果之前处理过异常,那么程序自然结束,否则交由JVM默认处理。

使用Exception处理异常

public class TestMain {
    public static void main(String[] args) {
        try {
            System.out.println(5 / 0);
        } catch(Exception e) {
            System.out.println("出现balabala异常:");
             e.printStackTrace();   //输出异常的完整信息
        }finally{
            System.out.println("运行结束");
        }
    }
}

使用须知:

  • 存在多个catch时,捕获范围大的异常一定得放在捕获范围小的异常之后,否则程序编译错误。
  • Exception虽然比较方便,但所有异常都会按照同一种方式进行处理。异常分开处理更好。

Exception与RuntimeException的区别?并列举几个常见的RuntimeException

  • Exception是RuntimeException的父类
  • Exception所定义的异常必须要被处理,而RuntimeException的异常可以选择性处理。
  • 常见RuntimeException:ArithmeticException、NullPointerException、ClassCastException(转换异常类)

throws关键字

throws关键字主要用于方法声明,当方法中出现异常后,交由被调用处进行处理。

class MyMath {
    //此方法里产生的异常交给被调用出进行处理
    public static int div(int x, int y) throws Exception {
        return x / y;
    }
}
public class TestMain {
    public static void main(String[] args) {
        try {
            System.out.println(MyMath.div(10, 0));  //这里调用
        }catch(Exception e) {
            System.out.println("出错了!");
            e.printStackTrace();
        }

    }
}

由以上例子可以发现:

  • 调用了具有throws声明的方法后,不管操作是否会出现异常,都必须进行异常处理。
  • throws声明的方法所产生的异常的范围,必须必catch中的小。
  • 主方法如果抛出异常,则由JVM进行处理。(但主方法不应该用throws声明)

throw关键字

使用throw可以手动的抛出异常的实例化对象。

public class TestMain {
    public static void main(String[] args) {
        try {
            throw new Exception("自定义异常");   //抛出一个自定义异常
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
}

throw与throws的区别?

  • throw:指的是手动的抛出一个异常类对象。
  • throws:声明方法时使用, 表示此方法在调用时必须处理异常。
相关标签: 异常处理