try、catch、finally与return
1 try catch finally语句基础知识
- finally一定会被执行。
- try块发生异常才会执行catch块。
- 如果finally块中抛出异常,则整个try、catch、finally块中抛出异常。
2 try catch finally语句与return语句
1、finally块一定会被执行。即使已经执行了return语句。
例:
public class Test{
public static String func(){
Integer i=0;
try{
System.out.println("执行try语句块");//
return i.toString();//
}finally{
System.out.println("开始执行finally语句块,i的值为:"+i);//
i++;//
System.out.println("结束执行finally语句块,i的值为:"+i);//
}
}
public static void main(String[] args) {
System.out.println("开始执行main");//
System.out.println("执行func的结果为:"+func());//
System.out.println("结束执行main");//
}
}
输出:
开始执行main
执行try语句块
开始执行finally语句块,i的值为:0
结束执行finally语句块,i的值为:1
执行func的结果为:0
结束执行main
从该例可看出,外层代码先获取方法的返回值,等待方法内部finally语句执行结束后,外层方法继续执行。即try、catch、finally语句中,执行return后,对当前返回的值做任何的修改,都不影响已经return的返回值。
2、try块中有return语句,catch块中也必须有return语句。否则无法通过编译。

return语句在try-catch-finally块之前。显然这会提示异常,提示去除try{}catch(){}finally{}块。

由于return一般都处于代码块执行的最后。所以若try块抛出异常,则return语句肯定还未执行。异常被catch捕获,catch必须完成try没有完成的return。

3、如果finally块中有return 语句,则返回try或catch中的返回语句忽略。
public class TryCatchFinally {
static int method(){
try{
return 0;
}catch(Exception e){
return 1;
}finally{
System.out.println("finally{}");
return 2;
}
}
public static void main(String[] args) {
int i = method();
System.out.println(i);
}
}
输出:
finally{}
2
finally中有return语句,编译器会提示警告。

3 使用try、catch、finally语句块中需要注意
1、尽量在try或者catch中使用return语句。通过finally块中达到对try或者catch返回值修改是不可行的。
2、finally块中避免使用return语句。因为finally块中使用return语句会显示的消化掉try、catch块中的异常信息,屏蔽了错误的发生。
3、finally块中避免再次抛出异常。否则整个包含try语句块的方法回抛出异常,并且会消化掉try、catch块中的异常。
try、catch、finally与return的更多相关文章
- java中 try catch finally和return联合使用时,代码执行顺序的小细节
代码1测试 public static void main(String[] args) { aa(); } static int aa() { try { int a=4/0; } catch (E ...
- try catch finally 和return
结论:1.不管有木有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...
- try catch finally中return的执行顺序
下面说一下try{ } catch{}中有return的情况 究竟是哪个return起作用的 话不多说 上代码 1 try中有return的情况 //普通方法 public static int hh ...
- Java的finally语句在try或catch中的return语句执行之后还是之前?
import java.util.HashMap; import java.util.Map; public class FinallyDemo1 { public static void main( ...
- try catch 语句中有return 的各类情况
在牛客上做java题时遇到过多到关于try catch语句的问题,看了很多答案解析,在这里记录一下. 首先给出一道题目: 下面代码的运行结果为? A.catch语句块 和是43 B.编译异常 C.fi ...
- try catch中的return与finally
try catch中的return与finally 代码为 public class Test{ public int add(int a,int b){ try { return a+b; } ca ...
- try,catch,finally含return时的执行顺序及丢失的伪例
最近面试遇到一个之前也看到过但没去看一下的问题.就是有return情况下的try,catch,finally的执行顺序. 今天写了下. 先看顺序问题.总结如下: 一:finally中没有写return ...
- try,catch,finally与return
package com.zl.test; // try catch finally 内有returnpublic class Demo { public static void main(String ...
- 关于try...catch...finally中return的疑惑
原文:http://www.cnblogs.com/and_he/archive/2012/04/17/2453703.html 关于try...catch...finally里面的return一直是 ...
- 有return的情况下try catch finally的执行顺序(转)
结论:1.不管有木有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...
随机推荐
- Tomcat架构(二)
5.容器组件 这一小节中我们将讨论请求处理组件:引擎(engine).虚拟主机.上下文(context)组件. 5.1.引擎(engine) 引擎表示可运行的Catalina的servlet引擎实例并 ...
- Qt中连接到同一signal的多个slots的执行顺序问题(4.6以后按连接顺序执行)
起源 前些天忘记在哪儿讨论过这个问题,今天在csdn又看到有网友问这个问题,而其他网友却无一例外的给出了“无序”这个答案. Manual Qt的问题,当manual中有明确文字说明时,我们应该以Qt的 ...
- Mysql 8个小时连接断开问题解析
wait_timeout — 指的是mysql在关闭一个非交互的连接之前所要等待的秒数,其取值范围为1-2147483(Windows),1-31536000(linux),默认值28800. int ...
- AppDomain
AppDomain http://www.cnblogs.com/xiashengwang/archive/2012/07/17/2594623.html http://www.cnblogs.com ...
- Windows Azure云服务价格调整通知
好消息!由世纪互联运营的 Windows Azure推出优惠啦.我们采纳了多渠道客户的意见和建议,为了更好地服务大家,将降低多种云服务的价格,其中包括我们最受欢迎的服务 -虚拟机和 Block ...
- Google Map API 学习三
- 直接拿来用!最火的android开源项目(一)
不好意思尊重一下作者咯.详情见:csdn:http://www.csdn.net/article/2013-05-03/2815127-Android-open-source-projects
- java生成随机整数
1. 使用Random类的nextInt方法: Random rand = new Random(); rand.nextInt(max);, 此时输出[0,max),注意右边是开区间,如果需要设定最 ...
- HDU-4272 LianLianKan
http://acm.hdu.edu.cn/showproblem.php?pid=4272 据说是状态压缩,+dfs什么什么的,可我这样也过了,什么算法都是浮云 ,暴力才是王道.我也归类为状态压缩, ...
- HDOJ1021题 Fibonacci Again 应用求模公式
Problem Description There are another kind of Fibonacci numbers: F(0) = 7, F(1) = 11, F(n) = F(n-1) ...