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

【Java】异常

敲代码时遇到的报错、数据里突然跳脱的数值、生活中打破常规的小插曲,我们总习惯把这些 “异常” 当作麻烦。但其实,每一次异常都是系统或生活在发出信号 —— 它可能暴露了隐藏的漏洞,也可能指向新的可能性。 这篇博客想和你聊聊如何看待、应对异常,或许能让你在下次遇到 “意外” 时,多一份从容与洞察。

1.Thorwable

Java 所有异常类都直接或间接继承自 java.lang.Throwable(顶层父类),它有两个核心子类:

error:是指java虚拟机无法解决的问题,如:JVM内部错误、资源耗尽等,典型代表:stackOverflowError和OutOfMemoryError,一旦发生回力乏术,程序会直接崩溃。

Exception:程序运行时可预见、可处理的异常(如输入错误、文件不存在),是开发者关注的核心。

Exception 又分为两大类,核心区别是「是否必须显式处理」:

  1. 受检异常(Checked Exception):编译期强制要求处理的异常(编译器会报错),通常是外部环境导致的(如文件不存在、网络连接失败),必须通过 try-catch 捕获或 throws 声明抛出。典型代表:IOException、SQLException、ClassNotFoundException。
  2. 非受检异常(Unchecked Exception):编译期不强制处理的异常,通常是代码逻辑错误导致的(如空指针、数组越界),继承自 RuntimeException。

2.throw

public class ArithmeticException extends RuntimeException{public ArithmeticException() {}public ArithmeticException(String message) {super(message);}
}

自定义一个类,这个ArithmeticException继承于RuntimeException
在这里插入图片描述

  1. throw必须在方法中。
  2. throw抛出的对象必须是Exception或者Exception的子类的对象。
  3. 如果抛出的是RuntimeException或者RuntimeException的子类,也可以不处理,JVM来处理。
  4. 如果抛出编译器异常必须当下处理。

3.异常的捕获throws

修饰符 返回值类型 方法名() throws 异常类型、…{} 可以有多个异常类型

4.try-catch捕获并处理

throws并没有对异常进行处理,常常是将异常传给JVM,而且会告诉其方法,如果是真正要对异常进行处理的话,就要用try-catch

try{
fun(10); // 可能发生异常的方法
}catch(ArithmeticException e){
//处理异常
}catch(){} // 可以有多个catch
finally{}

注:
Exception是大部分异常的父类,都是自下而上的所以可以用Exception来兜底。
如果异常有父子关系,那么要将子写在前,父写在后.
finally不管抛出异常不,只要不在其之前程序崩溃就会执行里面的代码

5.面试题

5.1thorw和throws的区别

对比维度throwthrows
核心作用主动抛出「具体的异常对象」(触发异常)声明方法「可能会抛出」的异常类型(告知调用者)
语法位置方法体内部(是可执行语句)方法签名后(紧跟 (),是方法声明的一部分)
操作对象异常对象(需 new 实例,如 new NullPointerException()异常类型(如 IOExceptionRuntimeException
数量限制一次只能抛出 1 个异常对象可声明多个异常类型(用逗号分隔)
与受检异常关系抛出受检异常时,方法必须用 throws 声明该异常(否则编译报错);抛出非受检异常(RuntimeException 子类)可不用声明仅用于声明「受检异常」(编译器强制要求),非受检异常可声明也可不声明(不推荐声明)
代码示例throw new IllegalArgumentException("参数非法");public void readFile() throws IOException, FileNotFoundException {}

5.2 throw

他是手动触发异常(且在方法内执行):

throw 是「执行语句」,写在方法体里,作用是主动触发一个具体的异常(比如业务逻辑校验失败时)。


关键细节:
1.必须抛出「异常对象」(需通过 new 关键字创建,或使用已存在的异常对象);
2.抛出后,当前代码块的执行会立即中断,跳转到异常处理流程(catch 块);
3.若抛出的是「受检异常」(如 IOException),方法必须用 throws 声明该异常(否则编译报错);若抛出的是「非受检异常」(如 IllegalArgumentException),可不用声明。

5.3 throws

声明方法可能抛出的异常(方法签名后):

throws 是「方法声明的一部分」,写在方法名和参数列表之后,作用是告知调用者:该方法可能会抛出这些异常,请你处理(调用者需用 try-catch 捕获,或继续用 throws 向上抛)。


注:
1.仅声明「异常类型」,不抛出具体对象(实际抛出仍需 throw 语句);
2.可声明多个异常类型,用逗号分隔;
3.仅对「受检异常」有强制要求(编译器会检查:方法内若抛出受检异常,必须在 throws 中声明);非受检异常(RuntimeException 子类)可声明也可不声明(声明了也没错,但没必要,因为编译器不强制调用者处理)

http://www.dtcms.com/a/573697.html

相关文章:

  • 底层视觉及图像增强-项目实践-细节再<十六-5,如何用AI实现LED显示画质增强:从经典到实战-再深挖>:从LED大屏,到手机小屏,快来挖一挖里面都有什么
  • 如果做一个网站网站开发采用的技术方案说明
  • 吉安市规划建设局网站重庆五号线金建站
  • BST平衡二叉树相关
  • Spring Boot3零基础教程,事态感知API doOnXXX,笔记111
  • 个人性质网站唐尧文化 网站建设工作总结
  • JDBC - 数据库连接池
  • R 包中的生命周期触发函数全解析
  • 华为WATCH D2 WATCH GT6:秋季来临,尊爱老人的智能守护
  • LangChain RAG 完整流程实战解析
  • 镇江建设质量监督站网站移动app网站模板
  • 【论文精读】SV3D:基于视频扩散模型的单图多视角合成与3D生成
  • 视频融合平台EasyCVR级联失败问题排查:请求上级播放后,视频为何无法打开?
  • 哪个网站能下载gif品牌红酒的网站建设
  • 登录失败次数限制
  • wordpress文章图片目录网站改版的seo注意事项
  • 【git】git clone含有lfs大文件时卡在resolving deltas(100%)的解决方案
  • 外贸和网站制作个人网站有什么内容
  • 开发一个完整的Electron应用程序
  • 从测试小白到高手:JUnit 5 核心注解 @BeforeEach 与 @AfterEach 的实战指南
  • App 怎么上架 iOS?从准备资料到开心上架(Appuploader)免 Mac 上传的完整实战流程指南
  • 智能安全管理 基于视觉分析的玩手机检测系统 手机行为AI模型训练 边缘计算手机行为监测设备
  • 做网站的必备软件php安防企业网站源码
  • 旅游自媒体网站怎么做c2c网站建设系统
  • Apache HTTP Server 2.4.65 详细安装教程(基于 CentOS 7)
  • 建行个人网站河池网站建设
  • 河北网站备案多久关于网站建设的请示范文
  • 坑#Spring#NullPointerException
  • 做视频网站用什么格式教育+wordpress模板下载
  • 排序算法