文章目录
- 💨更多相关知识👇
-
- 一、异常概述
-
- 1、什么是异常?
- 2、异常的分类
- 二、异常的处理
-
- 1、JVM 的默认处理方案
- 2、异常的处理 – try catch
-
- 🥑 为什么要try-catch?
- 🥑 try-catch的格式
-
- ⭐代码演示
- ⚡注意事项
- 🥑 try-catch的使用注意
- 🥑多个try-catch的格式
-
- ⭐代码演示
- 🥑多个catch使用注意
-
- 🌟案例1演示(多个catch中的异常不能相同)
- 🌟案例2演示(子父类异常)
- 🌟案例3演示(多个catch最多也只会执行一个)
- 3、finally代码块
-
- 🍍为什么需要finally代码块?
- 🍍finally代码块的格式
-
- 🌟案例1演示(无异常的时候)
- 🌟案例2(有异常的时候)
- 🌟案例3(当finally遇到return)
- 🌟案例4(当finally遇到System.exit(0))
- 作者:KJ.JK
🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈
🍂个人博客首页: 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
|
Error Exception
* 错误,无法通过代码处理的严重问题 |
比如内存溢出 *编译时异常 *运行时异常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 = new SimpleDateFormat("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,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习
版权声明:程序员胖胖胖虎阿 发表于 2022年11月12日 下午3:48。
转载请注明:【JavaEE进阶系列 | 从小白到工程师】JavaEE中的异常处理与解决方案详解上篇 | 胖虎的工具箱-编程导航
转载请注明:【JavaEE进阶系列 | 从小白到工程师】JavaEE中的异常处理与解决方案详解上篇 | 胖虎的工具箱-编程导航
相关文章
暂无评论...