异常分类

本文围绕Java异常展开,介绍了Throwable下的Error和Exception,Exception又分为运行时异常和编译异常,列举了如数组越界、空指针等常见运行时异常及找不到文件等检查异常,还说明了方法声明抛出多个异常的情况,以及显式和隐式两种抛出异常的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、类java.lang.Throwable作为所有异常的超类;

其下分为Error和Exception,Error为程序本身无法处理的错误,而Exception则是程序本身可以捕获并可处理的异常;

2、Exception下面有很多异常类

 

这些异常类被分为两种,一种是运行时异常(又称非检查异常),另一种则是编译异常(即检查异常)。

 

常见异常介绍

运行时异常:

  1. ArrayIndexOutOfIndex:数组越界异常
  2. NullPointerException:空指针异常
  3. ClassCastException:类型转换异常
  4. ClassNotFoundException:无法找到指定类异常
  5. ArithmeticException:算术异常
  6. IllegalArgumentException:非法参数异常
  7. MissingResourceException:资源缺失异常

1.ArrayIndexOutOfIndex:数组越界异常

List list = new ArrayList();
list.get(0);
//打印结果:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

2.NullPointerException:空指针异常

比如说你创建一个对象Student s=null;,然后你还用s来调用它的方法,那么就会空指针异常,因为你指向的对象已经不存在了。

实际上就是变量里没有地址值,却要强行用这个变量指向一个对象,没有地址当然找不到对应的东西,然后就报错了。

@Data
class People{
    private String name;
    private Integer age;
}
People people = new People();
String name = people.getName();
System.out.println("String"+":"+name);
Integer age = people.getAge();
System.out.println("ageInteger" +":"+age);
int ageInt = people.getAge();
System.out.println("ageInt" +":"+ageInt);
//打印结果:
String:null
ageInteger:null
java.lang.NullPointerException

People people2 = null;
people2.getAge(); //指向的对象已经不存在,还调用它的方法
//打印结果:
java.lang.NullPointerException

 此处例子是null赋值给int类型变量,所以报错

 

3.ClassCastException:类型转换异常

大部分原因是因为强制转换或者是SQL映射时发生了这个异常

<delete id="deleteByRoadName">
    DELETE FROM transport_record_today
    <where>
        1=1
        and road_desc  != #{describe,jdbcType=VARCHAR}
        <if test="describe!= -1 ">or road_desc IS NULL </if>
    </where>
</delete>

以上describe为varchar与-1比较就会抛出该异常;

4.ClassNotFoundException:无法找到指定类异常

ERROR [main] com.demo.vite.task.QuartzManager [QuartzManager.java:43] jobjob1 添加失败,java.lang.ClassNotFoundException: com.demo.vite.task.PostTask1

5.ArithmeticException:算术异常除数为0

java.lang.ArithmeticException: / by zero

 

6.IllegalArgumentException:非法参数异常

抛出的异常表明向方法传递了一个不合法或不正确的参数。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-rr-dd"); System.out.println(sdf.format(new Date())); //打印结果: java.lang.IllegalArgumentException: Illegal pattern character 'r'

 

7.MissingResourceException:资源缺失异常

资源丢失,要不你指定的路径错误就是把资源删掉了。

 

检查异常:

FileNotFoundException:找不到文件异常

Logging system failed to initialize using configuration from 'classpath:logback.xml' java.io.FileNotFoundException: class path resource [logback.xml] cannot be resolved to URL because it does not exist

异常

一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。

例如,下面的方法声明抛出 RemoteException 和 InsufficientFundsException:

public void withdraw(double amount) throws RemoteException, 
                        InsufficientFundsException { 
    // Method implementation 
}

抛出异常的两种方式

  1. 显式抛出异常,在程序同使用throw关键字,手动将异常实例抛出。
  2. 隐式抛出异常,抛出的主体是JVM,在运行时遇到无法处理的异常情况。
  • 程序级异常:由程序或者API程序抛出的异常。例如 IllegalArgumentException 类,IllegalStateException 类。
  • JVM(Java虚拟机) 异常:由 JVM 抛出的异常或错误。例如:NullPointerException 类,ArrayIndexOutOfBoundsException 类,ClassCastException 类。

 

### Java 中的异常分类和类型 Java 中的异常体系结构以 `Throwable` 类为核心,所有异常和错误都继承自该类。以下是详细的分类和类型说明: #### 1. **Throwable 类** `Throwable` 是 Java 异常体系的基类[^1]。它有两个直接子类:`Exception` 和 `Error`。 --- #### 2. **Error** `Error` 表示 JVM 或运行时环境中的严重问题,通常程序无法处理这些错误。它们通常由系统抛出,并且不需要程序员显式捕获或处理。 - **常见 Error 示例**: - `StackOverflowError`:当方法调用栈溢出时抛出。 - `OutOfMemoryError`:当 JVM 内存不足时抛出。 --- #### 3. **Exception** `Exception` 表示程序可以捕获并处理的异常情况。根据是否需要强制检查,`Exception` 又分为两类[^4]: ##### (1) **Checked Exception(受检异常)** - 必须在代码中显式处理(通过 `try-catch` 或 `throws` 声明),否则编译器会报错。 - **特点**:这类异常通常是外部环境引起的,如文件操作、网络通信等。 - **常见 Checked Exception 示例**: ```java IOException // 输入输出异常 SQLException // 数据库访问异常 ``` - **说明**:从语法角度看,这些异常必须被处理,否则程序无法编译通过[^4]。 ##### (2) **Unchecked Exception(非受检异常)** - 不需要强制处理,通常是由程序逻辑错误导致的。 - **特点**:这类异常通常可以通过改进代码逻辑来避免。 - **常见 Unchecked Exception 示例**: - `RuntimeException` 及其子类: - `NullPointerException`:尝试访问空对象时抛出。 - `ArrayIndexOutOfBoundsException`:数组索引越界时抛出。 - `ClassCastException`:非法类型转换时抛出。 --- #### 4. **自定义异常** 除了使用内置的异常类型外,Java 还允许开发者创建自定义异常以满足特定需求。自定义异常可以通过继承 `Exception` 或 `RuntimeException` 来实现[^3]。 - **示例代码**: ```java class CustomException extends Exception { public CustomException(String message) { super(message); } } public class Main { public static void main(String[] args) { try { throw new CustomException("这是一个自定义异常"); } catch (CustomException e) { System.out.println(e.getMessage()); } } } ``` --- #### 5. **异常处理机制** Java 提供了 `try-catch-finally` 和 `throws` 关键字来处理异常[^2]。 - **`try` 块**:用于包裹可能抛出异常的代码。 - **`catch` 块**:用于捕获并处理特定类型的异常。 - **`finally` 块**:无论是否发生异常,都会执行的代码块(通常用于资源释放)。 --- ### 总结 Java 的异常体系主要分为 `Error` 和 `Exception` 两大类。`Error` 通常表示不可恢复的严重问题,而 `Exception` 则进一步分为 `Checked Exception` 和 `Unchecked Exception`。此外,开发者还可以通过继承 `Exception` 或 `RuntimeException` 创建自定义异常,以增强代码的健壮性和可维护性[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值