当前位置: 首页 > news >正文

java篇12-Java中的异常

java中的异常是一个类,处理异常就是创建一个异常类对象并抛出这个对象,java处理异常的机制是中断,异常不是语法错了,语法错了编译不通过,不会产生字节码文件,不会运行,而异常是在运行过程中导致JVM非正常停止。

1.异常体系

异常的根类是java.lang.Throwable,其下有两个子类:java.lang.Error(错误不能处理)和java.lang.Exception(通常所说的异常是指Exception)

2.Exception:编译异常与运行异常

(IDE会显示编译异常不会显示运行异常)
( 1)编译异常是在进行编译时出现的异常。
(2)运行异常编译不会出错,但是运行过程中会报错。运行异常的典例是访问越界。例如下例(javac编译时未出错,java运行时报错):

对于含有异常通过可以使用try-catch结构,抛出异常后程序可以继续执行。如下例:

try-catch抛出了异常Exception e但是后面的System.out.println(“后续代码”);这条语句也执行了。
注意,并不是try中语句都不执行,而是从出错的地方停止执行:

3.错误(Error):通过编译,运行时出错


错误必须修改源代码,否则不能正常执行。

4.throws

throws(其实对于方法来说throws语句写与不写差别不大–不论是程序字节码在JVM运行中出现异常还是用throw语句显式抛出,可能后台运行时异常的转交过程不同)
在一个函数名后面写了throws是把函数执行过程中产生的异常抛出,交给JVM处理,JVM接收异常后会终止运行(未使用try-catch捕获异常)并输出异常信息。
throws 只是声明该方法可能抛出异常,提醒调用者处理,真正决定程序是否终止的是异常有没有被 catch 捕获。如果异常被 catch 住,程序正常继续运行,如果异常一直往上抛到 main 且未被捕获,JVM 才终止。

5.throw

throw(注意不是throws):程序执行过程中throw异常后程序终止执行。

throw关键字后面创建的异常是编译异常,必须处理这个异常,要么throws要么try-catch。



当然,上面指定抛出的IOException不对。

RuntimeException是运行期异常,运行期异常及其子类异常不用程序员处理,交给JVM处理,NullPointerException(空指针)和ArrayIndexOutOfBoundsException(数组越界访问)属于运行期异常。
下例是一个ArrayIndexOutOfBoundsException(数组越界访问):



上面这个例子不常见,因为对于异常的处理方法为抛出异常或者try-catch捕获(后面会讲到),这里其实是抛出异常了,程序终止。
注意,如果函数中new的异常对象不是运行期异常对象或其子类的异常对象,则

5.1有两种异常处理方式

(1)函数声明后必须加关键字throws


格式:

函数里throw几个异常对象throws后面就要相应地写几个(除非某些是另一个地子类,则可以只写父类)。

(2)用try-catch捕获异常



另外可以写加上final模块,无论是否抛出异常都会执行。格式:



注意:finally 块一定会在方法返回或抛出异常之前执行(除非 System.exit() 或 JVM 崩溃)。
即使 catch 中有 throw,也要先等 finally 执行完,才会把异常抛给上层调用者。

6.Objects非空判断

java的内置类Objects有一个静态函数可以判断参数是否为null,若是则会抛出异常。使用它可以简化代码而不用写if语句再new NullPointerException(“xxx”)。
Objects的静态方法源码:

使用方式:

上例中若obj为空指针则会抛出异常。
该静态方法还有一个重载方法(多了一个字符串参数,该参数抛出异常信息):

7.关于子父类的异常

http://www.cnnetsun.cn/news/2507625.html

相关文章:

  • 7大核心功能,彻底解放你的Windows操作体验:QKeyMapper按键映射深度指南
  • KMS_VL_ALL_AIO:三步掌握Windows和Office智能激活的终极方案
  • 专升本(专插本)英语单词词汇表PDF电子版
  • 如何在3分钟内制作Windows安装U盘:Rufus完全指南
  • 微信抢红包终极指南:三步快速上手智能辅助工具
  • Emu与主流多模态模型对比分析:为什么它是最佳选择
  • OptScale 成本分析报告:如何解读和利用优化建议实现38%云成本节省
  • C++并发编程与线程安全
  • KMS_VL_ALL_AIO:三步永久激活Windows和Office的智能解决方案
  • Minecraft服务器动态内容注入:PlaceholderAPI架构设计与性能优化实践
  • 清晰透明的用量看板与账单,让Taotoken上的每一分Token花费都心中有数
  • 如何快速配置Bilibili-Evolved:打造完美快捷键体验的终极指南
  • Unity AI Chat Toolkit:5分钟打造智能对话应用的终极指南
  • SQLite Viewer:在浏览器中直接查看数据库的零安装神器
  • 观测C语言程序调用大模型API的延迟与稳定性表现
  • Wechaty Puppet WeChat实战指南:构建稳定可靠的微信自动化助手
  • 毫米级精准不复杂!YOLO26 姿态模型在前臂解剖点检测的对比研究
  • 终极指南:使用elan轻松管理Lean定理证明器版本 [特殊字符]
  • eLabFTW:重新定义实验室数字化的开源利器,让科研管理变得简单高效
  • 为内部知识库问答系统接入Taotoken提供稳定可靠的AI理解能力
  • LangGraph 节点依赖管理:拓扑排序+循环依赖检测的实现
  • 智能网盘直链解析工具:免会员下载加速的全新解决方案
  • Go操作Kubernetes API、Service Mesh(Linkerd)集成、Serverless函数编写
  • 终极指南:如何在Windows上快速搭建企业级Hadoop开发环境
  • 如何用Rufus制作专业级USB启动盘:从新手到专家的完整指南
  • 终极指南:如何在5分钟内为MicroPython项目添加ST7789显示屏驱动
  • 别再一个字一个字硬憋了!书匠策AI教你用“外挂级“操作把毕业论文从0拖到100
  • HoRain云--Claude Code 交互模式
  • 原神抽卡记录分析工具:免费开源方案助你掌握抽卡数据
  • MicroPython嵌入式开发:如何用ST7789py_mpy驱动库打造高性能显示方案