Java异常处理知识点讲解

#### **一、常见运行时异常**

1. **数组越界异常(ArrayIndexOutOfBoundsException)**  

   - **原因**:访问数组时索引超出有效范围(如数组长度为5,但访问索引5)。  

   - **解决**:在访问前检查索引是否满足 `0 <= index < array.length`。  

   - 示例:  

     ```java

     int[] arr = new int[3];

     for (int i = 0; i <= arr.length; i++) { // 错误:i最大应为2

         System.out.println(arr[i]);

     }

     ```

 

2. **数学逻辑异常(ArithmeticException)**  

   - **原因**:除数为0。  

   - **解决**:在除法运算前检查除数是否为0,或用`try-catch`捕获。  

   - 示例:  

     ```java

     int a = 10, b = 0;

     if (b != 0) {

         System.out.println(a / b);

     } else {

         System.out.println("除数不能为0");

     }

     ```

 

3. **空指针异常(NullPointerException)**  

   - **原因**:调用未初始化对象的方法或属性。  

   - **解决**:使用对象前判空。  

   - 示例:  

     ```java

     String str = null;

     if (str != null) {

         System.out.println(str.length());

     }

     ```

 

---

 

#### **二、编译时异常(Checked Exceptions)**

1. **字符串解析异常(如ParseException)**  

   - **原因**:字符串格式与目标类型不匹配(如日期格式错误)。  

   - **解决**:确保格式一致,并用`try-catch`处理。  

   - 示例:  

     ```java

     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

     try {

         Date date = sdf.parse("2024/07/09"); // 格式错误,应为2024-07-09

     } catch (ParseException e) {

         e.printStackTrace();

     }

     ```

 

2. **文件操作异常(如IOException)**  

   - **原因**:文件路径错误或权限不足。  

   - **解决**:使用`try-catch`或在方法签名中用`throws`声明。  

   - 示例:  

     ```java

     public void readFile() throws IOException {

         FileReader fr = new FileReader("test.txt");

     }

     ```

 

---

 

#### **三、异常处理机制**

1. **抛出异常(Throws)**  

   - **定义**:将异常传递给上层调用者,不直接处理。  

   - **适用场景**:当前方法无法解决异常时。  

   - 示例:  

     ```java

     public void methodA() throws IOException {

         methodB();

     }

     ```

 

2. **捕获处理(Try-Catch)**  

   - **定义**:在当前方法内捕获并处理异常。  

   - **适用场景**:可在当前方法内解决异常时。  

   - 示例:  

     ```java

     try {

         int result = 10 / 0;

     } catch (ArithmeticException e) {

         System.out.println("除数为0");

     }

     ```

 

---

 

#### **四、常见问题**

1. **为什么`catch`块未执行?**  

   - 可能未触发对应异常,或异常被上层捕获。  

   - 检查代码逻辑,确保异常类型匹配。

 

2. **空指针与空对象的区别**  

   - **空指针**:`String str = null`,未指向任何对象,调用方法会抛异常。  

   - **空对象**:`String str = ""`,对象存在且长度为0,调用`length()`返回0。

 

3. **多异常处理**  

   - 使用多个`catch`块或捕获父类异常(如`Exception`)。  

   - 示例:  

     ```java

     try {

         // 可能抛出多个异常的代码

     } catch (IOException e) {

         // 处理IO异常

     } catch (ParseException e) {

         // 处理解析异常

     }

     ```

 

---

 

#### **五、总结**

- **运行时异常**:需通过代码逻辑避免(如判空、检查索引/除数)。  

- **编译时异常**:必须显式处理(`try-catch`或`throws`)。  

- **原则**:能处理的异常尽量在底层解决,避免过多向上层传递。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值