`
msn877763580
  • 浏览: 83754 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

finally里的语句一定会执行吗?

阅读更多

前几天去面试,其中有两道面试题。如下

 

一:finally里的语句一定会执行吗?

 

二:有如下形式的语句

try{			
	return 5;
}catch(Exception e){
	e.printStackTrace();
}finally{
	System.out.println("会执行嘛?");
}

  这样的代码块放在一个方法里,finally里的语句还会执行吗?如果会是在return语句之前执行还是之后执行?

 

我当时知道finally里的语句是一定会执行的,可是如果按照代码的执行顺序似乎应该return语句先执行,可是一执行return语句这个方法就会结束,所以我答曰:finally里的语句在return之前执行。

 

回去之后做了一个测试

public class ReturnTest {
	public static int testFinal(){
		try{			
		        return 5;
		}catch(Exception e){
		       e.printStackTrace();
		}finally{
		       System.out.println("会执行嘛?");
		}
		return 0;
	}
	public static void main(String args[]){
		System.out.println(testFinal());
	}
}

最后输出:

会执行嘛?
5

这样可以发现finally里的语句是会先执行的

 

Debug后发现的情况是:先执行finally;在执行return 5;语句,最终没有执行return 0;因为return 5的时候方法已经结束了,可是没有return 0;这条语句会报错。该如何解释?不解啊

 

网上资料: http://topic.csdn.net/u/20090521/13/4465dec0-4c2e-4ed3-a93f-5b661cd8268b.html

参考一:

 

在 try 中 或 catch 中遇到 return 就会转入 finally

 参考二:

 

根据java规范:在try-catch-finally中,如果try-finally或者catch-finally中都有return,则两个return语句都执行并且最终
返回到调用者那里的是finally中return的值;而如果finally中没有return,则理所当然的返回的是try或者catch中return的值,但是
finally中的代码是必须要执行的,而且是在return前执行,除非碰到exit()。
分享到:
评论

相关推荐

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

    首先,需要了解的是,在 try-finally 或者 catch-finally 中,如果 try 或者 catch 中有 return 语句,则 finally 中的代码一定会执行,并且是在 return 前执行的。如果 finally 中也有 return 语句,那么finally 中...

    python函数中return后的语句一定不会执行吗?

    finally: # finally语句块执行 print(98) print(fun()) # 输出:98ok print('----------') print(func()) # 输出:9898ok ``` 在这个例子中,`fun()`函数在遇到`return`后立即结束,所以`print(98)`后面的代码...

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

    首先,需要了解的是finally语句块是否一定会执行的问题。很多人第一反应是肯定要执行的,但仔细一想,如果一定会执行的话,也就不会这么SB的问了。 事实上,finally语句块不一定会执行。只有与finally相对应的try...

    finally 一定会执行(实例代码)

    无论哪种情况,`finally`块始终会在`try`和`catch`块之后执行。 **正常执行情况**: 1. `try`块中的代码成功执行,`res = 1`。 2. `System.out.println("try ……");`打印"try ……"。 3. `return res + 1;`返回2...

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

    很多人都认为 finally 语句一定会被执行,但这是不正确的。在某些情况下,finally 语句可能不会被执行,例如在 try 语句之前就返回了,在 try 块中有 System.exit(0) 语句等。 那么,finally 语句是在 try 的 ...

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

    首先,我们需要澄清一个常见的误解:`finally`语句块并不总是会执行。这个概念在某些特定情况下并不成立。举个例子,当`try`语句块在执行前就返回了(`return`语句)或抛出了异常,如果`try`块没有被执行,相应的`...

    finally结构的注意点(一)

    // 总是会执行的代码 } ``` `finally` 块的执行规则有以下几点需要注意: 1. **返回值**:如果 `finally` 块包含 `return` 语句,那么它将覆盖 `try` 或 `catch` 块中的任何 `return` 语句。这意味着最后的返回值...

    java大厂面经、直击BAT

    finally 一定会被执行,如果 finally 里有 return 语句,则覆盖 try/catch 里的 return , 比较爱考的是 finally 里没有 return 语句,这时虽然 finally 里对 return 的值进行了修改,但 return 的值并不改变这种...

    java面试时候经常会问的一些问题.doc

    2. finally 语句一定会执行么? finally 语句总是会执行的,除非 JVM 退出或 Thread 死亡。finally 语句主要用于释放资源和处理异常。 3. try-catch-finally 语句的执行顺序是如何的? try 语句执行 -> catch ...

    java finally块执行时机全面分析

    4. `finally`块的执行并不意味着一定会等到所有其他代码执行完毕。例如,如果`try`或`catch`块中有一个`return`语句,`finally`块将在`return`之前执行,但不会阻止`return`语句的执行。 关于字节码层面的解释,...

    final, finally, finalize的区别

    1. **不可靠性**:无法保证 `finalize` 方法一定会被调用,因为 GC 的具体行为取决于 JVM 实现以及运行环境。 2. **效率低下**:`finalize` 方法的执行可能会延迟 GC 的完成时间,从而降低程序的运行效率。 3. *...

    VB.NET Try Catch Finally用法演示源码.rar

    VB.NET 演示带Finally的Try Catch 异常处理用法...使用Finally的好处是,把资源释放或状态还原的代码放到finally块中,可以保证在try和catch语句执行完后,一定会执行finally语句块,而不用考虑各种复杂的跳转情况。

    Java学习笔记

    finally中的代码和try-catch中的代码冲突时,finally中的代码一定会被执行且会忽略try-catch中的代码。但是如果try-catch中有System.exit(0);(虚拟机退出语句),则不会去执行fianlly中的代码。

    深入浅析java中finally的用法

    finally块可以用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定会被执行(不管有没有抛出异常)。这使得finally块非常适合用于释放资源的情况,例如关闭数据库连接、文件流等。 在上面的代码示例中...

    java是去蜗牛还是源码时代-JavaInterviewQuestions:Java面试题

    (1)try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。 (2)在try块中有System.exit(0);这样的语句,...

    C#中Try-Catch语句真的影响程序性能吗?

    总结来说,C#中的Try-Catch语句确实会对程序性能产生一定影响,但这种影响通常很小,特别是在处理可能的错误和异常情况时,其带来的安全性提升远大于性能损失。在编写代码时,应根据具体情况权衡是否使用Try-Catch,...

    Java面试题目大全 很好的

    finally块一定会执行吗? try用于捕获异常,catch处理异常,finally确保一段代码无论是否发生异常都会执行。通常,finally块会被执行,除非程序被系统退出或者JVM崩溃。 6. **IO流** - 什么是字符流和字节流?...

    Java异常处理-异常处理的方式1

    理解`finally`的关键在于,它提供了一种保证某些代码一定会被执行的机制,这对于资源管理尤为重要。在面试和笔试中,可能会遇到涉及`finally`使用的问题,例如: - 题1:`finally`块中的return语句会覆盖try-catch...

    Java异常处理操作实例小结

    Java 异常处理操作实例小结 Java 异常处理是 Java 编程语言中的一种错误处理机制,用于捕获和处理运行时的...在 try 语句块中,可能出现异常,但是 finally 语句块将被执行,并打印出“这里一定会被执行!”的信息。

Global site tag (gtag.js) - Google Analytics