Java中try,catch,finally的用法
来源:互联网 发布:淘宝奇葩买家秀大尺度 编辑:程序博客网 时间:2024/06/05 09:56
Java异常处理的组合方式:
1.try+catch运行流程:运行到try块中,如果有异常抛出,则转到catch块去处理。然后执行catch块后面的语句
2.try+catch+finally
运行流程:运行到try块中,如果有异常抛出,则转到catch块,catch块执行完毕后,执行finally块的代码,再执行finally块后面的代码。如果没有异常抛出,执行完try块,也要去执行finally块的代码。然后执行finally块后面的语句
3.try+finally运行流程:运行到try块中,如果有异常抛出的话,程序转向执行finally块的代码。那末finally块后面的代码还会被执行吗?不会!因为你没有处理异常,所以遇到异常后,执行完finally后,方法就以抛出异常的方式退出。
这种方式中要注意的是,由于你没有捕获异常,所以要在方法后面声明抛出异常。
共同点:
1.在catch块和finally块中仍然可以再抛出新的异常
例如 throw new Exception("illegal invoked");
如果对于新抛出的异常没有写try的话,则要在方法后面声明抛出异常
反之,如果给catch块或finally块里的异常再套上一层try,catch的话,方法后面就不必声明异常了。
问题:try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
我们来看下面代码:
---------执行结果 ---------1
---------执行结果 ---------
2
-----------执行结果-----------------
func1
func2
2
分析:
从上面3个例子的运行结果中可以发现,try中的return语句调用的函数先于finally中调用的函数执行,也就是说return语句先执行,finally语句后执行。Return并不是让函数马上返回,而是return语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行finally语句后才真正开始返回。
eg:
public
class
TryCatchFinally {
@SuppressWarnings
(
"finally"
)
public
static
final
String test() {
String t =
""
;
try
{
t =
"try"
;
return
t;
}
catch
(Exception e) {
// result = "catch";
t =
"catch"
;
return
t;
}
finally
{
t =
"finally"
;
}
}
public
static
void
main(String[] args) {
System.out.print(TryCatchFinally.test());
}
}
返回try
public class TryCatchFinally { 2 3 @SuppressWarnings("finally") 4 public static final String test() { 5 String t = ""; 6 7 try { 8 t = "try"; 9 return t;10 } catch (Exception e) {11 // result = "catch";12 t = "catch";13 return t;14 } finally {15 t = "finally";16 return t;17 }18 }19 20 public static void main(String[] args) {21 System.out.print(TryCatchFinally.test());22 }23 24 }返回
finally
我们发现try语句中的return语句给忽略。可能jvm认为一个方法里面有两个return语句并没有太大的意义,所以try中的return语句给忽略了,直接起作用的是finally中的return语句,所以这次返回的是finally。
阅读全文
0 0
- Java中try,catch,finally的用法
- Java中try,catch,finally的用法
- Java中try,catch,finally的用法
- Java中try、catch、finally的用法
- Java中try,catch,finally的用法
- Java中try,catch,finally的用法
- try...catch...finally java String 的用法
- try catch finally的用法
- try,catch,finally的用法
- Java 中 try...catch...finally
- java中try-catch-finally
- Java中Try/catch/finally
- try-catch-finally的用法之finally
- try-catch-finally的用法之finally
- Java中的try,catch,finally的具体用法
- try catch finally用法
- try catch finally 用法
- try、catch、finally用法
- 单例模式
- java 插入新的数组项(算法—1)
- JDBC连接数据库
- 一个判断session是否过期的小技巧
- AngularJS入门-(2)MVC体系结构
- Java中try,catch,finally的用法
- asp.net网站不同子域名共享session信息
- nodejs express request 和 response 对象分析
- Bootstrap笔记
- Java并发编程之CyclicBarrier
- 搭载web服务器
- 原生二维码扫描
- mybatis的config.xml文件中不再需要通过<mapper>一个一个配置实体的xml文件了
- shiro页面前端获取当前用户信息