`
wtrlay
  • 浏览: 23020 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java中try、finally语句中有return时的执行情况

    博客分类:
  • java
阅读更多

      在Java中当try、finally语句中包含return语句时,执行情况到底是怎样的,finally中的代码是否执行,大家众说纷纭,有的说会执行,有的说不会执行,到底哪种说法正确,现在通过下面的例子加以说明:

     第一种情况:try中包含return语句,finally中不包含

    

public class TestTry {
	static String s="";
	public static void main(String args[]){
		s = test1();
		System.out.println("8  "+s);
	}
	public static String test1(){
		
		try{
			System.out.println("try.....");
			return s = "a";
		}
		finally{
			s="b";	
			System.out.println("17  "+s);
		}
	}
}

  这里我们定义了一个字符串 s,在try里面将"a"赋值给s,并直接返回,在finally里面把"b"赋值给s,最终s的值是a还是b呢?下面是执行的结果

try.....
17  b
8  a

 我们发现最后的结果是a,但是b优先于a打印出来了,这是为什么呢?通过debug单步调试我们发现,在执行try中的return之前会先执行finally中的代码,之后再执行return语句。如果finally中也包含return语句,会出现什么情况呢,我们看第二种情况。

     第二种情况:try,finally中都包含return语句

      我们将上面的代码稍作改动

public class TestTry {
	static String s="";
	public static void main(String args[]){
		s = test1();
		System.out.println("8  "+s);
	}
	public static String test1(){
		
		try{
			System.out.println("try.....");
			return s = "a";
		}
		finally{
			return s="b";	
			
		}
	}
}

 将finally中的s="b";直接改成return s="b";,会出现什么样的结果呢?字符串s是a还是b呢?

try.....
8  b

 我们发现最后的打印结果是b。

 

结论:1.无论try里面有没有return语句,finally语句一定都会执行(不愧是finally,名字起的好)。

        2.如果finally中没有return语句,try里面有return,那么在执行try中的return语句之前会先去执行finally中的代码,再去执行try中的return语句;如果在finally中也包含return语句,将会直接返回,不再去执行try中的return语句。

 

 

分享到:
评论

相关推荐

    java 中finally语句块与return的执行关系

    在 Java 规范中规定,在 try-catch-finally 中,如果 try-finally 或者 catch-finally 中都有 return,则两个 return 语句都执行,并且最终返回到调用者那里的是 finally 中 return 的值;而如果 finally 中没有 ...

    try、catch、finally、return 执行顺序.doc

    在执行 try、catch、finally 语句时,finally 语句总是最后执行的,也就是说,即使在 try 或 catch 语句中有 return 语句,finally 语句仍然会执行。finally 语句是在 return 语句执行之后、返回之前执行的,这意味...

    Java finally语句到底是在return之前还是之后执行?

    1. 如果`try`块中的代码没有抛出异常,那么`finally`块会在`try`块结束时执行,之后控制权将传递给相应的`return`语句。 2. 如果`try`块中的代码抛出一个未捕获的异常,`finally`块仍然会执行,然后再将异常传递给...

    关于Java中try finally return语句的执行顺序浅析

    还有情况是当一个线程在执行try语句块或者catch语句块时被打断(interrupted)或者被终止(killed),与其对应的finally语句块可能不会执行。还有更极端的情况,就是在线程运行try语句块或者catch语句块时,突然死机或者...

    浅谈Java finally语句到底是在return之前还是之后执行(必看篇)

    在某些情况下,finally 语句可能不会被执行,例如在 try 语句之前就返回了,在 try 块中有 System.exit(0) 语句等。 那么,finally 语句是在 try 的 return 之前还是之后执行的呢?这个问题引起了很多人的探讨和...

    谈谈Java中try-catch-finally中的return语句

    在Java编程语言中,`try-catch-finally`语句块是异常处理的关键构造,它允许程序员优雅地处理可能出现的异常情况。`return`语句则用于从方法中返回一个值或者结束方法的执行。当这两者结合在一起时,就会出现一些...

    Java中finally和return的关系实例解析

    在Java中,finally语句可以与return语句结合使用,但是它们的执行顺序是非常重要的。finally语句是在try的return语句执行之后,return返回之前执行的。这意味着,如果在try块中执行了return语句,finally语句将在...

    try_catch_finally异常处理java

    本文将深入探讨Java中的`try-catch-finally`语句块,以及它们在异常处理中的作用。 首先,`try`块是异常处理的起点。在这个代码段中,我们通常会放置可能会抛出异常的代码。当Java执行到可能抛出异常的代码行时,...

    Java中finally块执行与return关系深度剖析

    Java finally语句到底是在return之前还是之后执行?Java finally执行深度剖析,具体看这篇博文:http://blog.csdn.net/lanxuezaipiao/article/details/16922895,这是里面相关的源码,欢迎大家下载使用。

    try-catch-finally捕获异常

    try-catch-finally语句是Java语言中一种常用的异常处理机制,当程序在执行过程中出现异常时,可以使用try-catch-finally语句来捕获和处理异常。下面将详细介绍try-catch-finally语句的使用方法和注意事项。 一、try...

    try~catch~finally中关于return的问题

    在Java的异常机制中,如果finally中含有return语句,则try和catch中的return语句将会被JVM忽视

    try-catch-finally-return-in-finally.rar_return

    `finally` 块总是会被执行,即使在 `try` 或 `catch` 中已经有一个 `return` 语句,这使得我们可以确保无论发生什么情况,都能执行必要的清理工作并返回一致的结果。 通过分析 `12.5-1.js` 和 `try-catch-finally-...

    关于Java中的try-catch-finally语句和return

    第一:return语句并不是函数的终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在栈里面,等待finally执行后再返回)  第二:finally里面不建议放return语句,根据需要,return语句...

    try-finally-return-in-finally.rar_return

    在JavaScript中,当`try`块中的`return`语句执行时,控制流会立即跳到`finally`块,执行`finally`中的代码。如果`finally`块也有`return`语句,那么它将覆盖`try`块的`return`,返回`finally`块的值。换句话说,最后...

    Java异常处理中同时有finally和return语句的执行问题

    在这种情况下,`try`块中的`return`语句先执行,其结果被暂存,然后执行`finally`块的`return`,最后返回`finally`块的结果。由于`finally`块的`return`语句会覆盖`try`块的`return`,所以最终返回的是`finally`块中...

    完全解析Java编程中finally语句的执行原理

    总结来说,`finally`语句在Java异常处理中扮演着清理角色,它确保了关键代码的执行,尤其是在异常发生时。然而,其执行依赖于`try`块的正常执行,且受到`return`、`System.exit()`、线程中断或程序异常终止等因素的...

    浅谈Java中return和finally的问题

    当一个 `try` 块中包含 `return` 语句时,`finally` 语句块的执行情况如下: 1. **`finally` 会执行**:无论 `try` 块中的 `return` 是否执行,`finally` 语句块总是会被执行。这是Java异常处理机制的一部分,目的...

    使用try-catch-finally处理异常

    即使在`try`或`catch`块中有return语句,`finally`块的代码也会被执行。 5. **多层嵌套** 你还可以在`try-catch-finally`结构内部嵌套另一个`try-catch-finally`结构,以处理更复杂的情况。这种方式使得异常处理...

    Java的throw和return

    #### try-catch-finally语句 Java中的异常处理机制通常包括`try`、`catch`和`finally`三个关键字。`try`块包含了可能引发异常的代码;`catch`块则用于捕获并处理这些异常;而`finally`块无论是否发生异常都会被执行...

    java面试题之try中含return语句时代码的执行顺序详解

    在涉及`return`语句时,其执行顺序可能会引起混淆,尤其是在`finally`块中有操作的情况下。让我们深入探讨一下这个面试题以及相关的知识点。 首先,`finally`块的特性是它总是在`try`或`catch`块执行完毕后执行,...

Global site tag (gtag.js) - Google Analytics