Java中的try catch finally

在任何一本Java教材中,异常处理都是作为单独的章节讲解的,足可见其分量。

而真正的能够用好这个知识,只有经历实际项目的开发才会有点体会。

1、try catch finally的执行顺序

(1).一般情况下:try----catch----finally呢

(2).如果try中有return:try----finally----return

(3).如果catch中有return:try----catch ----finally----return

在后两种情况下,reurn会被暂存在栈里面,等到finally执行完再返回。

这种机制保证无论出现什么情况,在try catch过程中finally都被执行一次,特别适合用于释放资源,例如释放数据库链接、释放打开的文件流等

下面看这一段代码,结果t会是神马东东?

public static final String test() {
          String t = "";
          try {
              t = "try";
              return t;
          }
         catch (Exception e) {
              t = "catch";
              return t;
          }
          finally {
             t = "finally";
     //return t;
         }
     }    

上面我们讲到finally之前,return会被暂存到栈里面。上面代码里的t就会暂存起来,等到实际return的时候重新启用,所以上面的代码的正确返回值是"try"。

但是如果我们在finlly字句中添加了return,那么前面try子句中的t值就会被淹没,此时实际的返回值会是"finally"

2、try catch finally结构使用的建议

不建议在finally块中添加return,因为会消化掉try catch中的异常信息,不利于错误的正常处理,合理的return语句的位置:

(1).return语句只在函数最后出现一次。
(2).return语句仅在try和catch里面都出现。
(3).return语句仅在try和函数的最后都出现。
(4).return语句仅在catch和函数的最后都出现。

参考: http://www.cnblogs.com/aigongsi/archive/2012/04/19/2457735.html

时间: 2024-10-25 19:51:40

Java中的try catch finally的相关文章

5.27 java中try,catch,throw,throws,finally

http://blog.sina.com.cn/s/blog_4f1c99de0100tyty.html try{//代码区}catch(Exception e){//异常处理}代码区如果有错误,就会返回所写异常的处理. 首先要清楚,如果没有try的话,出现异常会导致程序崩溃.而try则可以保证程序的正常运行下去. Java的异常处理是通过5个关键字来实现的:try,catch,throw,throws,finally.JB的在线帮助中对这几个关键字是这样解释的:Throws:  Lists t

【Java学习笔记之三十三】详解Java中try,catch,finally的用法及分析

这一篇我们将会介绍java中try,catch,finally的用法 以下先给出try,catch用法: try { //需要被检测的异常代码 } catch(Exception e) { //异常处理,即处理异常代码 } 代码区如果有错误,就会返回所写异常的处理. 首先要清楚,如果没有try的话,出现异常会导致程序崩溃.而try则可以保证程序的正常运行下去,比如说: try { int i = 1/0; } catch(Exception e) { ........ } 一个计算的话,如果除数

在java中的Try Catch块-------------异常处理(2)

1. Try块是什么? Try块是一块可能产生异常的代码块,一个Try块可能跟着Catch块或者Finally块,或者两者. Try块的语义: try{ //statements that may cause an exception } 2. Catch块是什么? 一个Catch块关联一个Try块,如果在Try块中有一个特定类型的异常发生,则响应的Catch块会执行,例如, 如果在Try块中arithmmetic exception发生,那么对应arithmmetic exception的Ca

java中try 与catch的使用

(2011-10-08 17:08:43) 转载▼ 标签: 杂谈 分类: Java try{//代码区}catch(Exception e){//异常处理}代码区如果有错误,就会返回所写异常的处理. 首先要清楚,如果没有try的话,出现异常会导致程序崩溃.而try则可以保证程序的正常运行下去,比如说:try{int i = 1/0;}catch(Exception e){........}一个计算的话,如果除数为0,则会报错,如果没有try的话,程序直接崩溃.用try的话,则可以让程序运行下去,

Java中的try catch finaly先后调用顺序

自我总结,有什么不足或好的方案,希望大家给予纠正,感激不尽! 目的:try catch finaly的顺序执行,和大家复习一遍. 方法:debug来确认执行顺序.(需要引入junit包) 废话不多说,debug是检验代码执行顺序的唯一标准,哈哈... 测试一: 新建测试类:ExceptionTest package com.core.test007; import org.junit.Test; public class ExceptionTest { @Test public void mai

java 中的try catch在文件相关操作的使用

import java.io.CharConversionException; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; /** * 文件操作 * */ public class TestReadFile { public static void main(String[] args) { FileReader reader =null; try { r

Java中的try,catch(Exception e),finally及return

结论: ①就算之前return,finally也会执行 ②finally的计算结果不影响之前的return值 ③finally的return值一定是最后的返回结果,因此将return放入finally编译器会警告. static int testReturn() { int res = 0; File file = new File("test"); try { Scanner in = new Scanner(file); return res = 1; } catch (FileN

Java牛角尖【007】:Java中的Error能不能被Catch

网上看到很多朋友说Java中Error是无法Catch到的,而Java中定义的Error类型又很难测试到,那就估且以为确是如此吧. 但是或许大家都有注意,我们时常会看到这样的代码 [java] view plain copy try{ ... }catch(Throwable ex){ ... } 其中catch中直接捕捉的是一个Throwable类,打开继承关系看一下,Exception和Error两个类同样是从Throwable类继承而来,那么,也就是说Error应该是可以被捕捉的,下面写个

[转载]Java中异常的捕获顺序(多个catch)

http://blog.sina.com.cn/s/blog_6b022bc60101cdbv.html [转载]Java中异常的捕获顺序(多个catch) (2012-11-05 09:47:28) 转载▼ 标签: 转载 分类: 转载 原文地址:Java中异常的捕获顺序(多个catch)作者:leesa Java代码 import java.io.IOException; public class ExceptionTryCatchTest { public void doSomething(