一、编译时异常(Checked Exception)
编译时异常是在编译阶段检测到的异常,它们通常表示程序可能无法正常执行的情况,需要在代码中进行处理。常见的编译时异常包括:
1.IOException(输入输出异常)
当发生输入或输出操作失败时,比如文件读写错误或网络连接问题,会抛出IOException。处理该异常可以使用try-catch语句捕获并处理异常,或者在方法声明中使用throws关键字声明抛出该异常。
2.SQLException(SQL异常)
SQLException是处理数据库操作时可能发生的异常,如连接数据库失败、执行SQL语句错误等。处理方法与IOException类似,可以使用try-catch语句捕获并处理异常,或在方法声明中声明抛出SQLException。
3.ClassNotFoundException(类未找到异常)
当试图加载某个类时,但找不到该类时,会抛出ClassNotFoundException。常见的情况是未正确配置类路径或引入依赖库。处理该异常可以通过检查类路径或引入正确的库来解决。

二、运行时异常(Unchecked Exception)
运行时异常是在程序运行过程中检测到的异常,它们通常表示程序错误或逻辑错误。与编译时异常不同,运行时异常不需要在代码中强制进行处理,但我们仍然应该尽力避免它们的发生。以下是几个常见的运行时异常:
1.NullPointerException(空指针异常)
当尝试访问空引用或未初始化的对象时,会抛出NullPointerException。为了避免该异常,我们应该在使用对象之前进行非空判断。
2.ArrayIndexOutOfBoundsException(数组越界异常)
当尝试访问数组的索引超出有效范围时,会抛出ArrayIndexOutOfBoundsException。为了避免该异常,我们应该确保使用合法的数组索引。
3.ArithmeticException(算术异常)
当进行除零操作或其他不合法的数学运算时,会抛出ArithmeticException。为了避免该异常,我们应该在进行除法运算之前进行适当的检查。
三、自定义异常(Custom Exception)
除了Java提供的标准异常之外,我们还可以根据需求创建自定义异常。自定义异常可以继承自Exception或RuntimeException类,并根据具体情况添加自定义信息和逻辑。通过自定义异常,我们可以更好地捕获和处理特定的错误情况。
1.异常处理方法
对于捕获和处理异常,我们可以使用以下方法:
(1)try-catch语句
使用try-catch语句可以捕获异常并处理。try块中包含可能抛出异常的代码,而catch块中处理异常的逻辑。
(2)throws关键字
如果方法可能抛出某种异常,可以在方法声明中使用throws关键字将该异常传递给调用者,让调用者处理异常。
finally块用于执行无论是否发生异常都必须执行的代码,比如资源释放或清理操作。finally块始终在try-catch块执行之后执行。