【Java】throw异常后代码还执行吗?80%小伙伴竟然不知道

简介: 本文通过具体的Java代码示例,探讨了Java异常处理机制下的程序流程变化,包括未使用try-catch时异常导致流程中断、使用try-catch捕获异常后的不同执行路径、循环中的异常处理以及throw抛出异常后的代码执行情况。总结了异常处理的关键点,强调了finally块的重要性。

前言

🍊缘由

我这一生如履薄冰,异常之后该怎么走

🐣闪亮主角:

大家好,我是JavaDog程序狗

今天跟大家分享Java异常后,代码到底还执不执行?

本狗会以代码形式加以说明,详细将可能的情况予以列出,源码贴在后面,按需自测

😈你想听的故事

最近狗哥受领导任命,在公司帮忙面试

每当有年轻活力的面孔出现,就感慨道时光的飞逝,从最年轻的小白狗熬成老白狗

但最大的问题是,为啥每次面试都是爷们,没有妹子!!!

不好意思激动了,其实面试最大的问题就是基础,一般干过几年的程序员都会出现眼高手低的情况

就像本狗问了关于异常之后代码执行情况,基本大回答的都不满意

遂总结一下,跟大家来聊一下这异常之后代码的旅程,回顾一下基础知识

正文

🎯主要目标

实现1大重点

彻底弄懂异常后代码执行情况

🥦目标讲解

1.没有try-catch

方法A,没有使用try-catch捕获异常,出现异常后,后续代码不会执行

public static void A() {
   
   
    // 正常打印
    System.out.println("1.我在A方法,我在出现异常前打印");
    // 出现java.lang.ArithmeticException: / by zero 异常
    int a = 1 / 0;
    // 无法执行
    System.out.println("2.我在A方法,出现异常后打印");
}


2.使用try-catch捕获异常

方法B,使用try-catch捕获,出现异常后,try中后续代码不会执行,但后续代码不影响

public static void B() {
   
   
       System.out.println("1.我在B方法,我在出现异常前打印");
    try {
   
   
        // 出现java.lang.ArithmeticException: / by zero 异常
        int a = 1 / 0;
        // 无法执行
        System.out.println("2.我在B方法,出现异常后打印");
    } catch (Exception e) {
   
   
        e.printStackTrace();
        // 正常执行
        System.out.println("3.我在B方法,catch异常后打印");
    } finally {
   
   
        // 正常执行
        System.out.println("4.我在B方法,finally后打印");
    }
    // 正常执行
    System.out.println("5.我在B方法,try-catch-finally后打印");
}


3.使用try-catch捕获,并throw抛出异常

方法C,使用try-catch捕获,并throw抛出异常,后续代码不影响

  • throw后打印代码编译无法通过

  • throw后无代码,try之后所有代码不受影响
public static void C() {
   
   
       System.out.println("1.我在C方法,我在出现异常前打印");
    try {
   
   
        // 抛出异常
        throw new Exception("我是异常");
    } catch (Exception e) {
   
   
        System.out.println("2.我在C方法,catch异常后打印");
        // 正常执行
        e.printStackTrace();
    } finally {
   
   
        // 正常执行
        System.out.println("3.我在C方法,finally后打印");
    }
    // 正常执行
    System.out.println("4.我在C方法,try-catch后打印");
}


4.在循环中,没有使用try-catch捕获,异常后全部代码阻塞

public static void D() {
   
   
    for(int i=0; i<5; i++){
   
   
        System.out.println("第" + i + "次循环");
        int a = 1 / 0;
        // 异常后代码无法执行
        System.out.println("1.我在D方法,我在出现异常前打印");
    }
    // 异常后代码无法执行
    System.out.println("2.我在D方法,我在循环外打印");
}


5.在循环中,使用try-catch捕获,throw异常后代码不受影响

public static void E() {
   
   
    for(int i=0; i<5; i++){
   
   
        System.out.println("第" + i + "次循环");
        try {
   
   
            throw new Exception("我是异常");
        } catch (Exception e) {
   
   
            // 正常执行
            System.out.println("1.我在E方法,catch异常后打印");
            e.printStackTrace();
        } finally {
   
   
            // 正常执行
            System.out.println("2.我在E方法,finally后打印");
        }
    }
    // 正常执行
    System.out.println("3.我在E方法,我在循环外打印");
}

总结

  • 当Java程序中出现异常时,异常之后的代码是否执行取决于异常是否被捕获以及如何处理这些异常。

  • 使用try-catch结构可以控制异常发生后的程序流程。

  • finally块总是会被执行,除非程序在此之前的某个点被强制终止(例如通过调用System.exit())。

🍯猜你喜欢

文章推荐

【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)

【Java】@Transactional事务套着ReentrantLock锁,锁竟然失效超卖了

【规范】Git分支管理,看看我司是咋整的

【工具】珍藏免费宝藏工具,不好用你来捶我

【插件】IDEA这款插件,爱到无法自拔

【规范】看看人家Git提交描述,那叫一个规矩

【项目实战】SpringBoot+uniapp+uview2打造H5+小程序+APP入门学习的聊天小项目

【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序

【模块分层】还不会SpringBoot项目模块分层?来这手把手教你!

目录
相关文章
|
27天前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
315 4
|
1月前
|
Java 数据处理 API
为什么你的Java代码应该多用Stream?从循环到声明式的思维转变
为什么你的Java代码应该多用Stream?从循环到声明式的思维转变
227 115
|
1月前
|
安全 Java 编译器
为什么你的Java代码需要泛型?类型安全的艺术
为什么你的Java代码需要泛型?类型安全的艺术
165 98
|
1月前
|
Java 编译器 API
java最新版和java8的区别,用代码展示
java最新版和java8的区别,用代码展示
202 43
|
1月前
|
安全 Java 容器
告别空指针噩梦:Optional让Java代码更优雅
告别空指针噩梦:Optional让Java代码更优雅
333 94
|
1月前
|
安全 Java 容器
告别繁琐判空:Optional让你的Java代码更优雅
告别繁琐判空:Optional让你的Java代码更优雅
|
2月前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
352 3
|
2月前
|
安全 Java 应用服务中间件
Spring Boot + Java 21:内存减少 60%,启动速度提高 30% — 零代码
通过调整三个JVM和Spring Boot配置开关,无需重写代码即可显著优化Java应用性能:内存减少60%,启动速度提升30%。适用于所有在JVM上运行API的生产团队,低成本实现高效能。
243 3
|
2月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
369 0