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 类。
相关推荐
吴冰_hogan2 分钟前
ThreadLocal详解:深入探讨导致JVM内存泄露的原因及预防措施
java·开发语言·jvm
shaxin观yin4 分钟前
24强网wp
开发语言·python
tmacfrank7 分钟前
Coroutine 基础八 —— Flow 操作符(二)
android·开发语言·kotlin
苹果酱056716 分钟前
Golang的代码质量分析工具
java·vue.js·spring boot·mysql·课程设计
JoneMaster24 分钟前
[读书日志]从零开始学习Chisel 第三篇:Scala面向对象编程——类和对象(敏捷硬件开发语言Chisel与数字系统设计)
开发语言·嵌入式硬件·学习·硬件架构·scala
武子康24 分钟前
大数据-268 实时数仓 - ODS层 将 Kafka 中的维度表写入 DIM
java·大数据·数据库·数据仓库·分布式·mysql·kafka
silver988632 分钟前
reactor中的并发
java·reactor
java1234_小锋34 分钟前
Zookeeper是如何保证事务的顺序一致性的?
java·zookeeper·java-zookeeper
drebander2 小时前
Kotlin 协程与异步编程
开发语言·微信·kotlin
arong_xu2 小时前
C++23 格式化输出新特性详解: std::print 和 std::println
开发语言·c++·c++23