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后面的表达式运算后执行的(此时并没 ...
随机推荐
- prototype.js 源码解读(02)
如果你想研究一些比较大型的js框架的源码的话,本人建议你从其最初的版本开始研读,因为最初的版本东西少,易于研究,而后的版本基本都是在其基础上不断扩充罢了,所以,接下来我不准备完全解读prototype ...
- 手动删除文件夹exe病毒并恢复原来文件夹
转自手动删除文件夹exe病毒并恢复原来文件夹 经常使用U盘.MP3.MP4等移动硬盘的大家,有时是不是会发现,移动硬盘里有现了exe文件,原来本来有一个文件夹的名字是 音乐 ,但后来发现 音乐 这个文 ...
- 升级 Java 编程规范的6个约定
作为 Java 开发人员,我们会遵循一系列的编码风格和开发习惯.习惯使然是一方面,另一方面,我们也从不停下脚步质疑这些习惯.一段时间以后,笔者养成了一些不同于常人的编码风格和开发习惯.当第一次了解到这 ...
- eclipse设置字体大小
eclipse是我们常用的开发工具.eclipse中的默认字体往往并不满足我们的需要,我经常要调节一下它的大小或者换一下风格.eclipse中的字体大小怎么改变呢? 工具/原料 eclipse 方法/ ...
- oracle中有关用户、角色的一些概念。
oracle中的每个用户对应一个单独的方案(schema),方案的名字与用户名一样,方案中包含很多数据对象,表,视图,触发器,存储过程等元素. oracle中管理数据库的角色有sys,system,数 ...
- poj 2431 Expedition 贪心
简单的说说思路,如果一开始能够去到目的地那么当然不需要加油,否则肯定选择能够够着的油量最大的加油站加油,,不断重复这个贪心的策略即可. #include <iostream> #inclu ...
- IPCS资源
ipcrm用法 ipcrm -M shmkey 移除用shmkey创建的共享内存段 ipcrm -m shmid 移除用shmid标识的共享内存段 ipcrm -Q msgkey 移除用ms ...
- java学习面向对象之异常之二
我们知道当我们处理异常的时候,一个是声明,另外一个是捕捉. 捕捉:异常处理的捕捉方式,这是可以对异常进行针对性处理的方式.具体格式是: try { //需要被检测的异常 } catch(异常类 变量) ...
- BZOJ1232: [Usaco2008Nov]安慰奶牛cheer
1232: [Usaco2008Nov]安慰奶牛cheer Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 578 Solved: 403[Submi ...
- Bitmap 与Drawable相互转换
Drawable 转 Bitmap import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import ...