一、在Java中,异常分为三种类型
:Checked Exception(检查异常)、Unchecked Exception(非检查异常)和Error(错误)。
-
检查异常(Checked Exception): 检查异常是指在编译阶段就需要捕获或声明的异常。它们是Exception类或其子类的子类,但不是RuntimeException类或其子类的子类。检查异常通常表示程序可能处理的可预知的错误或异常情况。在方法声明中必须显式声明检查异常,或者使用try-catch块捕获和处理异常,否则编译时会报错。
-
非检查异常(Unchecked Exception): 非检查异常是指在编译阶段不需要捕获或声明的异常。它们是RuntimeException类或其子类的子类。非检查异常通常表示程序中出现的意外错误或异常情况,如空指针异常、数组越界异常等。编译器不会在编译时检查非检查异常,可以选择捕获和处理,但不强制要求。
-
错误(Error): 错误是指程序无法处理的严重问题,通常是虚拟机内部错误或资源耗尽等不可恢复的错误。与异常不同,错误通常不应该被捕获和处理,而是由Java虚拟机自行处理。
二、Java中常见的异常类型包括:
NullPointerException(空指针异常)、ArrayIndexOutOfBoundsException(数组下标越界异常)、ClassCastException(类转换异常)、NumberFormatException(数字格式异常)、FileNotFoundException(文件未找到异常)、IOException(输入输出异常)等。
除了内置的异常类型,Java还支持自定义异常类型,通过继承Exception或其子类来创建自定义的异常类。自定义异常类可以根据具体的业务需求定义额外的字段和方法。
三、自定义异常示例
要自定义异常,可以创建一个继承自Exception的类,并重写其构造方法。以下是一个示例代码:
class MyException(Exception):
def __init__(self, message):
# 调用父类的构造方法,并传入异常信息
super().__init__(message)
self.message = message
# 使用自定义异常
def divide(a, b):
if b == 0:
raise MyException("除数不能为零!")
return a / b
try:
result = divide(10, 0)
print(result)
except MyException as e:
print("发生自定义异常:", e.message)
在上面的示例中,我们创建了一个名为MyException的自定义异常类,它继承自内置的Exception类。在构造方法中,我们调用了父类的构造方法,并传入异常信息。然后,使用raise关键字抛出自定义异常对象。在try块中,我们调用了divide函数并传入了一个除数为0的参数,这样就会抛出自定义异常。在except块中,我们捕获到了这个自定义异常,并打印出异常信息。
输出结果为:发生自定义异常: 除数不能为零!