Throwable体系结构及异常讲解

Throwable体系结构

  • throwable
    java.lang.Throwable 类是Java程序执行过程中发生的异常事件对应的类的根父类。

1.Throwable的体系结构

在这里插入图片描述
从这张图中,我们可以看到结构为

Object——>throwable——>error
Object——>throwable ——>Exception——>RuntimeException

1.1 error与Exception

error:错误。Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。
一般不编写针对性的代码进行处理。
Exception:异常。指的是程序在执行过程中,出现的非正常情况,如果不处理最终会导致JVM的非正常停止。我们可以编写针对性的代码进行处理。

1.2 Exception的Exception和RuntimeException

我们可以从结构图中看到,Exception中包含了许多的子异常类
一般我们可以将Exception分为两类:
运行时异常(RuntimeException)
编译时异常(Exception类中除了RuntimeException类的其他类)

2.Error(错误)

error:错误。Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。
一般不编写针对性的代码进行处理。
下图为Error的API。
在这里插入图片描述

常见的Error

StackOverflowError(堆栈异常错误)
OutOfMemoryError(内存溢出错误)

3.Exception(异常)

在这里插入图片描述
我们知道,我们编写的Java文件要通过 javac.exe 来进行编译,通过 java.exe 来进行运行。
于是我们把异常分为两类:

3.1 编译时异常

1.编译时异常

即checked异常、受检异常):在代码编译阶段,编译器就能明确警示当前代码可能发生(不是一定发生)xx异常,并明确督促程序员提前编写处理它的代码。如果程序员没有编写对应的异常处理代码,则编译器就会直接判定编译失败,从而不能生成字节码文件。通常,这类异常的发生不是由程序员的代码引起的,或者不是靠加简单判断就可以避免的,例如:FileNotFoundException(文件找不到异常)

在这里插入图片描述

上图是一个表示文件读写的方法,它可能会报FileNotFoundException和IOException。这两个异常都是编译时的异常。
所以说,编译时的异常我们在编写代码时,编辑器会进行检查,一旦发现可能发生异常就会直接爆红

注意: 爆红不是表示有错误,而是表示可能会出错

我们尝试运行,结果如下图
在这里插入图片描述
我们会发现,程序压根没有运行,因为编译时异常是无法通过编译的

因为编译时异常,编辑器会进行检查,所以我们又称“编译时异常”为受检异常
运行时异常,编辑器不会进行检查,又被称作非受检异常

2.常见的编译时异常

ClassNotFoundException:类找不到异常
FileNotFoundException:文件未发现异常
IOException:IO异常

2.运行时异常(RuntimeException)

即runtime异常、unchecked异常、非受检异常):在代码编译阶段,编译器完全不做任何检查,无论该异常是否会发生,编译器都不给出任何提示。只有等代码运行起来并确实发生了xx异常,它才能被发现。通常,这类异常是由程序员的代码编写不当引起的,只要稍加判断,或者细心检查就可以避免。

在这里插入图片描述
上图是一个运行时异常(除0异常)
但是和编译时异常相比,我们发现它不会爆红。
运行后,控制台会出现以下信息
在这里插入图片描述
错误信息:ArithmeticException: / by zero(算术异常中的除0异常)
可以发现,程序是运行了的,只是运行被中止了。

常见的RuntimeException

ArrayIndexOutOfBoundsException:数组下标越界异常
NullPointerException:空指针异常
ClassCastException:强制类型转换异常
NumberFormatException:数据格式异常
InputMismatchException:输入不匹配异常
ArithmeticException:算术异常

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值