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

Java异常

异常的体系结构

在java的Throwable下有Error和Exception两个子类

  • Error(错误):程序运行中出现了严重的问题,非代码性错误,无法处理,常见的有虚拟机运行错误和内存溢出等
  • Exception(异常):是由于代码本身造成的问题,可以进行处理,异常一个可以分为运行时异常编译时异常
    在这里插入图片描述
    运行时异常(unchecked exception):在Exception类下RuntimeException类以及其下面所有的子类都是运行时异常;运行时异常只有在程序运行时才能被发现,编译期间不能被发现
    编译时异常(checked exception):在Exception类下除了RuntimeException类及其子类其他的异常都是编译时异常;如果有编译时异常(异常不被处理)程序不能通过编译

异常的抓抛模型

抓抛模型分为抓和抛两个过程

  • : 程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应有异常类的对象,并将此对象抛出给程序的调用者,一旦抛出对象后其后的代码就不再执行
  • :异常的抓取也就是对异常的两种处理方式( try-catch-finally方式和throws+异常类型方式)
    方式一:try-catch-finally
    使用try将可能有问题的代码包裹起来;发生异常后自动生成一个对应类型的异常对象,此后会根据catch中的异常类型匹配,匹配到对应的catch后进入catch中进行异常处理,完成处理后跳出try-catch结构(如果有finally执行finally中代码)继续执行后面的代码
public void fileTest() throws IOException {try{//拿到文件字节流FileInputStream fis = new FileInputStream("E:/upload/test2.txt");InputStreamReader isr = new InputStreamReader(fis);...}catch(IOException e){//catch声明的异常类型如果没有子父类关系,声明先后没有关系,如果存在子父类关系,则子类声明在父类之前,否则报错....//处理异常//常用异常的处理方法://e.getMessage();//e.printStackTrace();}finally{fis.close();//关闭输入流//像数据库连接,输入输出流,socket等资源,JVM是不能自己回收的,需要自己手动释放,这些资源的释放应该放在finally中}}

注意:
方式二:throws+异常类型
发生异常后还会生成一个异常对象;抛出异常对象后不再执行后面的代码,throws只是将异常抛给了方法的调用者,并不能真正的解决异常。
对父类的方法重写抛出异常: 子类抛出的异常不能大于父类抛出的异常
子类重写父类的方法,父类没有异常,子类也不能抛出异常,只能用try-catch立马解决。
手动抛出异常

throw new 异常类();

自定义异常
1.继承现有的异常结构:RuntimeException,Exception
2.提供全局变量:serialVersionUID
3.提供重载的构造器

异常链
一个父类的多个子类可能会出现多种异常,当需要将异常向上传递的时候,父类可以抛出的异常一定要大于子类的异常,在传递过程中会造成异常信息的丢失,从而给后面的维护工作造成麻烦。可以通过在子类的catch中手动的throw一个异常写明抛出异常的原因,然后将这个异常继续向上抛出,从而形成一个异常链,保留最原本发生异常的信息。

public class Test {public void f1() throws MyException {try {FileReader reader = new ...} catch (FileNotFoundException e) {throw new MyException("文件没有找到", e);}}public void f2() throws MyException {try {f1();} catch (MyException e) {throw new MyException("文件没有找到", e);}}public static void main(String[] args) {Test t = new Test();try {t.f2();} catch (MyException e) {e.printStackTrace();}}
http://www.lryc.cn/news/23720.html

相关文章:

  • 别克GL8改装完工,一起来看看效果
  • mac 中 shell 一些知识
  • CentOS 配置FTP(开启VSFTPD服务)
  • Http的请求方法
  • Python字典-- 内附蓝桥题:统计数字
  • 文本处理工具
  • C++STL详解(三)——vector的介绍和使用
  • GEBCO海洋数据下载
  • 【C++容器】vector、map、hash_map、unordered_map四大容器的性能分析【2023.02.28】
  • ACM-蓝桥杯训练第一周
  • python基础—字符串操作
  • 【Spring】通过JdbcTemplate实现CRUD操作
  • 实战|掌握Linux内存监视:free命令详解与使用技巧
  • 嵌入式入门必看!调试工具安装——基于 AM64x核心板
  • JAVA开发(java类加载过程)
  • 【vulhub漏洞复现】Thinkphp 2.x 任意代码执行
  • LeetCode 1145. 二叉树着色游戏 -- 简单搜索
  • HyperGBM的三种Early Stopping方式
  • 心系区域发展,高德用一体化出行服务平台“聚”力区域未来
  • AI画图_stable-diffusion-webui安装使用指南(1)
  • 浅谈MySQL主从复制
  • docker-compose安装kafka和php简单测试
  • 【蓝桥云课】快速幂
  • 解决windows安装wxPython安装失败、速度过慢及PyCharm上wx包爆红问题
  • 封装小程序request请求[接口函数]
  • 嵌入式 STM32 通讯协议--MODBUS
  • 互联网人看一看,这些神器你用过哪些?
  • Kotlin学习:5.2、异步数据流 Flow
  • EPICS synApps介绍
  • Pycharm和跳板机 连接内网服务器