当前位置: 首页 > 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的时候,就不会有异常信息,那么程序就会按照正常的流程运行。 

http://www.lryc.cn/news/211376.html

相关文章:

  • 设计模式——装饰器模式(Decorator Pattern)+ Spring相关源码
  • MATLAB R2018b详细安装教程(附资源)
  • GEE错误——影像加载过程中出现的图层无法展示的解决方案
  • 读图数据库实战笔记03_遍历
  • QT如何检测当前系统是是Windows还是Uninx或Mac?以及是哪个版本?
  • Maven配置阿里云中央仓库settings.xml
  • 由浅入深C系列八:如何高效使用和处理Json格式的数据
  • 多媒体应用设计师 第16章 多媒体应用系统的设计和实现示例
  • golang平滑重启库overseer实现原理
  • 用Python定义一个函数,用递归的方式模拟汉诺塔问题
  • 二手的需求
  • 大厂面试题-JVM为什么使用元空间替换了永久代?
  • 基本微信小程序的驾校宝典系统-驾照考试系统
  • 02、SpringCloud -- Redis和Cookie过期时间刷新功能
  • 【报错】kali安装ngrok报错解决办法(zsh: exec format error: ./ngrok)
  • <学习笔记>从零开始自学Python-之-常用库篇(十三)内置小型数据库shelve
  • Redis快速上手篇七(集群-六台虚拟机)
  • LeetCode 301. 删除无效的括号【字符串,回溯或BFS】困难
  • 面试经典159题——Day25
  • C# OpenCvSharp DNN 部署L2CS-Net人脸朝向估计
  • Windows环境下MosQuitto服务器搭建,安装mqtt服务端软件
  • web前端JS基础-----制作进度条
  • Linux命令解压多个tar.gz包
  • Java基于SpringBoot+Vue的网上图书商城管理系统(附源码,教程)
  • Visual Studio Code的下载与安装
  • 23种设计模式在SpringCloud源码里的应用
  • 几个精致的Linux命令
  • CoDeSys系列-3、Windows运行时软PLC主站和p-net从站IO设备组网测试
  • vscode下ssh免密登录linux服务器
  • 基于jquery+html开发的json格式校验工具