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

本文共 1598 字,大约阅读时间需要 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,这样会使得程序结构变得混乱。

转载于:https://www.cnblogs.com/yaowen/p/4848779.html

你可能感兴趣的文章
用Spark学习FP Tree算法和PrefixSpan算法
查看>>
Hibernate C3P0连接池配置
查看>>
class-dump获取iOS私有api
查看>>
java实例练习——基于TCP/IP协议的多客户端通信
查看>>
图片加到json中,提交到服务器端处理异常问题。
查看>>
[Poi2011]Tree Rotations线段树合并
查看>>
Ubuntu 12.04(32位)安装Oracle 11g(32位)全过程以及几乎所有问题的解决办法
查看>>
Timer更新UI的合理办法
查看>>
jquery中对动态生成的标签响应click事件(二)…与ajax交互使用
查看>>
用进程管理的方法进行自我时间管理
查看>>
数据流图的画法
查看>>
GOF设计模式之1:单例设计模式
查看>>
linux上的那些查找的命令
查看>>
【转】图文详解YUV420数据格式
查看>>
Docker自动补全容器名
查看>>
推荐几个.NET开源图表组件 [转]
查看>>
脚本两则--用于快速部署HADOOP,SPARK这些(特别是VM虚拟机模板部署出来的)。。...
查看>>
用JQUERY为INPUT的TXT类型赋值及取值操作
查看>>
(视频) 《快速创建网站》 3.2 WordPress多站点及Azure在线代码编辑器 - 扔掉你的ftp工具吧,修改代码全部云端搞定...
查看>>
(转) 一步一步学习ASP.NET 5 (四)- ASP.NET MVC 6四大特性
查看>>