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后面的表达式运算后执行的(此时并没 ...
随机推荐
- css3实现无缝滚动效果
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- g++的常用参数
-c 编译成目标文件.o-o 指定输出文件名,输出文件名跟在-o后面,用空格分隔.如果不使用这个选项,缺省的输出文件名为a.out.-g 产生有调试信息的可执行文件-w 不产生警告信息-l 连接指定的 ...
- server-send event object
http://jamie-wang.iteye.com/blog/1849193 event -- onmessage, onopen, onerror 不是方法,而是事件 http://school ...
- Dictionary Size
uvaLive5913:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&pag ...
- codeforces D. Pashmak and Parmida's problem
http://codeforces.com/contest/459/problem/D 题意:给你n个数,然后统计多少组(i,j)使得f(1,i,ai)>f(j,n,aj); 思路:先从左往右统 ...
- DJANGO不同应用之间的用户迁移
因为重新规划新的项目,数据库表结构和以前不一定了,但是想保存以前的很多用户认证方面的东东. 于是看了一下DJANGO的导入导出功能. ~~~~~~~~~~~~~~~~~~~ 数据导入: python ...
- Qt中事件处理的方法(图文并茂,仔细看看)
http://blog.csdn.net/qing666888/article/details/14111271 http://blog.csdn.net/qing666888/article/det ...
- cocosBuilder使用总结
原创,转载请注明出处! 基本流程 >=-. 准备工作 #. 把一个项目场景相关的,相对独立(别的场景用不到)的碎图,用TexturePack拼接成大的png图片文件及plist数据字处理文件 # ...
- BZOJ1606: [Usaco2008 Dec]Hay For Sale 购买干草
1606: [Usaco2008 Dec]Hay For Sale 购买干草 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 612 Solved: 46 ...
- ORACLE软件下载地址
Oracle Database 11g Release 2 Standard Edition and Enterprise Edition Software Downloads Oracle 数据库 ...