`
msn877763580
  • 浏览: 81438 次
  • 性别: 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大厂面经、直击BAT

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

    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是去蜗牛还是源码时代-JavaInterviewQuestions:Java面试题

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

    Java常见面试题208道.docx

    77.try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗? 78.常见的异常类有哪些? 八、网络 79.http 响应码 301 和 302 代表的是什么?有什么区别? 80.forward 和 redirect 的区别? 81.简述 tcp...

    千方百计笔试题大全

    31、java 中会存在内存泄漏吗,请简单描述。 11 32、abstract 的method 是否可同时是static,是否可同时是native,是否可同时是synchronized? 11 33、静态变量和实例变量的区别? 11 34、是否可以从一个static 方法...

    java面试宝典

    31、java 中会存在内存泄漏吗,请简单描述。 11 32、abstract 的method 是否可同时是static,是否可同时是native,是否可同时是synchronized? 11 33、静态变量和实例变量的区别? 11 34、是否可以从一个static 方法...

    Android捕捉错误try catch 的简单使用教程

    基本语法 try{ //可能发生错误的程式码 }catch(具体错误 e){ //具体错误有就写,没有就不写,有多个,就写多个catch ... finally 语句是一定会执行的程式段,一般用来删除物件或关闭档案等 参数 err 可以取得错误信

    java面试题

    配置了lazy="true"一定会懒加载吗? 答:不一定,如果在配置中你也使用了fetch属性的话此时lazy就会失效。 Hibernate数据库标识与主键之间的认识? 答:标识是为了方便和简介映射文件,主键是为了让数据不会重复。 ...

    net学习笔记及其他代码应用

    答:会执行,在return前执行。 44.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 答:不对,有相同的hash code。 45.swtich是否能作用在byte上,是否能作用在long上,是否能作用...

    【09-异常处理】

    一定会执行的代码; } 复制代码 Finally代码块只有一种情况不会被执行。就是在之前执行了System.exit(0)。 Java 7提供的多异常捕捉 •在Java 7以前,每个catch块只能捕捉一个异常。从Java 7开始...

    java 面试题 总结

    finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 13、sleep()...

    java面试800题

    Q0033 在Oracle数据库中,给定一个表,其中一列有索引,现在用这个列作为查询条件,因为用到了索引,速度一定会快吗? 答案是否定的,比如在这个列中使用‘%sdfd%’来进行模糊查询 Q0034 给定了一些创建数据库试图...

    JAVA面试题最全集

    子句就会执行,然后控制就会进入 finally 块(如果有的话)。 finalize?方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这...

    超级有影响力霸气的Java面试题大全文档

    finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 16、sleep...

    Java的六大问题你都懂了吗

    也就是说,把初始化语句放在只有if块的条件判断语句中编译器也会抗议,因为执行的时候可能不符合if后面的判断条件,如此一来初始化语句就不会被执行了,这就违反了局部变量使用前必须初始化的规定。但如果在else块中...

    Hibernate中的query 分页.doc

    如果这个结果集非常大,例如几万条,不但程序执行速度会很慢,而且很容易导致out of memory。当然个别JDBC Driver使用了服务器端游标来实现,那么就不会导致这种问题,例如jTDS。 二、Hibernate可以使用Query....

    关于数据库连接池的问题和思考

    在这里也要提醒各位,特别是使用try……catch……这样的容错处理时,一定要记得执行Finally语句,在Finally中关闭数据库。  在网上搜了一下午,才找到了一些头绪,然后总结下来,供大家参考:  数据库有自己的...

Global site tag (gtag.js) - Google Analytics