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

JavaDog程序狗
JavaDog程序狗
发布于 2024-08-15 / 56 阅读
0
0

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

前言

🍊缘由

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

🐣闪亮主角:

大家好,我是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())。

🍈猜你想问

如何与狗哥联系进行探讨

关注公众号【JavaDog程序狗】

公众号回复【入群】或者【加入】,便可成为【程序员学习交流摸鱼群】的一员,问题随便问,牛逼随便吹,目前群内已有超过300+个小伙伴啦!!!

2.踩踩狗哥博客

javadog.net

里面有狗哥的私密联系方式呦 😘

大家可以在里面留言,随意发挥,有问必答

🍯猜你喜欢

文章推荐

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

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

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

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

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

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

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

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

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


评论