当前位置: 首页 > news >正文

java try throw exception finally 遇上 return break continue造成异常丢失

    如下所示,是一个java笔试题,考察的是抛出异常之后,程序运行结果,但是这里抛出异常,并没有捕获异常,而是通过finally来进行了流程控制处理。

package com.xxx.test;public class ExceptionFlow {public static void main(String[] args) {try {System.out.println("hello " + func());} catch (Exception e) {e.printStackTrace();}}public static int func() {int a = 0;for (int i = 0; i < 3; i++) {try {throw new RuntimeException("xx");} finally {continue;}}return a;}
}

    运行程序,打印结果如下所示:

 

    这里结果有些出人意料,并没有打印异常信息,其实就是try finally遇到了continue,导致异常信息丢失。如果这里,我们稍微改变一下,把finally中的continue注释,再来看看结果:

 

    这次打印了异常信息。

   下面再来看看另一个例子:

package com.xxx.test;
public class ExceptionDemo {public static void main(String[] args) {try {func();System.out.println("A");} catch (Exception e) {System.out.println("C");}System.out.println("D");}public static void func() {try {throw new Exception();} finally {System.out.println("B");}}
}

    这里要求写出程序运行结果。

    这道题的答案其实就是编译不通过,如下所示:

 

    这里需要在func方法签名上声明抛出异常。方法签名上添加了抛出异常,这里就编译成功,运行结果是B C D。

    这里其实也可以不用在方法签名上进行声明,直接把异常改成自定义异常RuntimeException("xx"),最终程序运行结果也是一样的。 

    这里我们按照第一个题目的思路,把finally中添加return信息,这时候,运行结果会变为B A D。

   因为异常信息丢失,所以在调用func()的地方,进行try catch的时候,就不会有异常信息,那么程序就会按照正常的流程运行。 

相关文章:

  • jenkins如何安装?
  • php框架路由实现
  • 【Unity PlasticSCM】记录:从介绍 下载 到拉取项目
  • MySQL数据库干货_08—— MySQL中的主键约束(Primary Key)
  • IDE的组成
  • MySQL——九、SQL编程
  • Kubernetes (K8S)概述
  • python爬虫selenium和ddddocr使用
  • Vue、jquery和angular之间区别
  • 松下A6B伺服 马达不动问题解决
  • H5游戏源码分享-色块选择游戏
  • Go学习第十六章——Gin文件上传与下载
  • vscode C++项目相对路径的问题
  • asyns和await用法?
  • 基于vue小红书平台用户数据分析与可视化
  • Laravel 实践之路: 数据库迁移与数据填充
  • React中的“虫洞”——Context
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Travix是如何部署应用程序到Kubernetes上的
  • 大整数乘法-表格法
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 手写双向链表LinkedList的几个常用功能
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 微服务框架lagom
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 用Python写一份独特的元宵节祝福
  • ​Python 3 新特性:类型注解
  • #100天计划# 2013年9月29日
  • #laravel 通过手动安装依赖PHPExcel#
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • $NOIp2018$劝退记
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (ZT)出版业改革:该死的死,该生的生
  • (二)JAVA使用POI操作excel
  • (论文阅读30/100)Convolutional Pose Machines
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (状压dp)uva 10817 Headmaster's Headache
  • 、写入Shellcode到注册表上线
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET 的程序集加载上下文
  • .NET业务框架的构建
  • .ui文件相关
  • @KafkaListener注解详解(一)| 常用参数详解
  • @ModelAttribute 注解
  • @ModelAttribute注解使用
  • @RequestBody与@ResponseBody的使用
  • @vue/cli 3.x+引入jQuery
  • @基于大模型的旅游路线推荐方案
  • [AIGC] SQL中的数据添加和操作:数据类型介绍