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

2年前 (2022) 程序员胖胖胖虎阿
200 0 0

文章目录

  • 💨更多相关知识👇
    • 一、异常概述
      • 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 会做默认的处理
   
        * 程序停止执行
 
        * 把异常的名称,异常原因及异常出现的位置等信息输出在了控制台

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


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("结束");

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


⚡注意事项
      *try里面的代码,有一行出错了,这行下面的代码都不会执行了

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


🥑 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("其他代码");

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


🥑多个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("未知错误");
        }

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


🌟案例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("其他代码");
        
*/      

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


🌟案例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中的异常处理与解决方案详解上篇


🔥系列热门专栏🔥:
 
⚡《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代码块
*/

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


🌟案例2(有异常的时候)
  try{
        int i=5/0;
            System.out.println("try代码块");
        }catch (Exception e){
            System.out.println("catch代码块");
        }finally {
            System.out.println("finally代码块");
        }

        /*

          有异常:
              catch代码块
              finally代码块
         */

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


🌟案例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

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


🌟案例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)最高级别

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


作者:KJ.JK

文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

相关文章

暂无评论

暂无评论...