Java异常详解

异常概念:

异常(Exception) :是指程序在运行中的出现的错误,程序本身可以捕获并处理,异常能被程序本身可以处理,错误是无法处理。例如:在进行除法运算时,若除数为0,则程序运行时会自动抛出算数异常。

Java 异常 :也是通过一个对象来表示的,程序运行时抛出的异常,实际上就是一个异常对象,该对象中不仅封装了错误的信息,还提供了一些处理方法。

异常体系结构:

常见的异常类列表

注意:若不知道代码抛出是那种异常,可以指定它们的父类 Throwable 和 Exception。

异常分类:运行时异常和编译异常

1、运行时异常(不受检异常):RuntimeException类极其子类表示JVM在运行期间可能出现的错误。比如说试图使用空值对象的引用(NullPointerException)、数组下标越界(ArrayIndexOutBoundException)。此类异常属于不可查异常,一般是由程序逻辑错误引起的,在程序中可以选择捕获处理,也可以不处理。

2、编译异常(受检异常):Exception中除RuntimeException极其子类之外的异常。如果程序中出现此类异常,比如说IOException,必须对该异常进行处理,否则编译不通过。在程序中,通常不会自定义该类异常,而是直接使用系统提供的异常类。

异常的处理机制

jvm默认的异常处理方式:在控制台打印错误信息,并终止程序。

抛出异常, 调用者处理 (throw/throws)

方法上直接throws抛出

捕获异常,自己处理 (try-catch(finally))
1
2
3
4
5
6
7
8
9
try {
       //可能产生的异常的代码区
   }catch (ExceptionType1 e) {
       //捕获并处理try抛出异常类型为ExceptionType1的异常
   }catch (ExceptionType2 e){
       //捕获并处理try抛出异常类型为ExceptionType2的异常
   }finally{
       //无论是出现异常,finally块中的代码都将被执行
   }

try catch finally 执行顺序结论

  1、不管有没有出现异常,finally块中代码都会执行;

  2、当try和catch中有return时,finally仍然会执行;

  3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,

       不管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;

  4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。

  以下几种情况,finally代码块不会被执行:

  1、 在前边的代码中使用System.exit()退出应用。

  2、 程序所在的线程死亡或者cpu关闭

  3、 如果在finally代码块中的操作又产生异常,则该finally代码块不能完全执行结束,同时该异常会覆盖前边抛出的异常。

 

posted @   江南大才子  阅读(125)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示