【Java】:异常初体验
1、写在前面
大家好,我是翼同学。今天文章的内容是:
- 异常处理
2、内容
2.1、异常处理的概念
所谓异常处理,操作的对象就是异常(Exception
)。而异常就是Java程序在运行过程中发生的错误事件,比如数组越界、除0溢出等。所以异常处理就是一种机制,用于对程序执行过程中与预期不符的各种意外情况进行捕获和处理。
一个健壮的程序就必须具备处理各种各样错误的能力。
2.2、异常处理机制
在Java中,声明了许多异常类,每个异常类都包含了异常信息以及处理异常的方法等内容。当程序在运行过程中发生了错误,系统就会产生一个相应的异常对象,此时就可以调用相应的异常处理方法,从而保证程序运行的安全性。这就是Java的异常处理机制。
Java程序在运行过程中,如果发生了异常,Java虚拟机就会生成一个代表该异常的对象并交给运行时系统,这个过程称为抛出异常。运行时系统在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到包含处理异常的方法为止,这个过程称为捕获异常。
2.3、异常的常规分类
- 异常体系
Throwable
是异常体系的根,它继承自Object
。Throwable
有两个体系:Error
和Exception
其中:
Error
: 致命性的错误,Java虚拟机无法解决的错误,不能简单地恢复执行。比如:-
OutOfMemoryError
:内存耗尽
-
StackOverflowError
:栈溢出
Exception
: 由一些外在因素导致的非致命问题,可以编写代码进行处理。比如:-
FileNotFoundException
:找不到文件
-
IndexOutOfBoundsException
:数组下标越界
需要注意,错误Error
并不是异常,而是脱离程序员控制的问题。比如栈溢出就是一个错误,这在编译代码时很难检测到。而我们需要处理的异常则包括Exception
及其子类,但注意,其中并不包括RuntimeException
及其子类。
- 具体分类
Exception
类下的异常又分为两种:
- 检查型异常:
- 检查型异常又称为编译时异常。该类型的异常是不能忽略的,比如打开一个不存在的文件,发生的异常在编译时是不能简单忽略的。这就需要处理。
- 运行时异常:
- 运行时异常是我们可避免的异常,即
RuntimeException
,并不需要在方法中声明抛出,且编译器对这类异常不做检查。
2.4、异常类的举例
(1) 运行时异常
运行时异常直接继承自RuntimeException
或其子类,表示在运行阶段可能出现的错误。运行时异常一般是代码逻辑不严谨或者程序员业务逻辑没考虑好导致的。
举例如下:
ArrayIndexOutOfBoundsException
数组下标越界:使用了非法索引访问数组,也就是说,使用的索引值为负数或者索引值大于或等于数组大小。
NullPointerException
空指针异常:当Java程序在需要对象的情况下尝试使用null时,会抛出空指针异常。
ArithmeticException
数字操作异常:发生异常算术条件时抛出。 例如,整数“除以零”会抛出此类的实例。
ClassCastException
类型转换异常:当试图将对象强制转换为不是实例的子类时,抛出该异常。
NumberFormatException
数字转换异常:当Java
程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。
(2) 检查型异常
ClassNotFoundException
当Java
程序试图加载类时,找不到相应的类,就会抛出该异常。
IllegalAccessException
拒绝访问一个类的时候,抛出该异常。
InterruptedException
一个线程被另一个线程中断,抛出该异常。
NoSuchFieldException
请求的变量不存在
NoSuchMethodException
请求的方法不存在
3、写在最后
好了,文章的内容就到这里,感谢观看。
转载自:https://juejin.cn/post/7151582543186231310