Java中异常的分类

本文详细介绍了Java中异常的分类,包括RuntimeException和CheckedException,并通过实例展示了如何正确处理不同类型的异常。

Java中异常的分类

所有异常,都继承自java.lang.Throwable类。

Throwable有两个直接子类,Error类和Exception类。

Exception

Exception则可使从任何标准Java库的类方法,自己的方法以及运行时任何异常中抛出来的基类型。

异常可分为执行异常(RuntimeException)和检查异常(Checked Exceptions)两种

RuntimeException

RuntimeException在默认情况下会得到自动处理。所以通常用不着捕获RuntimeException,但在自己的封装里,也许仍然要选择抛出一部分RuntimeException

RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。可能在执行方法期间抛出但未被捕获的 RuntimeException 的任何子类都无需 throws 子句中进行声明。(java api

它是uncheckedExcepiton

Java.lang.ArithmeticException

Java.lang.ArrayStoreExcetpion

Java.lang.ClassCastException

Java.lang.EnumConstantNotPresentException

Java.lang.IllegalArgumentException

       Java.lang.IllegalThreadStateException

       Java.lang.NumberFormatException

Java.lang.IllegalMonitorStateException

Java.lang.IllegalStateException

Java.lang.IndexOutOfBoundsException

       Java.lang.ArrayIndexOutOfBoundsException

       Java.lang.StringIndexOutOfBoundsException

Java.lang.NegativeArraySizeException’

Java.lang.NullPointerException

Java.lang.SecurityException

Java.lang.TypeNotPresentException

Java.lang.UnsupprotedOperationException

CheckedException

除了runtimeException以外的异常,都属于checkedException,它们都在java.lang库内部定义。Java编译器要求程序必须捕获或声明抛出这种异常。

一个方法必须通过throws语句在方法的声明部分说明它可能抛出但并未捕获的所有checkedException

Java.lang.ClassNotFoundException

Java.lang.CloneNotSupportedException

Java.lang.IllegalAccessException

Java.lang.InterruptedException

Java.lang.NoSuchFieldException

Java.lang.NoSuchMetodException

Error

当程序发生不可控这种错误时,通常的做法是通知用户并中止程序的执行。

与异常不同的是Error及其子类的对象不应被抛出。

Error Throwable 的子类,代表编译时间和系统错误,用于指示合理的应用程序不应该试图捕获的严重问题。大多数这样的错误都是异常条件。虽然 ThreadDeath 错误是一个正规的条件,但它也是 Error 的子类,因为大多数应用程序都不应该试图捕获它。

在执行该方法期间,无需在其 throws 子句中声明可能抛出但是未能捕获 Error 的任何子类,因为这些错误可能是再也不会发生的异常条件。

它是uncheckedExcepiton

程序出了那种异常JVM就会抛出相应的异常
比如代码:ArrayIndexOutOfBoundsException
public void demo1(){
try{
int a = 10/0;
}catch(ArithmeticException ae){
System.out.println(“算术运算异常:”+ae.getMessage());
}catch(Exception e){
System.out.println(“其他异常”+e.getMessage());
}
}

public void demo2(){
String strList[] = {"a","b","c"};
try{
String str = strList[4].toString();
}catch(ArrayIndexOutOfBoundsException ae){
System.out.println(“数组下标越界:”+ae.getMessage());
}catch(Exception e){
System.out.println(“其他异常”+e.getMessage());
}
}
总之Exception是所有异常的父类.如果你出现的异常被他的子类捕捉了,他就不会再捕捉比如demo2()方法如果是出现了ArrayIndexOutOfBoundsException
Exception就不会捕捉了!
那么为什么要捕捉多次呢?因为ArrayIndexOutOfBoundsException只是数组下标越界的异常,所以它比Exception更的仔细,更能说明异常的原因!
如果不是出现ArrayIndexOutOfBoundsException则Exception就会来捕捉

### 三级标题:Java 中的异常分类详解 Java 中的异常是程序运行时发生的错误或异常情况,Java 提供了完善的异常处理机制,通过 `try-catch-finally` 结构来捕获和处理异常异常Java 中主要分为两大:检查异常(Checked Exceptions) 和 非检查异常(Unchecked Exceptions)[^1]。 #### 检查异常(Checked Exceptions) 这异常在编译时必须被处理,通常与外部系统交互相关。例如,`IOException`(输入输出异常)和 `SQLException`(SQL 异常)等。这些异常属于 `Exception` 的子,但不包括 `RuntimeException` 及其子。如果程序中不处理这些异常,编译将无法通过。处理方式包括使用 `try-catch` 语句捕获并处理,或者在方法声明中使用 `throws` 关键字声明抛出[^4]。 ```java public void readFile() throws IOException { FileReader fileReader = new FileReader("file.txt"); } ``` #### 非检查异常(Unchecked Exceptions) 非检查异常也称为运行时异常(Runtime Exceptions),这异常在运行时抛出,通常表示程序错误或逻辑错误。例如,`NullPointerException`(空指针异常)、`ArrayIndexOutOfBoundsException`(数组越界异常)和 `ArithmeticException`(算术异常)等。这些异常都是 `RuntimeException` 及其子的实例。运行时异常不需要在代码中强制处理,但应尽量避免它们的发生[^3]。 ```java public int divide(int a, int b) { return a / b; // 如果 b 为 0,将抛出 ArithmeticException } ``` #### 异常分类总结 - **Exception异常)**:是程序本身可以处理的异常。`Exception` 有一个重要的子 `RuntimeException`,它及其子表示“JVM 常用操作”引发的错误。 - **Error(错误)**:表示严重的问题,通常程序无法恢复,例如 `OutOfMemoryError` 或 `StackOverflowError`。这问题一般不需要程序处理,而是由 JVM 抛出[^1]。 ### 三级标题:异常的处理方式 Java 中的异常处理主要通过 `try-catch-finally` 结构来实现。对于检查异常,必须显式处理,而运行时异常可以选择是否捕获。 ```java try { // 可能会抛出异常的代码 int result = 10 / 0; } catch (ArithmeticException e) { // 处理除数为零的异常 System.out.println("不能除以零"); } finally { // 无论是否发生异常,都会执行的代码 System.out.println("执行 finally 块"); } ``` 在实际开发中,合理使用异常处理机制可以提高程序的健壮性和可维护性。同时,避免滥用 `try-catch` 结构,特别是在性能敏感的代码段中。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值