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后面的表达式运算后执行的(此时并没 ...
随机推荐
- 【转载】HRTF音频3D定位技术综述
1. 序 您一定有过这样的经验:在一个炎热的夏夜,讨厌的蚊子在你的耳边飞舞.此时,没有比除掉这个祸害更急所的了,对吧?做到这一点,不必睁大了眼去找蚊子,只需依靠敏锐的听力,一样可以确定蚊子的方位,在漆 ...
- bzoj 1191: [HNOI2006]超级英雄Hero 并查集 || 匈牙利算法
1191: [HNOI2006]超级英雄Hero Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1804 Solved: 850[Submit][S ...
- Java 去除HTML标签转化成纯文本
package com.ahgw.common.global; import java.util.regex.Pattern; /** * 截取HTML代码 * * @author YangJunpi ...
- 【UVA1579】俄罗斯套娃 Matryoshka (动态规划)
题目: 分析: 其实就是两个dp结合起来.第一个dp求区间[l,r]全部合并起来要用的最小次数,可以用区间[l,k]&[k+1,r]转移(l<=k<r).第二个dp求前i个娃娃分成 ...
- input text 不可编辑的解决办法
<div class="inp bg"> <input id="inp-query" type="text" name=& ...
- SQL server聚合函数、数学函数、字符串函数
一.基础语句 二.数学函数与字符串函数 三.练习 1.创建一个学生信息表,根据要求写出程序 2.新建一个超市表,进了十种商品,个数都是十件
- jstat命令(Java Virtual Machine Statistics Monitoring Tool)
1.介绍 Jstat用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计,使用jstat我们可以对指定的JVM做如下监控: - 类的加载及卸载情况 - 查看新生代.老生代及持久代 ...
- wpf 自定义依赖性属性 作用之一 对数据绑定的支持
依赖属性:定义,声明,注册 依赖属性,在数据绑定中,数据绑定,分为源对象(数据源)和目标对象(显示数据). 只有源对象为依赖对象,属性为依赖属性时,该属性才会在属性发生变化时,通知目标对象进行数据更改 ...
- DIP开放计算平台介绍
随着平台业务的发展,依赖于Portal(Web)构建的服务架构已逐渐不能满足现有的一些复杂需求(如:使用Hive SQL无法完成计算逻辑),而且对于一些具备编程能力的程序员或数据分析师而言,能够自主控 ...
- (转载)MySQL BETWEEN 用法
(转载)http://www.5idev.com/p-php_mysql_between.shtml MySQL BETWEEN 语法 BETWEEN 运算符用于 WHERE 表达式中,选取介于两个值 ...