前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java基础】异常处理

【Java基础】异常处理

作者头像
全栈开发日记
发布2022-05-12 20:01:59
2000
发布2022-05-12 20:01:59
举报
文章被收录于专栏:全栈开发日记

本篇目录:

1、模拟运行异常 2、处理异常 3、抛出异常 4、finally关键字 5、自定义异常 6、异常的继承关系

Java中为异常提供的关键字有如下五个关键字:try,catch,finally,throw,throws

1 模拟运行异常

代码语言:javascript
复制
int i = 1 / 0;
System.out.println(1);

上面第一行代码由于算术中除数不能为零,则会抛出算术运算异常。

运行结果如下:

代码语言:javascript
复制
Exception in thread "main" java.lang.ArithmeticException: / by zero
  at exception.Main.main(Main.java:10)

数字1并没有输出,说明在第一行代码运行异常后,不会继续再向下运行,所以第二行代码就不会运行。

即异常发生后代码没有继续向下执行,而是停止了运行。

2 处理异常

那么我们如何处理这个异常呢,并且让程序不影响运行。

处理异常示例:

代码语言:javascript
复制
try{
    int i = 1 / 0;
}catch (ArithmeticException exception){
    System.out.println("这是算术运行异常");
}
System.out.println(1);

运行结果如下:

代码语言:javascript
复制
这是算术运行异常
1

在运行结果中数字1成功打印,说明异常被成功处理,并没有影响程序的正常执行。

3 抛出异常

除了使用try...catch关键字将异常捕获,还可以将异常抛出给上一级处理,即谁调用它就交给谁来处理这个异常。

如果没有调用关系,则将这个异常交给JVM处理,也就是运行Java字节码的虚拟机。

再如果JVM处理不了这个异常,那么JVM就会罢工,不会继续执行了。

3.1、抛出异常未处理

抛出异常示例:

代码语言:javascript
复制
public static void main(String[] args){
    demoA();// 调用方法
    System.out.println(2);// 打印数字2
}

// 抛出算术异常
public static void demoA() throws ArithmeticException{
    int i = 1 / 0;// 算术异常
    System.out.println(1);// 打印数字1
}

在上述例子中,方法demoA出现异常,并抛出异常给main方法,但是main方法并没有捕获处理。

运行结果如下:

代码语言:javascript
复制
Exception in thread "main" java.lang.ArithmeticException: / by zero
  at exception.Main.demoA(Main.java:11)
  at exception.Main.main(Main.java:5)

3.2、抛出异常并进行处理

抛出异常并进行处理示例:

代码语言:javascript
复制
public static void main(String[] args){
    try {
        demoA();// 调用方法
    }catch (ArithmeticException exception){
        System.out.println("处理demoA抛出的异常");
    }
    System.out.println(2);// 打印数字2
}

// 抛出算术异常
public static void demoA() throws ArithmeticException{
    int i = 1 / 0;// 算术异常
    System.out.println(1);// 打印数字1
}

执行结果:

代码语言:javascript
复制
处理demoA抛出的异常
2

数字2被成功打印,但是数字1没有,因为打印数字1的前一行代码出现了异常,而这个方法中没有对这个异常进行捕获处理,而是抛出了异常,那么这个方法到抛出异常后就停止执行了。

4 finally关键字

在异常处理中,当发生异常时,才会执行catch中的代码。相反,没有异常就不会执行。而有很多的情景下是需要无论执行有无异常都需要执行的代码,那finally就是干这个工作的。

示例:

代码语言:javascript
复制
try {
    int i = 1 / 0;// 算术异常
} catch (ArithmeticException exception) {
    System.out.println("算术异常");
}finally {
    System.out.println("finally代码块");
}

5 自定义异常

在实际开发中,我们难免会遇到一些需要我们手动抛出的异常信息,尤其是分模块开发中,而且需要告诉我们的上一级代码遇到的问题。

5.1、简单的自定义异常

代码语言:javascript
复制
public class TestException extends Exception {
    public TestException(String message){
        super(message);
    }
}

这就是一个最简单的自定义异常。

步骤:①定义一个异常类。②继承Exception类。③编写构造方法,并调用父类的构造方法将异常信息输出。

5.2、抛出自定义异常

代码语言:javascript
复制
public static void demoA() throws TestException{
    throw new TestException("抛出自定义异常");
}

捕获的异常信息:

代码语言:javascript
复制
exception.TestException: 抛出自定义异常
  at exception.Main.demoA(Main.java:13)
  at exception.Main.main(Main.java:6)

6 异常的继承关系

在我们自定义异常时也看到了,其实异常也是一个类,以我们自定义的异常类为例,它的继承关系如下:

所有的异常都是从Throwable类继承来的,而Throwable类有两个子类,分别是ExceptionError

Exception是程序本身可以处理的异常,而Error是JVM本身的错误,通过代码没有办法被捕获并处理。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈开发日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3.1、抛出异常未处理
  • 3.2、抛出异常并进行处理
  • 5.1、简单的自定义异常
  • 5.2、抛出自定义异常
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档