Java异常
什么是异常?
程序在运行过程中发生由于外部问题导致的程序异常事件,发生的异常会中断程序的运行。(在Java等面向对象的编程语言中)异常本身是一个对象,产生异常就是产生了一个异常对象。为了能够及时有效地处理程序中的运行错误,必须使用异常类。
异常本质上是程序上的错误
异常分类
Throwable
Error
Exception :
运行时异常
也称不检查异常(Unchecked Exception)
运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutBoundException等,这些异常是不检查异常,程序中可以先择捕获处理,也可以不处理。这些异常一般由程序逻辑错误引起,程序应该从逻辑角度尽可能避免这类异常的发生。
非运行时异常
也称检查异常(Checked Exception)
非运行时异常,是指RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、ClassNotFoundException等以及用户自定义的Exception异常,一般情况下不自定义检查异常
使用try-catch-finally实现异常处理
写法格式
try{
//逻辑程序块
} catch (//异常类型1 e) {
//处理代码块1
} catch (//异常类型2 e){
//处理代码块2
throw(e);//在抛出这个“异常”
} finally {
//释放资源代码块
}
printStackTrance()方法:
指出异常的类型、性质、栈层次、及出现在程序中的位置
getMessage()方法:
输出错误的性质
toString()方法:
给出异常的类型与性质
需要注意
- 异常处理语法结构中只有try块是必需的,就是说,果如没有try块,则不能有后面的catch块和finally块
- catch块和finally块都是可选的,但是catch块和finally块至少出现其中之一,也可以同时出现
- 可以有多个catch块,捕获父类异常的catch块必须位于捕获子类异常的后面
- 不能只有try块,既没有catch块,也没有finally块
- 多个catch必须位于try块之后,finally块必须位于所有的catch块之后
finally与try语句块匹配的语法格式,此种情况会导致异常丢失,所以不常见。
使用throw和throws实现异常处理
throws声明异常
当一个方法产生一个它不处理的异常时,那么就需要在该方法的头部声明这个异常,以便将该异常传递到方法的外部来进行处理。
返回值类型 方法名(参数列表) throws Exception1 ,Exception 2,…{…}
public static int test(int a, int b) throws ArithmeticException{
if (b == 0) {
throw new ArithmeticException("算数异常");
} else {
return a / b;
}
}
throw抛出异常
throw语句用来直接抛出一个异常,后接一个可抛出的异常类对象.
throw ExceptionObject;
ExceptionObject必须是Throwable类或其子类对象。如果是自定义异常类,也必须是Throwable的直接或间接子类
自定义异常类
因为项目中会出现特有的问题,而这些问题并未被java所描述并封装对象。所以对于这些特有的问题可以按照java的对问题封装的思想。将特有的问题。进行自定义的异常装。
自定义异常的语法形式为:
class 自定义异常名 extands Exception
在编码规范上,一般将自定义异常类的类名命名为XXXException,其中XXX用来代表该异常的作用。
自定义异常类一般包含两个构造方法:一个是无参的默认构造方法,另一个构造方法以字符串的形式接收一个定制的异常消息,并将该消息传递给超类的构造方法。
- 当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。要么在内部try catch处理。要么在函数上声明让调用者处理。
- 一般情况在,函数内出现异常,函数上需要声明,此时会发现打印的结果中只有异常的名称,却没有异常的信息。因为自定义的异常并未定义信息
来源:CSDN
作者:小鲤鱼ya
链接:https://blog.csdn.net/weixin_45956838/article/details/103597335