try,catch,finally

简介:

1.try,catch,finally

  try关键字用来包围可能会出现异常的逻辑代码,它单独无法使用,必须配合catch或者finally使用。Java编译器允许的组合使用形式只有以下三种形式:

  try...catch...;       try....finally......;    try....catch...finally...

  当然catch块可以有多个,注意try块只能有一个,finally块是可选的(但是最多只能有一个finally块)。

  三个块执行的顺序为try—>catch—>finally。

  当然如果没有发生异常,则catch块不会执行。但是finally块无论在什么情况下都是会执行的(这点要非常注意,因此部分情况下,都会将释放资源的操作放在finally块中进行)。

  在有多个catch块的时候,是按照catch块的先后顺序进行匹配的,一旦异常类型被一个catch块匹配,则不会与后面的catch块进行匹配。

  在使用try..catch..finally块的时候,注意千万不要在finally块中使用return,因为finally中的return会覆盖已有的返回值。下面看一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import  java.io.FileInputStream;
import  java.io.FileNotFoundException;
import  java.io.IOException;
 
 
public  class  Main {
     public  static  void  main(String[] args) {
         String str =  new  Main().openFile();
         System.out.println(str);
         
     }
     
     public  String openFile() {
         try  {
             FileInputStream inputStream =  new  FileInputStream( "d:/a.txt" );
             int  ch = inputStream.read();
             System.out.println( "aaa" );
             return  "step1" ;
         catch  (FileNotFoundException e) {
             System.out.println( "file not found" );
             return  "step2" ;
         } catch  (IOException e) {
             System.out.println( "io exception" );
             return  "step3" ;
         } finally {
             System.out.println( "finally block" );
             //return "finally";
         }
     }
}

  这段程序的输出结果为:

  可以看出,在try块中发生FileNotFoundException之后,就跳到第一个catch块,打印"file not found"信息,并将"step2"赋值给返回值,然后执行finally块,最后将返回值返回。

  从这个例子说明,无论try块或者catch块中是否包含return语句,都会执行finally块。

  如果将这个程序稍微修改一下,将finally块中的return语句注释去掉,运行结果是:

  

  最后打印出的是"finally",返回值被重新覆盖了。

  因此如果方法有返回值,切忌不要再finally中使用return,这样会使得程序结构变得混乱。



本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/4848779.html,如需转载请自行联系原作者

相关文章
|
5月前
|
编译器
try{...}catch(){...}finally{...}语句你真的理解吗?
try{...}catch(){...}finally{...}语句你真的理解吗?
33 0
|
5月前
|
C++
C++异常处理try和throw以及catch的使用
C++异常处理try和throw以及catch的使用
try catch finally,try 里面有 return,finally 还执行吗?
try catch finally,try 里面有 return,finally 还执行吗?
54 0
|
5月前
|
Java
你真的了解try catch finally吗?(面试题)
你真的了解try catch finally吗?(面试题)
38 0
|
12月前
16 # 实现 catch 方法
16 # 实现 catch 方法
51 0
|
存储 IDE Java
try catch finally 执行顺序总结
try catch finally 执行顺序总结
116 0
|
Web App开发 JavaScript 前端开发
啊,似乎没有真正理解 try...catch...finally!
啊,似乎没有真正理解 try...catch...finally!
480 0
啊,似乎没有真正理解 try...catch...finally!
|
Java
【学习笔记】【Java】try-catch-finally中,finally是在什么时候执行的:try结束、catch结束、return前
结论:try-catch-finally中,finally执行:try结束、catch结束、return前
190 0
【学习笔记】【Java】try-catch-finally中,finally是在什么时候执行的:try结束、catch结束、return前
|
Java 程序员 编译器
技术大佬:我去,你竟然还在用 try–catch-finally
技术大佬:我去,你竟然还在用 try–catch-finally
122 0
技术大佬:我去,你竟然还在用 try–catch-finally
try-catch-finally 和 return 是怎么执行的?
来源:http://liangfei.me/ 最近一直在看Java虚拟机规范,发现直接分析bytecode更能加深对Java语言的理解。 之前看过一篇关于 return 和 finally 执行顺序的文章,仅在 Java 的语言层面做了分析,其实我倒觉得直接看 bytecode 可能来的更清晰一点。