likes
comments
collection
share

【Java】:异常初体验

作者站长头像
站长
· 阅读数 16

1、写在前面

大家好,我是翼同学。今天文章的内容是:

  • 异常处理

2、内容

2.1、异常处理的概念

所谓异常处理,操作的对象就是异常(Exception)。而异常就是Java程序在运行过程中发生的错误事件,比如数组越界、除0溢出等。所以异常处理就是一种机制,用于对程序执行过程中与预期不符的各种意外情况进行捕获和处理。

一个健壮的程序就必须具备处理各种各样错误的能力。

2.2、异常处理机制

在Java中,声明了许多异常类,每个异常类都包含了异常信息以及处理异常的方法等内容。当程序在运行过程中发生了错误,系统就会产生一个相应的异常对象,此时就可以调用相应的异常处理方法,从而保证程序运行的安全性。这就是Java的异常处理机制。

Java程序在运行过程中,如果发生了异常,Java虚拟机就会生成一个代表该异常的对象并交给运行时系统,这个过程称为抛出异常。运行时系统在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到包含处理异常的方法为止,这个过程称为捕获异常

2.3、异常的常规分类

  • 异常体系

Throwable是异常体系的根,它继承自ObjectThrowable有两个体系:ErrorException

其中:

  • Error: 致命性的错误,Java虚拟机无法解决的错误,不能简单地恢复执行。比如:
    • OutOfMemoryError:内存耗尽
    • StackOverflowError:栈溢出
  • Exception: 由一些外在因素导致的非致命问题,可以编写代码进行处理。比如:
    • FileNotFoundException:找不到文件
    • IndexOutOfBoundsException:数组下标越界

需要注意,错误Error并不是异常,而是脱离程序员控制的问题。比如栈溢出就是一个错误,这在编译代码时很难检测到。而我们需要处理的异常则包括Exception及其子类,但注意,其中并不包括RuntimeException及其子类。

【Java】:异常初体验

  • 具体分类

Exception类下的异常又分为两种:

  • 检查型异常
  • 检查型异常又称为编译时异常。该类型的异常是不能忽略的,比如打开一个不存在的文件,发生的异常在编译时是不能简单忽略的。这就需要处理。
  • 运行时异常
  • 运行时异常是我们可避免的异常,即RuntimeException,并不需要在方法中声明抛出,且编译器对这类异常不做检查。

【Java】:异常初体验

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
评论
请登录