可以在finally代码块中处理返回值么?
先来看一段代码:
public boolean doSomething() {try {// do something} finally {// ...return true;} }
这段代码的finally代码块中出现return语句。首先Java并不会阻止你写出这样的代码,但这样是合理么?
其实之所以写出这样的代码,是因为程序员不确定在正常代码块中如果出现return,那么finally代码块是否还会被执行。其实这样的担心是多余的,Java确保在任何情况下finally代码块会被执行。
再进一步,看以下代码:
public User doSomething() {try {// do somethingreturn user;} finally {// …user.setName(name);} }
这段代码的finally代码块并没有出现return语句,但是语句user.setName()却对返回值对象进行了修改。同样Java也不会阻止你写出这样的代码,但是这却给阅读代码的人带来困惑。因为很多时候阅读者当读到return语句的时候直觉上认为函数已经返回,而事实上在return语句之后返回值被再次修改。
综合上述两个例子,可以得出结论:应避免在finally代码块中处理返回值。
此外与此相关有一个十分偏门的考题。请问以下代码中finally代码块是否会被执行:
try {// do somethingSystem.exit(0); } finally {// ... }
正确答案是“不会被执行”。问题的关键是System.exit()会终止程序的所有处理,包括finally代码块。其实在Java语言中这是个极特殊的例子,只需记住这一特殊情况即可。
可以在finally代码块中处理返回值么?相关推荐
- python基础 python函数 函数概念 函数的多种参数 多种调用参数 装包 解包 函数代码块 函数的返回值
python基础 python函数 函数概念 函数的多种参数 多种调用参数 装包 解包 函数代码块 函数的返回值 一 .函数概念 函数是根据需要,将代码打包为代码块, 每一个代码块就可以封装为一个函数 ...
- [转]java 为什么wait(),notify(),notifyAll()必须在同步方法/代码块中调用?
在 Java中,所有对象都能够被作为"监视器monitor"--指一个拥有一个独占锁,一个入口队列和一个等待队列的实体entity. 所有对象的非同步 方法都能够在任意时刻被任意线 ...
- 【Android Gradle 插件】Module 目录下 build.gradle 配置文件 ( plugins 闭包代码块中引入插件 | PluginAware#apply 方法引入插件 )
文章目录 一.Module 目录下 build.gradle 配置文件 1.plugins 闭包代码块中引入插件 2.PluginAware#apply 方法引入插件 Android Plugin D ...
- 获取存储过程返回值及代码中获取返回值
获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...
- C0302 将一个代码块中的内容保存在文件中, 查看一个rpm包是否可以安装
#!/bin/bash # 这个脚本是用来描述和确认是否可以安装一个rpm包 # 在一个文件中保存输出 SUCCESS=0 E_NOARGS=65 if [ -z "$1" ] t ...
- 获取存储过程返回值及代码中获取返回值(转)
获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...
- Block代码块中使用局部变量注意点
第一次写代码遇到报这个错,实在是想不通为什么,按常理应该是不会有问题,报错的呀??纠结了一会之后只好仔细查看报错原因咯,原来是: 当我们在block代码块中使用局部变量时,就会很容易出现如图的错误. ...
- final变量要么定义时初始化,要么在代码块中初始化
以上基于jdk1.8.final变量如果是静态的,要么定义时初始化,要么在静态代码块中初始化.final变量如果不是静态的,要么定义时初始化,要么在非静态代码块中初始化. 静态变量定义时初始化: 静 ...
- Typora修改中文字体样式(含代码块中的中文字体)
Typora修改字体样式(含代码块中的字体) 1. 修改页面字体显示 偏好设置 →外观,找到主题一栏,打开主题文件夹,选择你当前主题下的*.CSS*文件.如我使用的是github主题,则我打开gith ...
最新文章
- matlab整定串级pid,PID算法在Matlab串级控制中的应用
- iOS12系统应用发送普通邮件构建邮件
- Core Java 第三章 Java基本的程序设计结构
- 简单python接口测试编写和django开发环境的搭建
- UIImage与Iplimage相互转换
- 现代计算机密码学阶段主要有两个方向,密码学技术读书笔记
- 一代人的回忆!国产游戏机传奇落幕:官网已无法正常访问
- linux系统安装自主分区,Linux系统的安装(自动引导安装、网络安装、分区选择)...
- rancher中添加用户,赋予权限
- Java基础篇:字符串的简单介绍
- java中关于x轴翻转和y轴翻转如何计算_如何用加速度计提高倾角测量精度?
- 三点顺序(计算几何入门)
- 深刻揭露步态识别的“谎言”(篇一)
- 完善智慧办公建设,小熊U租获京东数千万元A+轮融资...
- linux上挂载iso文件,如何在Linux上挂载ISO文件
- 软件测试怎么学比较快
- 摸鱼儿·雁丘词 / 迈陂塘
- ios-bug.html黑屏重启,iOS12曝重大BUG:iPhone黑屏无法充电!你中招没?
- C++读取Wav文件
- C语言--数据溢出导致的缓冲区(堆栈)损坏