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 类。
相关推荐
IT古董37 分钟前
第四章:大模型(LLM)】06.langchain原理-(3)LangChain Prompt 用法
java·人工智能·python
轻抚酸~4 小时前
小迪23年-32~40——java简单回顾
java·web安全
Sirius Wu6 小时前
Maven环境如何正确配置
java·maven
七七&5566 小时前
2024年08月13日 Go生态洞察:Go 1.23 发布与全面深度解读
开发语言·网络·golang
java坤坤6 小时前
GoLand 项目从 0 到 1:第八天 ——GORM 命名策略陷阱与 Go 项目启动慢问题攻坚
开发语言·后端·golang
元清加油6 小时前
【Golang】:函数和包
服务器·开发语言·网络·后端·网络协议·golang
健康平安的活着7 小时前
java之 junit4单元测试Mockito的使用
java·开发语言·单元测试
Java小白程序员7 小时前
Spring Framework :IoC 容器的原理与实践
java·后端·spring
xuTao6677 小时前
Easy Rules 规则引擎详解
java·easy rules
DjangoJason8 小时前
C++ 仿RabbitMQ实现消息队列项目
开发语言·c++·rabbitmq