0


【JavaEE进阶序列 | 从小白到工程师】JavaEE中的异常处理与解决方案详解上篇

文章目录


🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈

🍂个人博客首页: 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,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习


本文转载自: https://blog.csdn.net/m0_47384542/article/details/125882818
版权归原作者 KJ.JK 所有, 如有侵权,请联系我们删除。

“【JavaEE进阶序列 | 从小白到工程师】JavaEE中的异常处理与解决方案详解上篇”的评论:

还没有评论