try catch finally return运行顺序
首先让我们搞懂两组概念:try catch finally和return
1.try catch finally
首先说try catch,
(1)try语句 ,try语句用来包围可能出现异常的代码片段. try是发现问题的语句,发现异常后会跳入到catch{}中,如下:
try{
可能出现异常的代码片段
}
(2)catch语句 ,catch语句是用来捕获try语句中出现的异常,并针对该异常解决的.catch语句块可以出现多次.
catch(Exception_Type e){
解决问题的代码片段
}
(3)finally块 ,finally出现在try语句的最后 ,finally块中的语句是必然执行的,无论try中是否出现异常.
finally{
代码片段
}
2.return
两个作用:
(1)一般的就是用在有反回值的方法中,用来返回方法指定类型的值,同时结束方法执行;
(2)也可以用在返回值为void的方法中,用来终止方法运行;return ;
3.对于以上有个基本的认识就不怕搞不懂try catch finally return运行顺序,下面以代码为例:
public static void main(String[] args) {
String str = null;
System.out.println(demo(str));
}
(1)无finally时:
(1.1)
public static String demo(String str){
try {
System.out.println(str.charAt(1)); //构造异常
return "1";
} catch (Exception e) {
return "2";
}
}
运行结果:2(无异常返回1,程序结束;出现异常时,返回2,程序结束)
(1.2)
public static String demo(String str){
try {
System.out.println(str.charAt(1));
} catch (Exception e) {
return "2";
}
return "4";
}
运行结果:2(无异常返回4,程序结束;出现异常时,返回2,程序结束)
(1.3)
public static String demo(String str){
try {
System.out.println(str.charAt(1));
return "1";
} catch (Exception e) {
}
return "4";
}
运行结果:4(无异常返回1,程序结束;出现异常时,程序跳到catch中什么也没做,接着往下运行,return "4",程序结束)
(1.4)
public static String demo(String str){
try {
return "1";
} catch (Exception e) {
}
return "4";
}
运行结果:1(程序自上而下运行, return "1",程序结束)
其他情况不再一一赘述。。。
(2)有finally时:
(2.1)
public static String demo(String str){
try {
System.out.println(str.charAt(1));
return "1";
} catch (Exception e) {
return "2";
}
finally{
return "3";
}
}
(2.2)
public static String demo(String str){
try {
return "1";
} catch (Exception e) {
return "2";
}
finally{
return "3";
}
}
注意:存在finally时,一单finally里面有return 语句,那么无论之前return过什么(是否出现异常),均被覆盖成finally里面的值(而且,finally里面一旦有return,马上返回,程序结束,不再运行以下的程序),如上两个例子均返回3:只不过(2.1)是先2后3,(2.2)是先1后3
(3)其他情况:
(3.1)
public static String demo(String str){
try {
System.out.println(str.charAt(1)); //异常处
return "1";
} catch (Exception e) {
try {
throw new Exception(e);
} catch (Exception e1) {
e1.printStackTrace();
}
return "2";
}
}
运行结果:2,这是因为程序在异常处发生异常,直接跳到外层catch{}中,而在catch中尽管又进行了一次try catch,但是程序在catch{}中是自上而下可以运行到return "2";处,返回,程序结束
(3.2)
public static String demo(String str){
try {
System.out.println(str.charAt(1));
return "1";
} catch (Exception e) {
try {
throw new Exception(e);
} catch (Exception e1) {
e1.printStackTrace();
}
return "2";
}
finally{
return "3";
}
}
运行结果:3,此运行过程前面与上个例子相同,知道return"2"后面,会跳出外层catch{},运行finally{},在此中遇到return "3",返回,程序结束
以上是我的简单总结,若有错误,欢迎批评指正,转载时请注明作者及来源,谢谢
try catch finally return运行顺序的更多相关文章
- Java基础知识强化之IO流笔记06:有return的情况下try catch finally的执行顺序
1. 给出结论: (1)不管有木有出现异常,finally块中代码都会执行:(2)当try和catch中有return时,finally仍然会执行:(3)finally是在return后面的表达式运算 ...
- 【转】C# 异常处理 throw和throw ex的区别 try catch finally的执行顺序(return)
[转]throw和throw ex的区别 之前,在使用异常捕获语句try...catch...throw语句时,一直没太留意几种用法的区别,前几天调试程序时无意中了解到几种使用方法是有区别的,网上一查 ...
- 有return的情况下try catch finally的执行顺序(转)
结论:1.不管有木有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...
- try catch finally的执行顺序(有return的情况下)
结论:1.不管有木有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...
- 有return的情况下try catch finally的执行顺序
结论:1.不管有木有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
结论:1.不管有木有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...
- 【Java疑难杂症】有return的情况下try catch finally的执行顺序
有这样一个问题,异常处理大家应该都不陌生,类似如下代码: public class Test { public static void main(String[] args) { int d1 = 0 ...
- 有return的情况下try catch finally的执行顺序(转)
结论:1.不管有没有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...
- [转]有return的情况下try catch finally的执行顺序
结论: 1.不管有没有出现异常,finally块中代码都会执行: 2.当try和catch中有return时,finally仍然会执行: 3.finally是在return后面的表达式运算后执行的(此 ...
随机推荐
- caffe深度学习网络(.prototxt)在线可视化工具:Netscope Editor
http://ethereon.github.io/netscope/#/editor 网址:http://ethereon.github.io/netscope/#/editor 将.prototx ...
- 微信小程序之可滚动视图 scroll-view 的使用注意
微信小程序之可滚动视图 scroll-view 使用注意: 1.scroll-view 中的需要滑动的元素不可以用 float 浮动: 2.scroll-view 中的包裹需要滑动的元素的大盒子用 d ...
- 【Python】【环境搭建】
[环境配置] Windows : http://blog.csdn.net/zhunianguo/article/details/53524792 [Pycharm] pyCharm最新2018激活码 ...
- Java String 中的一些函数与正则的结合使用
首先正则表达式在处理字符串问题时,真的非常强大. 正则可以帮助我们处理字符串的: 匹配, 选择, 编辑, 验证等问题. 正则中"\\"表示插入一个"\" 这里仅 ...
- Ubuntu禁用触摸板
参考链接: http://www.linuxidc.com/Linux/2012-08/68831.htm http://blog.sina.com.cn/s/blog_a3052b4a0100z4u ...
- Spring boot 遇到了连接mysql的错误
问题1: Establishing SSL connection without server's identity verification is not recommended. Accordin ...
- Qt5_各种路径
1.Qt5.3.2 -- vs2010 -- OpenGL 1.1.发布时需要的 DLL文件的路径 F:\ZC_software_installDir\Qt5.3.2_vs2010\5.3\msvc2 ...
- 《剑指offer》第三_一题(找出数组中重复的数字,可改变数组)
// 面试题3(一):找出数组中重复的数字 // 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了, // 也不知道每个数字重复了几次.请 ...
- android开发:Android 中自定义属性(attr.xml,TypedArray)的使用
今天我们的教程是根据前面一节扩展进行的,如果你没有看,请点击 Android高手进阶教程(三)查看第三课,这样跟容易方便你的理解! 在xml 文件里定义控件的属性,我们已经习惯了android:att ...
- Java IO流-File类
2017-10-24 23:50:22 File类 File类:文件和目录路径名的抽象表示形式.该文件或者目录不一定真实存在. * 构造方法 File类有四种构造方法,主要采用的构造方法师第二种,也就 ...