java异常体系结构详解


前言

一、异常是什么?

1.定义

     异常:程序运行过程中,由于某些原因导致程序出错,从而结束程序运行,这就称为异常

2.java异常的结构分析图

在这里插入图片描述
Java标准库内建了一些通用的异常,这些类以Throwable为顶层父类。Throwable又派生出Error类和Exception类。

1.错误:Error类以及他的子类的实例,代表了JVM本身的错误。 错误不能被程序员通过代码处理Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。

2.异常: Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。

二、java中的异常处理机制

`***`` try -定义可能发生异常的代码 (监控区域) ```

catch -用来捕捉try中发生的异常(捕获异常区域)

finally - 无论是否有异常都会执行的代码(处理善后工作)

throw - 抛出异常

throws -声明异常

处理完异常后,可以保证程序继续运行***

三.java中异常处理结构

1. try-catch 结构:

1.异常捕获代码

在这里插入图片描述
输出结果如下:
在这里插入图片描述

2.无异常捕获代码

在这里插入图片描述
输出结果
在这里插入图片描述
总结:try中监控区出现异常则运行至异常捕获区域catch进行处理,如果无异常抛出则不进行异常捕获。

2.try-catch-finally

代码如下(示例):

package dom;



public class Domr {
/**
 作者
 时间
 类的描述
 ***/

public static void main(String[] args) {
    int x=1;
    int y=1;
try {//监控区域
    System.out.println(x/0);
}catch (Throwable e){//捕获异常的区域
    System.out.println("有异常发生");

}finally {
    System.out.println("处理善后工作有没有异常都会运行");
}
}
}

输出结果
在这里插入图片描述
总结:

          1.有没有自定义异常抛出finally都会运行执行
          2.finally在一种情况下不能被执行:当执行到System.exit(1)用来强制关闭虚拟机时

finally在一种情况下不能被执行:当执行到System.exit(1)用来强制关闭虚拟机时

package dom;



public class Domr {
/**
 作者
 时间
 类的描述
 ***/

public static void main(String[] args) {
    int x=1;
    int y=1;
try {//监控区域
    System.out.println(x/y);
}catch (Throwable e){//捕获异常的区域
    System.out.println("有异常发生");

}finally {
    System.exit(1);
    System.out.println("处理善后工作有没有异常都会运行");//执行exit方法时此位置代码不执行

}
}
}

3.多重catch使用结构

1.正确代码案例

如果有多重catch时,先定义子异常,最后定义父异常(先子类后父类,从特殊到一般) 根据异常结构图分析异常类关系

public static void main(String[] args) {
    int x = 1;
    int y = 1;
    try {//监控区域
        System.out.println(x / y);
    } catch (Error erro) {//捕获异常的区域 Error异常
        System.out.println("Error");
    } catch (Exception Exception) {//Exception 异常
        System.out.println("Exception");
    } catch (Throwable Throwable) {//Throwable  异常
        System.out.println("Exception");
        
       / /异常结构由小到大进行捕获:Error-Exception -Throwable 先定义子异常后定义父异常 
    }finally{//有没有异常都执行此代码
        System.out.println("有没有异常我都会运行的\t芭比Q优");
    }
}
}
输出结果: 1 
           有没有异常我都会运行的芭比Q优

异常结构由小到大进行捕获:Error-Exception -Throwable 先定义子异常后定义父异常

2.错误代码案例

package dom;



public class Domr {
/**
 作者
 时间
 类的描述
 ***/

public static void main(String[] args) {
    int x = 1;
    int y = 1;
    try {//监控区域
        System.out.println(x / y);
    } catch (Throwable error) {//捕获异常的区域
        System.out.println("Error");
    } catch (Error Error) {
        System.out.println("Exception");
    } catch (Exception Exception) {
        System.out.println("Exception");


    }finally{
        System.out.println("有没有异常我都会运行的\t芭比Q优");
    }
}
}


输出结果
在这里插入图片描述

3.异常打印输出

package dom;



public class Domr {
/**
 作者
 时间
 类的描述
 ***/

public static void main(String[] args) {

        int x = 2;
    int y = 2;
    try {
      System.out.println(x/0);
    } catch (Exception e) {
system.exit(1);//可以终止此代码执行
        e.printStackTrace();//异常打印异常
    }


}
}


异常打印输出结果:

java.lang.ArithmeticException: / by zero
	at dom.Domr.main(Domr.java:17)

链接: https://blog.csdn.net/m0_67929156/article/details/123980271?spm=1001.2014.3001.5502.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值