博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
try,catch,finally
阅读量:6590 次
发布时间:2019-06-24

本文共 1627 字,大约阅读时间需要 5 分钟。

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,如需转载请自行联系原作者

你可能感兴趣的文章
idea文件折叠显示出来配置
查看>>
垃圾回收解析
查看>>
SQLSERVER中的非工作时间不得插入数据的触发器的实现
查看>>
如何写出兼容大部分浏览器的CSS 代码
查看>>
第二阶段冲刺第八天,6月7日。
查看>>
java的左移位(<<)和右移位(>>)和无符号右移(>>>)
查看>>
struts2 action 返回类型分析
查看>>
【原创】FPGA开发手记(三) PS/2键盘
查看>>
viewpage滑动查看图片并再有缩略图预览
查看>>
linux统计多个文件大小总和
查看>>
java基础-Eclipse开发工具介绍
查看>>
JS常见的字符串操作
查看>>
洛谷P1069 细胞分裂 数学
查看>>
JAVA中的编码分析
查看>>
查看源代码Source not found及在eclipse中配置jdk的src.zip源代码
查看>>
document.all用法
查看>>
uniGUI试用笔记(二)
查看>>
HOG特征-理解篇
查看>>
Microsoft.AlphaImageLoader滤镜解说
查看>>
extjs_02_grid(显示本地数据,显示跨域数据)
查看>>