博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
try catch finally return
阅读量:6238 次
发布时间:2019-06-22

本文共 2380 字,大约阅读时间需要 7 分钟。

结论:不论什么运行try 或者catch中的return语句之前,都会先运行finally语句,假设finally存在的话。
       假设finally中有return语句,那么程序就return了,所以finally中的return是一定会被return的,

       编译器把finally中的return实现为一个warning。

可是须要注意的是。经过測试表明:在try 或者catch中的return语句,假设return的是int、long、double常量类型以及String、Integer等的封装类型,那么在finally中对return变量的值的改动不会影响在try 或者catch中的return语句的返回结果。

而恰好相反的是:在在try 或者catch中的return语句。假设return的是List等等对象类型的值,那么在finally中对其值的改动会影响try 或者catch中的return语句的返回结果。

当然, 假设在finally中运行return语句,finally对返回值的改动都会影响返回值。

举例说明1:

public static int tryCatchFinallyReturn(){	    int a = 1;		int b = 100;		try{			a = 2;			return a+b-2;		}catch(Exception e){			e.printStackTrace();		}		finally{			System.out.println("finally");			a = 4;			System.out.println(a);			System.out.println("finally2");		}		return a+b;	}
main方法:        int c = tryCatchFinallyReturn();         System.out.print(c);
输出结果是:

finally4finally2100
说明尽管a的值改为了4。但try中的返回值并没有被改动。

举例说明2:

public static List tryTest(){		List
list = new ArrayList
(); int a = 2; try{ list.add(new Integer(a)); for(Integer ii :list){ System.out.println(ii.intValue()+"----"); } return list; }catch(Exception e){ e.printStackTrace(); }finally{ System.out.println("finally"); a = 4; System.out.println(a); list.add(new Integer(a)); System.out.println("finally2"); for(Integer ii :list){ System.out.println(ii.intValue()+"----"); } } return list; }
main方法:		List
a = tryTest(); for(Integer b:a){ System.out.println(b.intValue()+"----main"); }
执行结果:

2----finally4finally22----4----2----main4----main
说明影响了对象类型的返回结果。

举例说明3:

public static String trytestString(){	    String a = "aaa";		String b = "bbb";		try{			a = "aaa2";			return a+b;		}catch(Exception e){			e.printStackTrace();		}		finally{			System.out.println("finally");			a = "aaa3";			System.out.println(a);			System.out.println("finally2");		}		return a+b;	}
main方法:System.out.println(trytestString());
输出:

finallyaaa3finally2aaa2bbb
跟返回常量结果一样。

public static String trytestString(){	    String a = "aaa";		String b = new String("bbb");		try{			a = "aaa2";			return a+b;		}catch(Exception e){			e.printStackTrace();		}		finally{			System.out.println("finally");			a = "aaa3"+ new String("1122");			System.out.println(a);			System.out.println("finally2");		}		return a+b;	}
main:
System.out.println(trytestString());
输出结果:

finallyaaa31122finally2aaa2bbb

转载地址:http://cbzia.baihongyu.com/

你可能感兴趣的文章
SQL各种获取时间的方式
查看>>
linux-Centos7安装python3并与python2共存
查看>>
畅通工程(并查集)
查看>>
练习一 第二题
查看>>
Sky Code
查看>>
滑动时候警告:Unable to preventDefault inside passive event listener
查看>>
[zz]intel sysret漏洞
查看>>
先装VS2005再装IIS,出现访问IIS元数据库失败解决方案
查看>>
docker往阿里云推镜像和打包镜像
查看>>
最新民政部行政区划代码,省市区三级
查看>>
python基础知识~ subprocess模块
查看>>
结对学习感想及团队创意照
查看>>
多线程
查看>>
java socket
查看>>
得到一个临时的文件名称
查看>>
电路原理图
查看>>
几种白盒测试的实例
查看>>
数学分析_Tom Apostol_定理7.48:黎曼可积的充要条件
查看>>
《微分方程_附应用及历史注记》Page 4.
查看>>
TreeView的绑定与读取
查看>>