Java编程中finally语句

原创 2018年04月17日 12:53:38

当用到try - catch - finally执行操作时,一般我们都认为finally部分的语句一定会执行,但是事实并非如此。

public class Test { 
public static void main(String[] args) { 
System.out.println("return value of test(): " + test()); 
 
public static int test() { 
int i = 1
  
//  if(i == 1) 
//   return 0; 
System.out.println("the previous statement of try block"); 
i = i / 0

try
 System.out.println("try block"); 
  return i; 
  }finally
  System.out.println("finally block"); 
 
}

执行结果如下:

the previous statement of try block 
Exception in thread "main" java.lang.ArithmeticException: / by zero 
at com.bj.charlie.Test.test(Test.java:15) 
at com.bj.charlie.Test.main(Test.java:6)

但是,如果把注释的语句去掉,结果如下:

return value of test(): 0

可见,两种情况都没有执行到finally的内的语句。Why?

只有与 finally 相对应的 try 语句块得到执行的情况下,finally 语句块才会执行。以上两种情况,都是在 try 语句块之前返回(return)或者抛出异常,所以 try 对应的 finally 语句块没有执行。
那么,如果相对应try语句执行了finally语句就一定会执行吗?答案是否定的,即使与 finally 相对应的 try 语句块得到执行的情况下,如果try中有着使java虚拟机停止运行或者程序停止的动作,都会导致finally部分无法执行。

try中return语句与finally语句执行顺序

 在这里看到了try catch finally块中含有return语句时程序执行的几种情况,但其实总结的并不全,而且分析的比较含糊。但有一点是可以肯定的,finally块中的内容会先于tr...
  • lucyxu107
  • lucyxu107
  • 2017-06-14 15:16:02
  • 184

Java中finally语句块的深度解析(try catch finally的执行顺序)

首先摆出结论: 1、除了以下2种情况外,不管有木有出现异常,finally块中代码都会执行; ①程序未进入try{}块的执行,如在try之前出现运行时异常,程序终止。 ②程序进入到try{}和c...
  • u014475796
  • u014475796
  • 2016-11-08 22:25:10
  • 1022

Finally语句块的执行

一、finally语句块是否正的执行? Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过试验验,...
  • user_longling
  • user_longling
  • 2014-05-05 18:27:03
  • 1427

java在处理异常时finally语句的作用

先看代码:public class text { public int devide(int x, int y) throws Exception { int result =...
  • yabg_zhi_xiang
  • yabg_zhi_xiang
  • 2016-03-31 13:16:28
  • 1611

C#中异常处理语句Finally

转自:http://zhidao.baidu.com/link?url=SsYrrtv7MchPg08WaUyF_KB3_BxPkwXrszswBlKS4Sb_0KKjNTZ4_rTjrFbGHhk5...
  • u010232305
  • u010232305
  • 2016-04-04 11:56:42
  • 590

程序员面试金典: 9.14 Java 14.2在Java中,若在try-catch-finally的try语句块中插入return语句,finally语句块是否还会执行?

问题:在Java中,若在try-catch-finally的try语句块中插入return语句,finally语句块是否还会执行? 分析:不一定。如果在try语句中走到return语句之前都没有发生...
  • qingyuanluofeng
  • qingyuanluofeng
  • 2017-01-15 11:58:24
  • 477

java异常—— finally 子句+带资源的 try语句

【0】README0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java异常—— finally 子句+带资源的 try语句 的相关知识;【1】 finally...
  • PacosonSWJTU
  • PacosonSWJTU
  • 2015-12-09 18:52:50
  • 1411

JAVA中的finally语句

finally语句在任何情况下都必须执行的代码,这样可以保证一些在任何情况下都必须执行代码的可靠性。比如,在数据库查询异常的时候,应该释放JDBC连接等等。finally语句先于return语句执行,...
  • CarryBest
  • CarryBest
  • 2017-04-10 14:17:33
  • 281

try和finally中都有return语句,执行哪一个return?

1.首先要确定的一点是,不管有木有出现异常,finally块中代码都会执行 2、当try和catch中有return时,finally仍然会执行; 3、finally是在return后面的表达式运...
  • xing930408
  • xing930408
  • 2017-07-01 23:09:22
  • 943
收藏助手
不良信息举报
您举报文章:Java编程中finally语句
举报原因:
原因补充:

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