文章目录
🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈
🍂个人博客首页: KJ.JK
欢迎大家点赞👍收藏💖评论💬关注🔒
💖源码获取 | 💻学习交流 | 🤝商务合作 | 💨私信作者
💨更多相关知识👇
💖JavaEE中的静态方法定义、方法重载要求、return作用详解
💖List接口的常用方法,精华总结
💖JavaEE里面的所有内部类详细介绍与使用
💖ArrayList集合中的常用成员方法
💖Java中String的split切割字符串方法详解
💖String中的replace的四个方法
💖JavaEE中的Stream流的常用方法
💖JavaEE中的Stream流知识点使用,精华总结,一文直接上手
💖JavaWeb中的过滤器(Filter)和监听器(Listener)区别
💖JavaEE中史上最全String类入门介绍文章,学习StringAPI这一篇即可
🐬JavaEE中的异常处理与解决方案(含throws声明异常与throw关键字)详解下篇 🐬
一、异常概述
1、什么是异常?
* 异常就是程序出现了不正常的情况
* 程序在执行过程中,出现的非正常的情况,最终会导致 JVM 的非正常停止
"Java有一套独立的异常处理机制,在遇到异常时,程序会抛出一个封装了错误信息的异常对象"
2、异常的分类
Throwable|ErrorException* 错误,无法通过代码处理的严重问题 |
比如内存溢出 *编译时异常 *运行时异常RuntimeException
编译时异常: 运行时异常:
直接继承"Exception",也叫检查时异常 继承自RuntimeException的异常
在编译时期就"必须处理",否则编译失败,程序无法运行 编译期间"无需处理",可以通过优化代码逻辑来解决
( 日期格式化异常ParseException、IO流输入异常 IOException)(空指针异常、算术异常、索引越界)
二、异常的处理
1、JVM 的默认处理方案
如果程序出现了问题,我们没有做任何处理,最终 JVM 会做默认的处理
* 程序停止执行
* 把异常的名称,异常原因及异常出现的位置等信息输出在了控制台
2、异常的处理 – try catch
🥑 为什么要try-catch?
* 如果程序出现异常而不处理,最终异常会传递到JVM虚拟机进行默认的处理,此时程序会"终止执行"
为了提高程序的健壮性,通常需要对异常进行 "捕捉"和"处理"//好处:可以让程序继续往下执行
🥑 try-catch的格式
格式:try{
可能出现异常的代码;}catch(异常类名 变量名){
异常的处理代码;}/* try-catch捕捉的执行流程:
执行try里面的代码,如果正常,不会执行catch
如果出现错误,执行catch,执行结束会正常往下执行
*/
⭐代码演示
try{SimpleDateFormat sf =newSimpleDateFormat("yyyy-MM-dd");Date date = sf.parse("2022 05-18");System.out.println("date:"+ date);}catch(ParseException e){//处理异常的代码System.out.println("日期转换失败,请检查格式");}System.out.println("结束");
⚡注意事项
* 当try里面的代码,有一行出错了,这行下面的代码都不会执行了
🥑 try-catch的使用注意
* 如果 try 中没有遇到问题,怎么执行?
答:正常执行try里面的代码,但是不会执行catch里面的代码
---------------------------------------------------------------------------------* 如果 try 中遇到了问题,那么 try 下面的代码还会执行吗?
答:在try中一旦遇到问题,会马上中断try语句块的代码,会直接跳到相应的catch结构中执行
------------------------------------------------------------------------------------* 如果出现的问题没有被捕获,那么程序如何运行?
答: 没有被捕获的异常会直接抛给上层调用者,如果都没捕捉处理,最终会传给虚拟机,导致"程序运行停止"
🥑多个try-catch的格式
格式:try{//可能会出现异常的代码}catch(异常类型A e){//处理异常的代码}catch(异常类型B e){//处理异常的代码}
⭐代码演示
try{int i=5/0;//算术异常int[]arr=null;System.out.println(arr.length);}catch(NullPointerException e){System.out.println("出现空指针异常,请检查");}catch(ArithmeticException e){System.out.println("算术异常");}System.out.println("其他代码");
🥑多个catch使用注意
1. 多个catch中的异常不能相同
2. 若catch中的多个异常之间有子父类异常的关系,那么子类异常要在上面的catch处理,父类异常在下面的catch处理
"( 就是说异常处理要从小到大,而不能把一个最大的异常处理放在前面,后面跟着小的)"3. 如果出现异常,多个catch最多也只会执行一个。(从上往下匹配)
🌟案例1演示(多个catch中的异常不能相同)
try{int[] arr=null;System.out.println(arr.length);int i=5/0;}catch(NullPointerException e){System.out.println("出现空指针异常,检查代码");}catch(NullPointerException e){//报错System.out.println("算术异常");}catch(Exception e){System.out.println("未知错误");}
🌟案例2演示(子父类异常)
try{int[] arr=null;System.out.println(arr.length);int i=5/0;}catch(Exception e){System.out.println("未知错误");}catch(NullPointerException e){//报错System.out.println("空指针异常 ");}catch(ArithmeticException e){//报错System.out.println("算术异常");}System.out.println("其他代码");-------------------------------------------------------------------------------------------/*正确代码
try {
int [] arr=null;
System.out.println(arr.length);
int i=5/0;
}catch (NullPointerException e){
System.out.println("出现空指针异常,检查代码");
}catch (ArithmeticException e){
System.out.println("算术异常");
}catch (Exception e){
System.out.println("未知错误");
}
System.out.println("其他代码");
*/
🌟案例3演示(多个catch最多也只会执行一个)
try{int[] arr=null;System.out.println(arr.length);int i=5/0;}catch(NullPointerException e){System.out.println("出现空指针异常,检查代码");}catch(ArithmeticException e){System.out.println("算术异常");}System.out.println("其他代码");
🔥系列热门专栏🔥:
⚡《JavaEE进阶序列 | 从小白到工程师》系列文章⚡
⚡《JavaEE项目实战》系列文章⚡
⚡《JavaSwing项目合集》系列文章⚡
⚡《数据分析中的pandas》系列文章⚡
3、finally代码块
🍍为什么需要finally代码块?
* 因为异常会引发程序跳转,导致某些语句执行不到,而有一些特定的代码无论异常是否发生都需要执行
finally代码块就可以解决这个问题,在"finally代码块中的代码一定会被执行"
🍍finally代码块的格式
格式1:try{//可能出现异常的代码}catch(异常类名 变量名){//处理异常的代码}finally{//必须执行的代码(数据库连接的关闭,IO流关闭,锁的释放)}
格式2:try{//可能出现异常的代码}finally{//必须执行的代码}/*
不管是否发生异常,finally代码块都会被执行
因此可以在finally代码块中执行关闭连接、关闭文件和释放线程锁的操作
*/
🌟案例1演示(无异常的时候)
try{System.out.println("try代码块");}catch(Exception e){System.out.println("catch代码块");}finally{System.out.println("finally代码块");}/*
无异常:
try代码块
finally代码块
*/
🌟案例2(有异常的时候)
try{int i=5/0;System.out.println("try代码块");}catch(Exception e){System.out.println("catch代码块");}finally{System.out.println("finally代码块");}/*
有异常:
catch代码块
finally代码块
*/
🌟案例3(当finally遇到return)
try{System.out.println("try代码块");return;}catch(Exception e){System.out.println("catch代码块");}finally{System.out.println("finally代码块");}/*
try代码块
finally代码块
*///当finally遇到return,在快要return的时候会执行finally里面的内容//finally的级别高过return
🌟案例4(当finally遇到System.exit(0))
try{System.out.println("try代码块");System.exit(0);}catch(Exception e){System.out.println("catch代码块");}finally{System.out.println("finally代码块");}/*
try代码块
*///当finally遇到System.exit(0) ,直接终止程序,不会执行finally//System.exit(0)最高级别
作者:KJ.JK
文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习
版权归原作者 KJ.JK 所有, 如有侵权,请联系我们删除。