`

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 语句就不会被执行。

分享到:
评论

相关推荐

    Try…Catch使用小结

    2. **资源管理**:Try…Catch 结合 Finally 语句块常用于确保资源(如数据库连接、文件流等)在任何情况下都能被正确关闭。例如,在示例中,即使在打开数据库连接时出现异常,Finally 块也会确保在程序退出前关闭...

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

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

    java核心技术源码范例和详细说明(由浅入深,深度解读在资料后半部分).docx

    8. 小结: 合理使用异常处理技术,可以帮助我们准确地定位和解决程序中的问题,提升代码的可维护性和可扩展性。在实际开发中,我们需要根据具体的业务需求和程序逻辑,灵活运用异常处理机制,以提高程序的健壮性和...

    java异常讲解

    #### 七、小结 通过以上介绍,我们可以了解到Java异常处理机制的强大之处。正确地使用异常处理不仅可以提高程序的健壮性,还可以让程序更加易于维护和扩展。在实际开发中,合理地使用异常处理机制对于构建高质量的...

    Java 异常处理小结,从入门到精通

    可以有`try-catch-finally`结构,也可以只有`try-finally`结构。 在某些情况下,我们不想在当前方法中处理异常,而是希望将异常传递给调用者。这时,可以在方法声明中使用`throws`关键字,表明该方法可能会抛出指定...

    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基础小结

    - **异常处理**:Java通过try-catch-finally语句块进行异常处理,确保程序在遇到错误时能够有序地执行或记录错误信息。 2. **Java环境配置** - **JDK安装**:Java Development Kit(JDK)是Java开发所需的基本...

    第07章 处理异常和错误1.pdf

    #### 小结 异常处理是程序设计中非常重要的一个环节,特别是在 C# 这样的面向对象语言中。合理使用 try/catch/finally 结构可以帮助开发者有效地管理程序中的异常情况,提高程序的稳定性和用户体验。同时,合理的...

    JAVA上课笔记class_08

    #### 小结 本章节主要介绍了Java中的异常处理机制和Swing GUI编程的基础知识。通过学习异常处理,可以有效提高程序的健壮性和稳定性;而了解Swing组件和布局管理器,则有助于开发美观且功能丰富的图形用户界面。

    JAVA异常入门(思维导图)

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

    Java异常处理操作实例小结

    Java 异常处理操作实例小结 Java 异常处理是 Java 编程语言中的一种错误处理机制,用于捕获和处理运行时的异常情况。本文将通过实例形式总结分析 Java 异常处理操作的常见情况与相关处理技巧。 一、异常处理的使用...

    asp.net从入门到精通

    - **try-catch-finally异常语句**:综合运用以上异常处理结构。 - **2.8 小结**:回顾本章关键点。 #### 三、面向对象设计基础 - **3.1 什么是面向对象** - **传统的面向过程**:比较面向对象与面向过程的不同...

    java课程小结.rar_北京理工大学JAVA课程

    8. **异常处理**:Java使用try-catch-finally结构来捕获和处理运行时错误,异常类层次结构使得可以精确地捕获和处理特定类型的异常。 9. **输入输出(I/O)**:Java的I/O流系统是处理数据传输的基础,包括文件操作...

    文件读写操作小结

    在Java中,通常使用try-catch-finally结构来捕获并处理可能出现的`IOException`。 6. 文件锁定 在多线程环境中,为防止多个线程同时对同一文件进行读写,可以使用文件锁。Java中的`FileChannel`提供了锁机制,其他...

    C#基础教程

    - try-catch-finally语句的使用。 - **8.5 小结** - 流程控制是程序设计的基础,掌握这些语句可以让程序更加灵活。 #### 第三部分:面向对象的C# ##### 第九章:面向对象的程序设计 - **9.1 面向对象的基本概念...

    Quartz使用小结

    同时,还要注意错误处理和资源管理,比如使用try-catch-finally结构捕获异常,释放占用的资源。此外,如果项目中存在大量Job,可以考虑使用JobGroup进行分类管理。 总之,Quartz作为强大的任务调度框架,提供了丰富...

    java基础知识从业必备知识点结构图小结.rar

    异常处理是通过try-catch-finally结构来捕获和处理程序运行时可能出现的问题,保证程序的健壮性。 4. **集合IO** 集合框架与I/O流的结合是Java开发中的重要部分。集合负责在内存中组织和管理数据,而I/O流则处理...

    C#入门教程

    - 包括`try-catch-finally`等。 - **8.5 小结** - 概述了流程控制的各种方法。 #### 第三部分:面向对象的C# ##### 第九章:面向对象的程序设计 - **9.1 面向对象的基本概念** - 包括类、对象、封装、继承、...

    C#语言教程

    - try-catch-finally块用于捕获和处理异常。 - **8.5 小结** - 概述了C#中的流程控制结构,帮助开发者编写更加灵活和健壮的程序。 #### 第三部分:面向对象的C# ##### 第九章:面向对象的程序设计 - **9.1 面向...

Global site tag (gtag.js) - Google Analytics