`

try-catch-finally小结

阅读更多

最近学生去面试,被一个sb面试官忽悠了。那个家伙竟然说try块执行后不会执行finally。今天在http://wangwangzhi.iteye.com/blog/1632842上看到这篇文章摘录过来,供大家借鉴下。


使用 Integer.valueOf 方法模拟异常,来说明关于 try catch finally 之间的问题。


示例 1:没有异常,正常情况

 

Java代码  收藏代码
  1. public   class  TryCatchFinally {  
  2.   
  3.     public   static   void  main(String[] args) {  
  4.         try  {  
  5.             System.out.println("try statement     :-)" );  
  6.             Integer.valueOf("2" );  
  7.         } catch  (NumberFormatException nfe) {  
  8.             System.out.println("catch statement   :-)" );  
  9.         } finally  {  
  10.             System.out.println("finally statement :-)" );  
  11.         }  
  12.     }  
  13. }  


示例 2:没有异常,正常情况,但是 try 语句里面添加 return 

Java代码  收藏代码
  1. public   class  TryCatchFinally {  
  2.   
  3.     public   static   void  main(String[] args) {  
  4.         try  {  
  5.             System.out.println("try statement     :-)" );  
  6.             Integer.valueOf("2" );  
  7.             return ;  
  8.         } catch  (NumberFormatException nfe) {  
  9.             System.out.println("catch statement   :-)" );  
  10.         } finally  {  
  11.             System.out.println("finally statement :-)" );  
  12.         }  
  13.     }  
  14. }  


示例 1 和 示例 2 的运行结果一致:

 



示例 3:制造异常

 

Java代码  收藏代码
  1. public   class  TryCatchFinally {  
  2.   
  3.     public   static   void  main(String[] args) {  
  4.         try  {  
  5.             System.out.println("try statement     :-)" );  
  6.             Integer.valueOf("bluetooth" );  
  7.         } catch  (NumberFormatException nfe) {  
  8.             System.out.println("catch statement   :-)" );  
  9.         } finally  {  
  10.             System.out.println("finally statement :-)" );  
  11.         }  
  12.     }  
  13. }  


示例 4:制造异常,catch 语句里面添加 return

 

Java代码  收藏代码
  1. public   class  TryCatchFinally {  
  2.   
  3.     public   static   void  main(String[] args) {  
  4.         try  {  
  5.             System.out.println("try statement     :-)" );  
  6.             Integer.valueOf("bluetooth" );  
  7.         } catch  (NumberFormatException nfe) {  
  8.             System.out.println("catch statement   :-)" );  
  9.             return ;  
  10.         } finally  {  
  11.             System.out.println("finally statement :-)" );  
  12.         }  
  13.     }  
  14. }  


示例 3 和 示例 4 的运行结果一致:

 



由此,可以看出以上四种情况,finally 语句都被执行了。


示例 5:制造异常,catch 语句里面添加 return


目的:验证finally代码块后面的代码是否会被执行 ??????

 

Java代码  收藏代码
  1. public   class  TryCatchFinally {  
  2.   
  3.     public   static   void  main(String[] args) {  
  4.         try  {  
  5.             System.out.println("try statement     :-)" );  
  6.             Integer.valueOf("bluetooth" );  
  7.         } catch  (NumberFormatException nfe) {  
  8.             System.out.println("catch statement   :-)" );  
  9.             return ;  
  10.         } finally  {  
  11.             System.out.println("finally statement :-)" );  
  12.         }  
  13.   
  14.         System.out.println("out of try...catch...finally statement" );  
  15.     }  
  16. }  


执行结果:

 



如果将 catch 语句里面添加 return 注释掉,执行结果:



示例 6:制造异常,try 语句里面添加 return 

Java代码  收藏代码
  1. public   class  TryCatchFinally {  
  2.   
  3.     public   static   void  main(String[] args) {  
  4.         try  {  
  5.             System.out.println("try statement     :-)" );  
  6.             Integer.valueOf("dd" );  
  7.             return ;  
  8.         } catch  (NumberFormatException nfe) {  
  9.             System.out.println("catch statement   :-)" );  
  10.         } finally  {  
  11.             System.out.println("finally statement :-)" );  
  12.         }  
  13.   
  14.         System.out.println("out of try...catch...finally statement" );  
  15.     }  
  16. }  


执行结果:

 



示例 7:无异常,try 语句里面添加 return 

Java代码  收藏代码
  1. public   class  TryCatchFinally {  
  2.   
  3.     public   static   void  main(String[] args) {  
  4.         try  {  
  5.             System.out.println("try statement     :-)" );  
  6.             Integer.valueOf("2" );  
  7.             return ;  
  8.         } catch  (NumberFormatException nfe) {  
  9.             System.out.println("catch statement   :-)" );  
  10.         } finally  {  
  11.             System.out.println("finally statement :-)" );  
  12.         }  
  13.   
  14.         System.out.println("out of try...catch...finally statement" );  
  15.     }  
  16. }  


执行结果(无异常,return 返回,所以finally代码块后面的语句就不会执行:-)

 



以上种种迹象表明:


finally 语句都被执行了,但是还有另外一种情况没有被验证,接着往下看 快哭了


就是在 try...catch... 里面退出 JVM :


 

Java代码  收藏代码
  1. public   class  TryCatchFinally {  
  2.   
  3.     public   static   void  main(String[] args) {  
  4.         try  {  
  5.             System.out.println("try statement     :-)" );  
  6.             Integer.valueOf("2eer" );  
  7.             System.exit(0 );  
  8.         } catch  (NumberFormatException nfe) {  
  9.             System.out.println("catch statement   :-)" );  
  10.             System.exit(0 );  
  11.         } finally  {  
  12.             System.out.println("finally statement :-)" );  
  13.         }  
  14.   
  15.         System.out.println("out of try...catch...finally statement" );  
  16.     }  
  17. }  

 


执行结果:



try 或者 catch 语句里面(任意一个)调用 System.exit ,那么 finally 语句就不会被执行。

分享到:
评论

相关推荐

    JavaScript性能陷阱小结(附实例说明)

    不要在性能要求关键的函数中使用try-catch-finally 4.避免使用全局变量 5.避免在性能要求关键的函数中使用for-in 6.使用字符串累加计算风格 7.原操作会比函数调用快 8.设置setTimeout() 和 setInterval() 时传递函数...

    JAVA软件工程师_Java入门视频教程

    小结 [第9节] 1.2.1为什么需要封装1 [第10节] 1.2.1为什么需要封装2 [第11节] 1.2.2如何实现封装2 [第12节] 1.2.3如何使用包1 [第13节] 1.2.3如何使用包2 [第14节] 1.2.4类成员的访问控制1 [第15节] 1.2.4类成员的...

    JAVA异常入门(思维导图)

    1.异常的概念2....捕获并处理异常(try……catch/finally)try……catch块 try……多catch块 try……catch/finally块 4.抛出异常throws5.自定义异常 自定义异常的来由 操作步骤 实例 5.小结 throw与throws的区别

    ASP.NET 3.5 开发大全11-15

    2.7.4 try-catch-finally异常语句 2.8 小结 第3章 面向对象设计基础 3.1 什么是面向对象 3.1.1 传统的面向过程 3.1.2 面向对象的概念 3.1.3 面向组件的概念 3.2 面向对象的C#实现 3.2.1 定义 3.2.2 创建一个类和其...

    ASP.NET 3.5 开发大全1-5

    2.7.4 try-catch-finally异常语句 2.8 小结 第3章 面向对象设计基础 3.1 什么是面向对象 3.1.1 传统的面向过程 3.1.2 面向对象的概念 3.1.3 面向组件的概念 3.2 面向对象的C#实现 3.2.1 定义 3.2.2 创建一个类和其...

    21天学通Java-由浅入深

    60分钟) 217 11.1 异常处理基本介绍 217 11.1.1 try和catch捕获异常 217 11.1.2 try-catch语句使用注意点 218 11.1.3 finally语句的使用 220 11.1.4 再谈异常处理注意点 222 11.2 异常的分类 223 11.2.1 捕获异常 ...

    ASP.NET3.5从入门到精通

    2.7.4 try-catch-finally 异常语句 2.8 小结 第 3 章面向对象设计基础 3.1 什么是面向对象 3.1.1 传统的面向过程 3.1.2 面向对象的概念 8 第一篇 窗口与界面编程 3.1.3 面向组件的概念 3.2 面向对象的C#实现 3.2.1 ...

    ASP.NET 3.5 开发大全

    2.7.4 try-catch-finally异常语句 2.8 小结 第3章 面向对象设计基础 3.1 什么是面向对象 3.1.1 传统的面向过程 3.1.2 面向对象的概念 3.1.3 面向组件的概念 3.2 面向对象的C#实现 3.2.1 定义 3.2.2 创建一个类和其...

    ASP.NET 3.5 开发大全word课件

    2.7.4 try-catch-finally异常语句 2.8 小结 第3章 面向对象设计基础 3.1 什么是面向对象 3.1.1 传统的面向过程 3.1.2 面向对象的概念 3.1.3 面向组件的概念 3.2 面向对象的C#实现 3.2.1 定义 3.2.2 创建一个类和其...

    ASPNET35开发大全第一章

    2.7.4 try-catch-finally异常语句 2.8 小结 第3章 面向对象设计基础 3.1 什么是面向对象 3.1.1 传统的面向过程 3.1.2 面向对象的概念 3.1.3 面向组件的概念 3.2 面向对象的C#实现 3.2.1 定义 3.2.2 创建一个类和其...

    Visual C# 2005程序设计自学手册 随书源码第一部分(共三部)

    3.4.3 try-catch-finally语句 65 3.5 本章小结 66 第4章 数组 67 4.1 数组简介 68 4.1.1 数组的概述 68 4.1.2 数组的应用 68 4.2 静态数组 69 4.2.1 一维数组的声明 69 4.2.2 一维数组元素的调用...

    ASP.NET 2.0+SQL Server 2005全程指南-源代码

    2.6.1 用trycatch捕获异常 2.6.2 用tryfinally清除异常 2.6.3 用trycatchfinally处理所有的异常 2.7 面向对象程序设计 2.7.1 成员 2.7.2 类的可访问性 2.7.3 构造函数和析构函数 2.7.4 封装 2.7.5 继承 ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    Node.js MongoDB AngularJSWeb开发中文版.part1

    2.10.1 try/catch块 30 2.10.2 抛出你自己的错误 31 2.10.3 使用finally 31 2.11 小结 32 2.12 下一章 32 第2部分 学习Node.js 第3章 开始使用Node.js 35 3.1 了解Node.js 35 3.1.1 谁在使用Node.js 35 3.1.2 Node....

    AspNet MVC 开发技术

    7.2.1 try...catch...finally 153 7.2.2 列出和配置异常 157 7.2.3 异常处理的注意事项 158 7.3 小结 159 7.4 练习 159 7.5 本章要点 159 第8章 面向对象编程简介 161 8.1 面向对象编程的含义 162 8.1.1 对象的含义 ...

    轻松学C#(图解版)

    1.4 小结 11 1.5 习题 12 第二篇 面向对象基础篇 第2章 类和对象 16 2.1 分析Hello World程序 16 2.2 语法规范 17 2.2.1 标识符 17 2.2.2 关键字 18 2.2.3 注释 19 2.3 定义类 20 2.4 实例化对象 20 2.5 小结 20 ...

    ActionScript开发技术大全

    8.3.1使用try…catch…finally语句 160 8.3.2throw语句主动抛出异常 162 8.3.3处理异常事件 163 8.4异常类型 163 8.4.1异常对象 164 8.4.2异常分类 164 8.4.3自定义异常类型 166 8.5小结 167 第3篇ActionScript3.0...

    javaSE代码实例

    11.1.4 try、catch及finally语句块之间需要注意的问题 201 11.2 异常的层次结构 203 11.2.1 捕获异常 203 11.2.2 未捕获异常 205 11.3 再次抛出异常 206 11.3.1 什么是异常的再抛出 206 11.3.2 显性再...

    Java开发技术大全 电子版

    6.6try-catch-finally语句的嵌套231 6.7用户自定义异常234 6.8使用异常来实现键盘输入235 6.9本章小结236 第7章Java的输入和输出237 7.1文件和输入输出流237 7.2InputStream类和OutputStream类的使用238 ...

Global site tag (gtag.js) - Google Analytics