import java.util.HashMap;
import java.util.Map; public class FinallyDemo1 { public static void main(String[] args) {
System.out.println("=================================");
System.out.println("A情况:finally在try的return执行之后,返回之前。");
System.out.println("main\ti="+test1());
System.out.println("=================================");
System.out.println("B情况:finally在try的return执行之后,返回之前。finally的return将覆盖try的return:");
System.out.println("main\ti="+test2());
System.out.println("=================================");
System.out.println("异常时候,try的return不执行。catch和finally的执行情况与try和finally的执行情况一样。如A情况:");
System.out.println("main\ti="+test3());
System.out.println("=================================");
System.out.println("异常时候,try的return不执行。catch和finally的执行情况与try和finally的执行情况一样。如B情况:");
System.out.println("main\ti="+test4());
System.out.println("=================================");
System.out.println("地址传递的参数,在try-finally中将覆盖返回值。");
System.out.println("main\tmap="+test5());
System.out.println("=================================");
System.out.println("地址传递的参数,在try-finally中将覆盖返回值。");
System.out.println("main\tmap="+test6());
System.out.println("=================================");
} /**
* finally代码块是在try代码块中的return语句执行之后,返回之前执行的。
* @return
*/
public static int test1(){
int i=1;
try {
return i+=100;
} catch (Exception e) {
System.out.println("catch");
}finally{
i++;
System.out.println("finally\ti="+i); }
return i;
} /**
* finally代码块中的return语句覆盖try代码块中的return语句
* @return
*/
@SuppressWarnings("finally")
public static int test2(){
int i=1;
try {
return i+=100;
} catch (Exception e) {
System.out.println("catch");
}finally{
i++;
System.out.println("finally\ti="+i);
return i;
}
} /**
* try代码块中的return语句在异常的情况下不会被执行;
* catch中的return执行情况与未发生异常时try中return的执行情况完全一样。
* @return
*/
@SuppressWarnings("finally")
public static int test3(){
int i=1;
try {
i=i/0;
return i+=100;
} catch (Exception e) {
System.out.println("catch");
return i+=100;
}finally{
i++;
System.out.println("finally\ti="+i);
}
} @SuppressWarnings("finally")
public static int test4(){
int i=1;
try {
i=i/0;
return i+=100;
} catch (Exception e) {
System.out.println("catch");
return i+=100;
}finally{
i++;
System.out.println("finally\ti="+i);
return i;
} } /**
* 值传递:返回值不变
* 地址传递:返回值会变
* @return
*/
public static Map test5(){
Map<String, String> map = new HashMap<String, String>();
map.put("param1", "初始化值");
try {
System.out.println("try");
map.put("param1", "try值");
return map;
} catch (Exception e) {
System.out.println("catch");
map.put("param1", "catch值");
} finally {
System.out.println("finally");
map.put("param1", "finally值");
map = null;
}
return map;
} @SuppressWarnings("finally")
public static Map test6(){
Map<String, String> map = new HashMap<String, String>();
map.put("param1", "初始化值");
try {
System.out.println("try");
map.put("param1", "try值");
return map;
} catch (Exception e) {
System.out.println("catch");
map.put("param1", "catch值");
} finally {
System.out.println("finally");
map.put("param1", "finally值");
map = null;
return map;
} } }

控制台:

=================================
A情况:finally在try的return执行之后,返回之前。
finally i=102
main i=101
=================================
B情况:finally在try的return执行之后,返回之前。finally的return将覆盖try的return:
finally i=102
main i=102
=================================
异常时候,try的return不执行。catch和finally的执行情况与try和finally的执行情况一样。如A情况:
catch
finally i=102
main i=101
=================================
异常时候,try的return不执行。catch和finally的执行情况与try和finally的执行情况一样。如B情况:
catch
finally i=102
main i=102
=================================
地址传递的参数,在try-finally中将覆盖返回值。
try
finally
main map={param1=finally值}
=================================
地址传递的参数,在try-finally中将覆盖返回值。
try
finally
main map=null
=================================

最新文章

  1. vue 滚动加载
  2. hyper-v无线网络上外网
  3. 基于.net开发chrome核心浏览器
  4. OkHttp使用进阶(译自OkHttp官方教程)
  5. LINUX启动ORACLE监听和服务
  6. ESCAPE用法
  7. LeetCode219:Contains Duplicate II
  8. EXT 基础环境搭建
  9. 使用Visual Studio Code和typescript 开发调试React Native项目
  10. Ajax常见面试题
  11. CCF CSP 201312-2 ISBN号码
  12. 骚气男孩saochi boy 唐砖 插曲
  13. SpringMVC.入门篇《二》form表单
  14. 微信web开发者工具、破解文件、开发文档和开发Demo下载
  15. 获取所有选中框的ids值
  16. Calendar详解
  17. 在一般处理程序里面读写session
  18. 四大组件之Service
  19. HTML5之特效
  20. 下载安装jdk

热门文章

  1. swift的static和class修饰符---What is the difference between static func and class func in Swift?
  2. CAD交互绘制带周长面积的矩形框(网页版)
  3. 【洛谷2019 OI春令营】期中考试
  4. AndroidStudio连不上天天模拟器
  5. 雷林鹏分享:Lua 基本语法
  6. Shell替换数组元素之间的间隔符号
  7. RAID磁盘阵列及CentOS7启动流程
  8. 蓝牙bluez学习(1) Stack Architecture
  9. qt c++对象头文件如何相互包含
  10. 宝塔apache配置