return遇到finally
public class Test {
public static void main(String[] args) {
System.out.println("=============test1==================");
System.out.println(test1());
System.out.println("===============================");
System.out.println("=============test1_1==================");
System.out.println(test1_1());
System.out.println("===============================");
System.out.println("\n============test2===================");
System.out.println(test2());
System.out.println("===============================");
System.out.println("\n============test2_1===================");
System.out.println(test2_1());
System.out.println("===============================");
System.out.println("\n============test3===================");
System.out.println(test3());
System.out.println("===============================");
System.out.println("\n============test3_1===================");
System.out.println(test3_1());
System.out.println("===============================");
}
public static String test1() {
String a = "in try";
try{
return a;
} catch ( Exception e ) {
} finally {
a = "in finally";
System.out.println("do finally");
}
return a;
}
public static String test1_1() {
String a = "in try";
try{
return a;
} catch ( Exception e ) {
} finally {
a = "in finally";
System.out.println("do finally");
return a;
}
}
public static int test2() {
int a = 1;
try{
return a;
} catch ( Exception e ) {
} finally {
a = 2;
System.out.println("do finally");
}
return a;
}
public static int test2_1() {
int a = 1;
try{
return a;
} catch ( Exception e ) {
} finally {
a = 2;
System.out.println("do finally");
return a;
}
}
public static Helper test3() {
Helper a = new Helper();
a.a = 1;
try{
return a;
} catch ( Exception e ) {
} finally {
a.a = 2;
System.out.println("do finally");
}
return a;
}
public static Helper test3_1() {
Helper a = new Helper();
a.a = 1;
try{
return a;
} catch ( Exception e ) {
} finally {
a.a = 2;
System.out.println("do finally");
return a;
}
}
static class Helper {
int a;
public String toString() {
return String.valueOf(a);
}
}
}
运行的结果:
=============test1==================
do finally
in try
===============================
=============test1_1==================
do finally
in finally
=============================== ============test2===================
do finally
1
=============================== ============test2_1===================
do finally
2
=============================== ============test3===================
do finally
2
=============================== ============test3_1===================
do finally
2
===============================
结论:
- 在try catch块里return的时候,finally也会被执行。
- return 语句会把后面的值复制到一份用来返回,如果return的是基本类型的,finally里对变量的改动将不起效果,如果return 的是引用类型的,改动将可以起效果。
- finally里的return语句会把try catch块里的return语句效果给覆盖掉。
看来return语句并不一定都是函数的出口,执行return时,只是把return后面的值复制了一份到返回值变量里去了。看来最佳实践是:
- 最好把return放到方法尾而不要在try cath 里return
- 不要在try catch块和finally块里都包含return
- 如果在try catch块里return, 则不要在finally块里操作被return的变量
文章来自:http://www.360doc.com/content/11/0905/19/1542811_146016871.shtml
return遇到finally的更多相关文章
- jsp中出现onclick函数提示Cannot return from outside a function or method
在使用Myeclipse10部署完项目后,原先不出错的项目,会有红色的叉叉,JSP页面会提示onclick函数错误 Cannot return from outside a function or m ...
- JavaScript中fn()和return fn()
看博客时,注意到return的重要性 参考:http://www.cnblogs.com/raoyunxiao/p/5644032.html 看似反常的例子: var i = 0; function ...
- 【知识积累】try-catch-finally+return总结
一.前言 对于找Java相关工作的读者而言,在笔试中肯定免不了遇到try-catch-finally + return的题型,需要面试这清楚返回值,这也是这篇博文产生的由来.本文将从字节码层面来解释为 ...
- Ajax接收不到PHP return后的结果的原因
PHP在处理ajax返回值的时候,如果使用return如 return $result会失败,echo $result却没问题. 解释原因如下: 1.ajax请求从服务器端读取返回值,而且这些返回值必 ...
- oncopy="document.selection.empty()"跟oncopy="return false"什么区别?
实现效果一样,禁止复制. 区别: oncopy="document.selection.empty()" 没禁止,只是把它复制的内容,变成空了: oncopy="ret ...
- 自动判断应该Ajax还是return
起因 最近回顾以前的代码,发现一个偶尔会见到的现象.一个类里面的方法可能需要Ajax返回,也有可能需要函数return.这个现象发生在网站MVC中的 逻辑层(或模型层),示例如下.IndexCtrl是 ...
- jquery中ajax用return来返回值无效
jquery中,ajax返回值,有三种写法,只有其中一种是成功的 /** * async:false,同步调用 * 返回1:2 * 失败 * 分析:ajax内部是一个或多个定义的函数,ajax中ret ...
- 高程(3):操作符、for、for...in循环、break/continue/return语句、函数等
1.关系操作符 注意点:1)比较操作数是两个字符串,是比较字符串的字符编码值. 如:"a" > "b" 返回 false:"a" & ...
- [转载]js中return的用法
一.返回控制与函数结果,语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果 二.返回控制,无函数结果,语法为:return; 在大多数情况下,为事件处理函 ...
- 解决springmvc报No converter found for return value of type: class java.util.ArrayList问题
一.背景 最近闲来无事,想自己搭建一套Spring+SpringMVC+Mybatis+Mysql的环境(搭建步骤会在以后博客中给出),结果运行程序时,适用@ResponseBody注解进行返回Lis ...
随机推荐
- [DP] 堆盒子问题
给一堆盒子,知道每个盒子的三围(长宽高),盒子正面朝你,不能旋转摆放,按照大的放在小的下面的原则堆起来,必须是 strictly larger,同样大小的盒子不行,问怎么样堆到最大的高度? 思路:动态 ...
- 团体程序设计天梯赛-练习集L1-001. Hello World
L1-001. Hello World 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 这道超级简单的题目没有任何输入. 你只需要在一行中输 ...
- Java 程序检查远程服务器状态
通常我们以命令的方式判断远程服务器是否正常运行有两种方式,ping 或 telnet 一个远程端口.假设我们要检查的远程服务器都是 Linux 系统. 从 JDK 1.5 以后, InetAddres ...
- hdu 4658 Integer Partition
五角数定理!!可以参考这个http://www.cnblogs.com/xin-hua/p/3242428.html 代码如下: #include<iostream> #include& ...
- thinkphp 减少文件目录
配置 'TMPL_FILE_DEPR'=>'_' 于是模板文件的格式为如:index_index.html,index_show.html .代替原来的目录结构:/index/index.htm ...
- Zookeeper实战之单机集群模式
前一篇文章介绍了Zookeeper的单机模式的安装及应用,但是Zookeeper是为了解决分布式应用场景的,所以通常都会运行在集群模式下.今天由于手头机器不足,所以今天打算在一台机器上部署三个Zook ...
- ANDROID_MARS学习笔记_S01_004dpi、dp(dip)及计算
一.dpi.dp介绍 sp会随着用户在手机中设置字体大小而改变,而dp不会 二.1.dpsp_layout.xml <?xml version="1.0" encoding= ...
- 分布式搜索Elasticsearch——QueryBuilders.matchPhrasePrefixQuery
注:该文项目基础为分布式搜索Elasticsearch——项目过程(一)和分布式搜索Elasticsearch——项目过程(二),项目骨架可至这里下载. ES源代码中对matchPhrasePrefi ...
- js团购倒计时
客户端代码可以看: http://www.zhangxinxu.com/wordpress/2010/07/%E5%9B%A2%E8%B4%AD%E7%B1%BB%E7%BD%91%E7%AB%99% ...
- git bash中带空格的文件夹以及文件的处理
空格用'\ '表示,输入的时候,是不需要单引号的 total 338drwxr-xr-x 9 Administ Administ 4096 Aug 24 23:53 HDTHelperdrwxr-xr ...