研究try catch finally return
2016-02-23 21:26
316 查看
如果try里面有个return的话,finally还是会执行。但是如果这样的话,会输出什么结果呢?
package com.yingtou.hqdata.tdb.schedule;
public class Test {
public static void main(String[] args) {
System.out.println(test());
}
private static int test() {
int i = 1;
try {
i++;
// int b = 1/0;
return i;
} catch (Exception e) {
System.out.println("异常了");
return i;
}finally {
i++;
System.out.println("final"+i);
}
}
}
答案是final3
2
为什么finally执行后i变成了3,然后return却返回2呢?我觉得finally类似函数,然后我们i传值,最后i变成3,但至少只是值传递,所以return还是2;如果我们把它改成对象,那就是传对象了,如下,会输出什么结果呢?
package com.yingtou.hqdata.tdb.schedule;
public class Test {
public static void main(String[] args) {
System.out.println(test());
}
private static int test() {
int i = 1;
try {
i++;
// int b = 1/0;
return i;
} catch (Exception e) {
System.out.println("异常了");
return i;
}finally {
i++;
System.out.println("final"+i);
}
}
}
答案是final3
2
为什么finally执行后i变成了3,然后return却返回2呢?我觉得finally类似函数,然后我们i传值,最后i变成3,但至少只是值传递,所以return还是2;如果我们把它改成对象,那就是传对象了,如下,会输出什么结果呢?
package com.yingtou.hqdata.tdb.schedule; public class Test { public static void main(String[] args) { System.out.println(test().aa); } private static Demo test() { Demo i = new Demo(); i.aa = "1"; try { i.aa = "2"; // int b = 1/0; return i; } catch (Exception e) { System.out.println("异常了"); return i; }finally { i.aa = "3"; System.out.println("final"+i.aa); } } } 答案是final3 3 验证了我刚刚的观点,传的是引用,所以改了i.aa的值。
相关文章推荐
- 并查集入门笔记
- 康托尔定理是如何证明的?
- ios不同版本下的UILabel自动换行问题
- 16年面试提问
- linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 )
- 如何找出执行最慢的SQL
- 岁月划过生命线——大三下
- 【Linux学习016】facl与Linux终端
- 网络编程3---常用服务器编程模型
- 什么时候应该使用$scope.$apply()
- 独特的php遍历数组的写法,reset(),next(),current()
- 优秀的PHP开源项目集合
- 枚举变量
- 响应式布局基础一:px、dpi、ppi的区别
- MapReduce读取Hbase中多个版本的数据,统计例子。
- 初识面向对象
- 寒假测试之食堂
- BestCoder Round #73
- Windows 下 绿化 Oracle
- IP地址分类及子网掩码详解