先来看一段代码:

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代码块中处理返回值么?相关推荐

  1. python基础 python函数 函数概念 函数的多种参数 多种调用参数 装包 解包 函数代码块 函数的返回值

    python基础 python函数 函数概念 函数的多种参数 多种调用参数 装包 解包 函数代码块 函数的返回值 一 .函数概念 函数是根据需要,将代码打包为代码块, 每一个代码块就可以封装为一个函数 ...

  2. [转]java 为什么wait(),notify(),notifyAll()必须在同步方法/代码块中调用?

    在 Java中,所有对象都能够被作为"监视器monitor"--指一个拥有一个独占锁,一个入口队列和一个等待队列的实体entity. 所有对象的非同步 方法都能够在任意时刻被任意线 ...

  3. 【Android Gradle 插件】Module 目录下 build.gradle 配置文件 ( plugins 闭包代码块中引入插件 | PluginAware#apply 方法引入插件 )

    文章目录 一.Module 目录下 build.gradle 配置文件 1.plugins 闭包代码块中引入插件 2.PluginAware#apply 方法引入插件 Android Plugin D ...

  4. 获取存储过程返回值及代码中获取返回值

    获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...

  5. C0302 将一个代码块中的内容保存在文件中, 查看一个rpm包是否可以安装

    #!/bin/bash # 这个脚本是用来描述和确认是否可以安装一个rpm包 # 在一个文件中保存输出 SUCCESS=0 E_NOARGS=65 if [ -z "$1" ] t ...

  6. 获取存储过程返回值及代码中获取返回值(转)

    获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...

  7. Block代码块中使用局部变量注意点

    第一次写代码遇到报这个错,实在是想不通为什么,按常理应该是不会有问题,报错的呀??纠结了一会之后只好仔细查看报错原因咯,原来是: 当我们在block代码块中使用局部变量时,就会很容易出现如图的错误. ...

  8. final变量要么定义时初始化,要么在代码块中初始化

    以上基于jdk1.8.final变量如果是静态的,要么定义时初始化,要么在静态代码块中初始化.final变量如果不是静态的,要么定义时初始化,要么在非静态代码块中初始化.  静态变量定义时初始化: 静 ...

  9. Typora修改中文字体样式(含代码块中的中文字体)

    Typora修改字体样式(含代码块中的字体) 1. 修改页面字体显示 偏好设置 →外观,找到主题一栏,打开主题文件夹,选择你当前主题下的*.CSS*文件.如我使用的是github主题,则我打开gith ...

最新文章

  1. matlab整定串级pid,PID算法在Matlab串级控制中的应用
  2. iOS12系统应用发送普通邮件构建邮件
  3. Core Java 第三章 Java基本的程序设计结构
  4. 简单python接口测试编写和django开发环境的搭建
  5. UIImage与Iplimage相互转换
  6. 现代计算机密码学阶段主要有两个方向,密码学技术读书笔记
  7. 一代人的回忆!国产游戏机传奇落幕:官网已无法正常访问
  8. linux系统安装自主分区,Linux系统的安装(自动引导安装、网络安装、分区选择)...
  9. rancher中添加用户,赋予权限
  10. Java基础篇:字符串的简单介绍
  11. java中关于x轴翻转和y轴翻转如何计算_如何用加速度计提高倾角测量精度?
  12. 三点顺序(计算几何入门)
  13. 深刻揭露步态识别的“谎言”(篇一)
  14. 完善智慧办公建设,小熊U租获京东数千万元A+轮融资...
  15. linux上挂载iso文件,如何在Linux上挂载ISO文件
  16. 软件测试怎么学比较快
  17. 摸鱼儿·雁丘词 / 迈陂塘
  18. ios-bug.html黑屏重启,iOS12曝重大BUG:iPhone黑屏无法充电!你中招没?
  19. C++读取Wav文件
  20. C语言--数据溢出导致的缓冲区(堆栈)损坏

热门文章

  1. Iphone X黑科技大揭秘,这几大摄像功能是要上天!
  2. 中国软件公司100强排名
  3. 用Python写了一个贪吃蛇大冒险小游戏
  4. 学会python还要学什么_学python语言需要配置什么样的电脑
  5. 计算机体系结构在线读,计算机体系结构复习题.ppt
  6. javascript脚本_JavaScript Shell脚本
  7. Android性能优化之图片压缩综合解决方案
  8. Java曲线之削峰填谷,Sentinel匀速模式(削峰填谷)
  9. Git pull单个文件
  10. mysql建表,主键,等