Java中finally和return的关系实例解析
作者:司马懿字仲达 发布时间:2023-05-31 04:21:31
标签:java,finally,return
本文研究的主要是Java中finally和return的关系,具体介绍和实例如下所示。
finally 和 return 关系的总结
1.try块中有System.exit(0)这样的语句,由于它是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然finally语句也不会被执行到。
2.其它情况下,finally语句都必然会被执行。因此可以在这里执行一些资源的释放操作。
(1)finally中的return会覆盖try/catch中的renturn。
(2)在finally中写return语句会有警告,因为它会阻止函数抛出异常,而改为正常返回。
package com.demo.test;
public class FinallyAndReturn {
private static void finallyAndTryReturn() {
try {
System.out.println("finallyAndTryReturn -> try");
return;
}
catch (Exception e) {
System.out.println("finallyAndTryReturn -> catch");
}
finally {
System.out.println("finallyAndTryReturn -> finally");
}
}
private static void finallyAndCatchReturn() {
try {
System.out.println("finallyAndCatchReturn -> try");
throw new Exception();
}
catch (Exception e) {
System.out.println("finallyAndCatchReturn -> catch");
return;
}
finally {
System.out.println("finallyAndCatchReturn -> finally");
}
}
// finally语句是在try的return语句执行之后,return返回之前执行。
private static String tryReturn() {
String str = "initialized";
try {
System.out.println("tryReturn -> try");
str = "try";
return str;
}
catch (Exception e) {
System.out.println("tryReturn -> catch");
str = "catch";
}
finally {
System.out.println("tryReturn -> finally");
str = "finally";
}
return null;
}
private static String tryReturnAndFinallyReturn() {
String str = "initialized";
try {
System.out.println("tryReturnAndFinallyReturn -> try");
str = "try";
return str;
}
catch (Exception e) {
System.out.println("tryReturnAndFinallyReturn -> catch");
str = "catch";
}
finally {
System.out.println("tryReturnAndFinallyReturn -> finally");
/*
* Warning: finally block does not complete normally
* 如果finally块中包含了return语句,即使前面的catch块重新抛出了异常,则调用该方法的语句也不会获得catch块重新抛出的异常,而是会得到finally块的返回值,并且不会捕获异常。
*/
str = "finally";
return str;
}
}
private static String tryThrowAndFinallyReturn() throws Exception {
String str = "initialized";
try {
System.out.println("tryThrowAndFinallyReturn -> try");
str = "try";
throw new Exception();
}
catch (Exception e) {
System.out.println("tryThrowAndFinallyReturn -> catch");
str = "catch";
throw new Exception();
}
finally {
System.out.println("tryThrowAndFinallyReturn -> finally");
/*
* Warning: finally block does not complete normally
* 如果finally块中包含了return语句,即使前面的catch块重新抛出了异常,则调用该方法的语句也不会获得catch块重新抛出的异常,而是会得到finally块的返回值,并且不会捕获异常。
*/
str = "finally";
return str;
}
}
private static void finallyAndRuntimeException() {
try {
System.out.println("finallyAndRuntimeException -> try");
throw new RuntimeException();
}
catch (Exception e) {
System.out.println("finallyAndRuntimeException -> catch");
}
finally {
System.out.println("finallyAndRuntimeException -> finally");
}
}
private static void finallyAndExit() {
try {
System.out.println("finallyAndExit -> try");
// System.exit(0);是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然finally语句也不会被执行到。
System.exit(0);
}
catch (Exception e) {
System.out.println("finallyAndExit -> catch");
}
finally {
System.out.println("finallyAndExit -> finally");
}
}
public static void main(String[] args) {
finallyAndTryReturn();
System.out.println();
finallyAndCatchReturn();
System.out.println();
System.out.println("tryReturn return -> " + tryReturn());
System.out.println();
System.out.println("tryReturnAndFinallyReturn return -> " + tryReturnAndFinallyReturn());
System.out.println();
try {
System.out.println("tryThrowAndFinallyReturn return -> " + tryThrowAndFinallyReturn());
}
catch (Exception e) {
e.printStackTrace();
}
System.out.println();
finallyAndRuntimeException();
System.out.println();
finallyAndExit();
}
}
演示结果:
总结
来源:http://blog.csdn.net/chy555chy/article/details/52791338


猜你喜欢
- 一、什么是简单工厂模式简单工厂模式又称为静态工厂模式,实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父
- Spring Boot提供的监控接口,例如:/health、/info等等,实际上除了之前提到的信息,还有其他信息业需要监控:当前处于活跃状
- 背景介绍在一些需求中,可能存在某些场景,比如先加载自己的bean,然后自己的bean做一些DB操作,初始化配置问题,然后后面的bean基于这
- 本文将介绍Java在ICPC快速IO实现方法,下面看看
- 在上个月的对C#开发微信门户及应用做了介绍,写过了几篇的随笔进行分享,由于时间关系,间隔了一段时间没有继续写这个系列的博客了,并不是对这个方
- 前言:什么是JDBCJava 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户
- 写本文章的目的是为了记录工作中遇到的问题,方便以后遇到可以迅速解决问题我使用的NPOI版本是2.2.1.0版本需要用到的命名空间using
- 英文意思随机数可以做什么?生成一些随机的数字用途非常的广泛, 例如随机抽取数据库的一条记录,把生成的数字给变量,某一个时间点执行一些代码,随
- Android Studio是Android的官方IDE。它是专为Android而打造,可以加快您的开发速度,帮助您为每款Android设备
- 先来个效果图觉得不好看可以自己调整1.绘制数据点线状图一般由数据点和连线组成在绘制连线之前,我们先标出数据点这里我选择用Image图片来绘制
- 本文总结了Java的关键字与标识符。分享给大家供大家参考,具体如下:相关内容:关键字:定义特点用于定义数据类型的关键字用于定义流程控制的关键
- 启用URL参数在解决方案资源管理器中右键点击你的ClickOnce工程,点击属性进入发布选项卡,点击“选项”按钮,在弹出的界面中选中“允许给
- JetBrainsMono 是 JetBrains 公司开发的一款开源字体,可免费商用。正如其名字带的Mono,即Monospaced Fo
- 1.使用的是maven项目,添加依赖<!-- mybatis-plus begin --> <depend
- 这篇文章主要介绍了Spring自动装配Bean实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 前言spring-boot-actuator是一个spring-boot提供的用于监控组件,只需要在代码中加入依赖就可以了<depen
- 问题来源一般来说,一个稍微大些的项目都会有一些依赖的Jar包,而在将项目部署到服务器的过程中,如果没有持续集成环境的话,也就是说服务器不支持
- 深色主题工具类package com.example.kotlindemo.utilsimport android.content.Cont
- 基于有了OO的基础后,开始认真学习设计模式!设计模式是java设计中必不可少的!Apple.javapackage strategy;/**
- 目录前言if-thenif-then-elseswitch使用 Stringwhiledo-whileforbreakcontinueret