try、catch、finally中return的执行顺序

原创 2016年09月07日 12:33:28

try、catch、finally中的return

       今天在做一个多线程加读写锁的测试时,考虑效率问题,想及时return结果,但存在一个严肃的问题,那就是锁的开启和关闭问题。因为锁开启后,用完不及时关闭,会因堵塞而造成资源无法请求。因此,做了一个测试,尽量做到全面,哪怕有些显得有些脑残,测试嘛。

示例1.

/**
 * @author qing
 * 
 *	Try……catch……finally中return的测试
 */
public class TryTest {

	/**
	 * 主要方法
	 */
	public static void main(String[] args) {
		// 调用 测试方法
		String result = get();
		// 打印 测试方法返回的结果
		System.out.println(result);
	}

	@SuppressWarnings({ "finally", "unused" })
	public static String get(){
		int value = 0;
		try {
			System.out.println("try……");
			
			//等式1/0 :分母为0 的明显错误          ——制造错误(用于抛异常)
			int result = 1 / value;
			
			return "111";
			
		} catch (Exception e) {
			System.out.println("catch……");
			return "444";
		} finally {
			System.out.println("finally……");
			return "333";
		}
		
//		return "222";
	}
运行结果:


经过测试:

(1)在通过编译器的检查后,如果finally中有return,则以finally中的return为准,其他的都将失效,return之前的代码都有效。

(2)第37行的return “222” 于catch、finally中的任何一个return互斥。也就是说,在catch、finally中其中一个地方存在return,编译器就能检查,已符合方法的返回要求。

(3)catch和finally中,可同时存在return,编译能通过。但程序以finally中的return “333”为准,不会理睬catch中的return “444”,catch中return之前的代码仍然生效。


示例2.     (这种情况就比较好理解了)

         程序中try内部没有异常的情况下,若有finally,且finally中没有return。若在try中遇到return,则先跳去执行finally中的代码,在回来执行try中return

package threadproject;

/**
 * @author qing
 * 
 *	Try……catch……finally中return的测试
 */
public class TryTest {

	/**
	 * 主要方法
	 */
	public static void main(String[] args) {
		// 调用 测试方法
		String result = get();
		// 打印 测试方法返回的结果
		System.out.println(result);
	}

	public static String get(){
		try {
			System.out.println("try……");
			
			return "111";
			
		} catch (Exception e) {
			System.out.println("catch……");
		} finally {
			System.out.println("finally……");
		}
		
		return "222";
	}

}
运行结果为:

上面的程序不会执行  try……Catch……finally之外的return,即打印的是“111”,而不打印“222”。


版权声明:本文为博主原创文章,未经博主允许不得转载。

sql优化--in和exists效率

in 和exists in是把外表和内表作hash 连接,而exists 是对外表作loop 循环,每次loop 循环再对内表进行查询。 一直以来认为exists 比in 效率高的说法是不...

Java解惑之String的"+"一定差于StringBuilder的append吗?

一个String对象的长度是固定的,不能改变它的内容,或者是附加新的字符至String对象中。您也许会使用+来串联字符串以达到附加新字符或字符串的目的,但+会产生一个新的String实例。如果程序对这...

java 有return的情况下try catch finally的执行顺序

结论: 1、不管有木有出现异常,finally块中代码都会执行; 2、当try和catch中有return时,finally仍然会执行; 3、finally是在return后面的表达式运算后执行的(此...
  • eunyeon
  • eunyeon
  • 2016年10月21日 09:54
  • 171

【Java异常学习笔记系列】try/catch/finally执行顺序及总结(含return)

一、try/catch/finally在没有return的情况下 无异常:try->finally->跳出 有异常:try->catch->finally->跳出 二、try/catch/final...

Java异常捕获之try-catch-finally-return的执行顺序

情况1:try块中没有抛出异常try和finally块中都有return语句 public static int NoException(){ int i=10; try{ S...
  • aaoxue
  • aaoxue
  • 2013年01月23日 21:45
  • 11523

有return情况下try,catch和finally的执行顺序

return情况下try,catch和finally的执行顺序

try、catch、finally 执行顺序 及 return 关系浅谈一

前段时间在逛论坛中,看到一贴子,1.若try中存在return 语句,finally 要不要执行呢?2.finally中对try return结果进行修改时返回什么数据呢?3.finally也存在re...

try-catch语句中return和finally执行顺序详解

刷java面试题偶然看到这类问题(try/finally中含有return时的执行顺序),觉得挺有意思于是小小的研究了一下,希望经过我添油加醋天马行空之后,能给你带来一定的帮助 原题 try {...

Java异常----try、catch和finally块中的return执行顺序

1.当Java程序执行try块、catch块时遇到return语句,return语句会导致该方法立即结束。系统执行完return语句之后,并不会立即结束该方法,而是去寻找该异常处理流程中是否包含fin...

return在try catch finally中的执行顺序(最通俗易懂的总结)

1、不管有木有出现异常,finally块中代码都会执行; 2、当try和catch中有return时,finally仍然会执行; 3、finally是在return后面的表达式运算后执行的(此时并...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:try、catch、finally中return的执行顺序
举报原因:
原因补充:

(最多只允许输入30个字)