Java——异常

本文详细介绍了Java中的异常处理机制,包括try-catch-finally的使用方式,异常匹配原则以及finally块的执行顺序。同时,讲解了throw和throws关键字在异常处理中的作用,并探讨了如何自定义异常类。最后,提到了finally与final的区别,帮助读者深入理解Java异常处理的核心概念。
摘要由CSDN通过智能技术生成

Java——异常

异常(意外)

程序没有语法错误,可能产生的运行时的错误

语法错误: —>编译不通过,编译错误

产生的原因

  1. 编程出现错误,数组越界,逻辑问题(一定要解决的)
  2. 用户不正当操作,程序员有相关的处理方式

异常的结构图

在这里插入图片描述

异常的处理

try-catch-finally方式
try{
    //可能出现异常的代码
}catch(异常类型 异常对象){
    //处理异常的代码
}catch()...
    //catch可以写多个
    
//特殊的:在jdk1.8及以上中,catch中可以将多个异常类型写在一起 catch(异常类型1 | 异常类型2 |异常类型3 异常对象)    

书写catch时:

当有多个异常时,同时两个异常类型之间没有父子关系,那么这些异常的顺序可以随意;但当这些异常之间存在父子关系时,书写要遵从先写子异常后写父异常的顺序

同时在讲多个异常折合写在一个catch中时,这些折合的异常之间不能存在父子 关系

简单记:先子后父,兄弟随意

catch匹配的原则:从上往下

执行流程:

没有产生异常 ------> 正常执行:把try中的代码全部执行完,但不会执行catch中的代码

产生异常 ------> 执行try中正常的代码—>遇到出现异常的代码,产生异常(产生异常后面的代码不会执行)---->产生异常对象和catch捕获的异常类型相匹配,跳转执行catch中的代码;如果不相匹配,jvm中断执行,把异常堆栈信息在控制台打印出来

try:存放可能出现异常的代码

catch:匹配异常,处理异常的代码

finally:最终地,里面放的代码一定执行

代码中既有return和finally,finally中的代码在return前面执行------> 这里强调的是在return的结束方法之前执行

过程:return返回一个值—>执行finally中的代码—>return结束方法 同时finally无法改变return的返回值

使用:

  • try一定要和catch、finally中的至少一个一起使用,三个不能独立存在
  • try-catch try-finally try-catch-finally
  • try、catch、finally中定义的变量,只在他们自身的大括号内有效

finally和final的区别

finallyfinal
最终地最终的
配合try使用修饰方法、变量、属性
finally{ //代码 } 其中的代码是一定要执行的
throw + throws方式
throw 异常对象;		//写在方法体内,抛一个一场对象,同时也会结束该方法   可以替换return
throws 异常类1,异常类2;	//写在方法定义上,声明该方法可能会抛出什么类型的异常

细节:

  1. throw 异常对象:如果这个异常对象类型是编译时异常(非RuntimeException),一定要在方法上使用throws声明
  2. throw 异常对象:如果这个异常对象类型是运行时异常(RuntimeException),方法上可以使用throws声明,也可以不使用
  3. 如果方法调用了其他代码(方法),其他代码对该方法抛了一个异常,此时
  • 可以使用try-catch处理该异常
  • 也可以在方法上使用throws 异常类型,把这个异常继续网上抛,异常可以一直往上抛,都不处理,只能交给jvm处理;jvm处理方式:中断代码执行,在控制台输出异常堆栈信息

异常对象

自定义异常

根据业务需求,对某些情况,也希望有对应的异常类,但是jdk提供的异常中没有

此时,我们可以自己定义一个异常类

步骤
  1. 编写一个类
  2. 让这个类继承java.lang.Exception或者是其子类
  3. 根据父类的构造方法,生成本类的构造方法(通过super()实现)

此时,我们可以自己定义一个异常类

步骤
  1. 编写一个类
  2. 让这个类继承java.lang.Exception或者是其子类
  3. 根据父类的构造方法,生成本类的构造方法(通过super()实现)
  4. 在业务代码中,使用throw new 自定义异常类名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值