Java异常处理总结

异常处理

执行过程中发生的异常事件分为两大类:

  1. Error(错误):Java虚拟机无法解决的严重问题。
  2. Exception:其它因编程错误或偶然的外在原因导致一般性问题,可以使用针对的代码进行处理。Exception分为两大类:运行时异常,和编译时异常。

异常体系图

  1. 异常分为两大类,运行时异常和编译时异常.
  2. 运行时异常,编译器不要求强制处置的异常。一般是指编程时的逻辑错误,是程序员应该避免其出现的异常。java.lang.RuntimeException类及它的子类都是运行时异常。
  3. 对于运行时异常,可以不作处理,因为这类异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响
  4. 编译时异常,是编译器要求必须处置的异常。

常见运行时异常

1.NullPointerException空指针异常:

java 复制代码
String str = null;
System.out.println(str.length());

2.ArithmeticExceptiom数字运算异常:

分母为0

3.ArrayIndexOutOfBoundsException:数组下标越界异常

java 复制代码
int[] arr = {1,2,3};
for (int i = 0; i <= arr.length; i++) {
    System.out.println(arr[i]);
}

4.ClassCastException类型转换异常:

当试图将对象强制转换为不是实例的子类时,抛出该异常。

5.NumberFormatException:

当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常=>使用异常我们可以确保输入是满足条件数字。

异常处理方式try-catch-finall

捕获异常:

java 复制代码
try
{
   // 程序代码
}catch(ExceptionName e1)
{
   //Catch 块
}

多重捕获块:快捷键 ctrl+alt+t

java 复制代码
try{
   // 程序代码
}catch(异常类型1 异常的变量名1){
  // 程序代码
}catch(异常类型2 异常的变量名2){
  // 程序代码
}catch(异常类型3 异常的变量名3){
  // 程序代码
}finally{   
//1.finally 关键字用来创建在 try 代码块后面执行的代码块。
//2.无论是否发生异常,finally 代码块中的代码总会被执行。
//3.在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。
}
  1. 如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch块
  2. 如果异常没有发生,则顺序执行try的代码块,不会进入到catch
  3. 如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等)则使用如下代码- finally

throws/throw 关键字

throwthrows 关键字是用于处理异常的。

throw 关键字用于在代码中抛出异常,而 throws 关键字用于在方法声明中指定可能会抛出的异常类型。

throw 关键字

用于在当前方法中抛出一个异常。

通常情况下,当代码执行到某个条件下无法继续正常执行时,可以使用 throw 关键字抛出异常,以告知调用者当前代码的执行状态。

例如,下面的代码中,在方法中判断 num 是否小于 0,如果是,则抛出一个 IllegalArgumentException 异常。

java 复制代码
public void checkNumber(int num) {
  if (num < 0) {
    throw new IllegalArgumentException("Number must be positive");
  }
}

throws 关键字

处理机制图:try-catch-finally和throws二选一

用于在方法声明中指定该方法可能抛出的异常。当方法内部抛出指定类型的异常时,该异常会被传递给调用该方法的代码,并在该代码中处理异常。

例如,下面的代码中,当 readFile 方法内部发生 IOException 异常时,会将该异常传递给调用该方法的代码。在调用该方法的代码中,必须捕获或声明处理 IOException 异常。

java 复制代码
public void readFile(String filePath) throws IOException {
  BufferedReader reader = new BufferedReader(new FileReader(filePath));
  String line = reader.readLine();
  while (line != null) {
    System.out.println(line);
    line = reader.readLine();
  }
  reader.close();
}

声明异常类

编写自己的异常类时需要记住下面的几点。

  • 所有异常都必须是 Throwable 的子类。
  • 如果希望写一个检查性异常类,则需要继承 Exception 类。
  • 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。
java 复制代码
class MyException extends Exception{
}

通用异常

在Java中定义了两种类型的异常和错误。

  • **JVM(Java虚拟机) **异常:由 JVM 抛出的异常或错误。例如:NullPointerException 类,ArrayIndexOutOfBoundsException 类,ClassCastException 类。
  • **程序级异常:**由程序或者API程序抛出的异常。例如 IllegalArgumentException 类,IllegalStateException 类。
相关推荐
雨中飘荡的记忆2 分钟前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
心之语歌2 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
华仔啊4 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang4 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构
Ray Liang5 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
Java水解5 小时前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端
SimonKing9 小时前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean10 小时前
Jackson View Extension Spring Boot Starter
java·后端
Seven9711 小时前
剑指offer-79、最⻓不含重复字符的⼦字符串
java
皮皮林55120 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java