Java中的异常主要分为两大类:检查型异常(Checked Exceptions) 和 非检查型异常(Unchecked Exceptions)。
下面是详细的分类:
检查型异常(Checked Exceptions)
检查型异常必须被显式地捕获或者通过方法签名声明抛出。这类异常通常对应于可以预测并且可以恢复的错误情况。
IOException 及其子类:涉及输入输出操作时可能发生的异常。
ClassNotFoundException:当应用试图通过其完全限定名称加载类,但无法找到该类的定义时抛出。
SQLException:数据库访问错误时抛出。
FileNotFoundException:当试图打开一个不存在的文件进行读取或写入时抛出。
CloneNotSupportedException:当调用Object.clone()方法,但该对象的类没有实现Cloneable接口时抛出。
非检查型异常(Unchecked Exceptions)
非检查型异常不需要显式地捕获,也不需要在方法签名中声明。这类异常通常对应于编程错误。
RuntimeException 及其子类:
ArithmeticException:算术错误,如除以零。
ArrayIndexOutOfBoundsException:访问数组时下标越界。
ClassCastException:类型转换时发生错误。
IllegalArgumentException:传递给方法的参数不合法。
IllegalStateException:环境或应用状态不正确。
NullPointerException:在需要对象的地方传递了null值。
NumberFormatException:数字格式错误,如将非数字字符串转换为数字时。
Error:表示合理的应用程序不应该试图捕获的严重问题。
OutOfMemoryError:JVM没有足够的内存来为对象分配空间,并且垃圾收集器也无法提供更多内存时。
StackOverflowError:当应用程序递归太深而无法再分配栈空间时。
异常处理
Java提供了几种机制来处理异常:
try-catch 块:用于捕获并处理异常。
finally 块:无论是否发生异常,都执行的代码块。
throws 关键字:在方法签名中使用,表示该方法可能会抛出异常。
throw 关键字:用于显式地抛出异常。
通过以上分类,可以看出Java异常处理机制的丰富性和灵活性,它允许开发者以结构化和可控制的方式来处理程序执行中可能出现的错误情况。

被折叠的 条评论
为什么被折叠?



