Java编程中finally语句

当用到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部分无法执行。

阅读更多
个人分类: Android开发基础
上一篇Android 中的.obj和.what
下一篇提示webView.setting()空指针错误
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭