try/catch中finally的执行时间
前言
由于总是搞不清楚try/catch中的一个执行顺序,返回结果。所以总结一下
1.finally没有return 时,可以看出finally确实在return之前执行了
public static void main(String[] args) {
int aa = test1();
System.out.println(aa);
}
public static int test1(){
try{
System.out.println("try");
return 0;
}catch(Exception e){
System.out.println("catch");
return 1;
}finally {
System.out.println("finally");
}
}
//结果
//try
//finally
//0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2. finally有return 时,会覆盖其他语句中的return
public static void main(String[] args) {
int aa = test1();
System.out.println(aa);
}
public static int test1(){
try{
System.out.println("try");
return 0;
}catch(Exception e){
System.out.println("catch");
return 1;
}finally {
System.out.println("finally");
return 2;
}
}
//结果
//try
//finally
//2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
3.finally中对基本数据类型没有影响
public static int test1(){
int result = 6;
try{
System.out.println("try");
return result;
}catch(Exception e){
System.out.println("catch");
return 1;
}finally {
System.out.println("finally");
result = 3;
}
}
//结果try
//finally
//6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
4.finally中对引用型数据有影响
public static StringBuffer test1(){
StringBuffer str = new StringBuffer("I");
try{
System.out.println("try");
return str;
}catch(Exception e){
System.out.println("catch");
return null;
}finally {
System.out.println("finally");
str.append("am");
}
}
//结果try
//finally
// I am
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
5.当try/catch外面有异常,finally不执行
public static int test2(){
int a = 5/0;
try{
System.out.println("try");
return a;
}catch(Exception e){
System.out.println("catch");
return 2;
}finally {
System.out.println("finally");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.jxl.face.Controller.EnumTest.test2(EnumTest.java:29)
at com.jxl.face.Controller.EnumTest.main(EnumTest.java:19)
1
2
3
4
6.异常在try/catch里面,finally无return
public static int test2(){
try{
int a = 5/0;
System.out.println("try");
return a;
}catch(Exception e){
System.out.println("catch");
return 2;
}finally {
System.out.println("finally");
}
}
//catch
//finally
//2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
7.异常在try/catch里面,finally有return
public static int test2(){
try{
int a = 5/0;
System.out.println("try");
return a;
}catch(Exception e){
System.out.println("catch");
return 2;
}finally {
System.out.println("finally");
return 3;
}
}
//catch
//finally
//3
try/catch中finally的执行时间的更多相关文章
- C#:在catch中return,会执行finally吗?
本文转自 vipxiaotian(CSDN) 请参考下面一段简单的语句块: 1: try2: {3: throw new Exception("new exception&qu ...
- aspx页面使用ajax遇到try catch中使用Response.End()报错
1.使用Ajax接收数据,在返回Response.Write()后应该调用Response.End()才能将数据写入到调用的页面,才能被jQuery的回调函数获取到返回的JSON数据 2.在try-- ...
- SQL Server中事务transaction如果没写在try catch中,就算中间语句报错还是会提交
假如我们数据库中有两张表Person和Book Person表: CREATE TABLE [dbo].[Person]( ,) NOT NULL, ) NULL, ) NULL, [CreateTi ...
- spring事务——try{...}catch{...}中事务不回滚的几种处理方式
当希望在某个方法中添加事务时,我们常常在方法头上添加@Transactional注解 @ResponseBody @RequestMapping(value = "/payment" ...
- 详解C#泛型(二) 获取C#中方法的执行时间及其代码注入 详解C#泛型(一) 详解C#委托和事件(二) 详解C#特性和反射(四) 记一次.net core调用SOAP接口遇到的问题 C# WebRequest.Create 锚点“#”字符问题 根据内容来产生一个二维码
详解C#泛型(二) 一.自定义泛型方法(Generic Method),将类型参数用作参数列表或返回值的类型: void MyFunc<T>() //声明具有一个类型参数的泛型方法 { ...
- Java的finally语句在try或catch中的return语句执行之后还是之前?
import java.util.HashMap; import java.util.Map; public class FinallyDemo1 { public static void main( ...
- C#中try catch中throw ex和throw方式抛出异常有何不同_异常捕获堆栈丢失问题
前言,最近遇到一个使用try-catch异常捕获后记录一下日志,然后再抛出该异常后,异常堆栈里无法显示准确的堆栈地址的问题? 其实以前也遇到过类似问题,没有重视,这次好好研究了下,并上度娘上找了找 ...
- spring事务——try{...}catch{...}中事务不回滚的几种处理方式(转载)
转载自 spring事务——try{...}catch{...}中事务不回滚的几种处理方式 当希望在某个方法中添加事务时,我们常常在方法头上添加@Transactional注解 @Respon ...
- java-try catch中return在finally之前 还是之后执行
finally语句在return语句执行之后return返回之前执行的. finally块中的return语句会覆盖try块中的return返回. 如果finally语句中没有return语句覆盖返回 ...
随机推荐
- PHP大法
Topic Link http://ctf5.shiyanbar.com/DUTCTF/index.php Notes: 1) 进去发现 根据提示查看是否存在.txt文件,打开之后发现有东西 2)分析 ...
- 认识浏览器请求头User-Agent
一.定义 User Agent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA. 它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本.操 ...
- VS2017移动开发(C#、VB.NET)——Numeric控件的使用方式
Visual Studio 2017移动开发 控件介绍和使用方式:Numeric控件 Smobiler开发平台,.NET移动开发 一. 样式一 我们要实现上图中的效果,需要如下的操作 ...
- 学JAVA第五天,今天困得要死
好不容易坚持到第五天了,继续继续!!! 今天老师没有讲JAVA的for循环,倒是讲了HTML的相关内容: 讲了JAVA代码怎么在HTML中运行. 只要在HTML加入这个 background-colo ...
- Java 学习笔记 使用synchronized实现生产者消费者模式
说明 Object.wait()使当前的线程进入到等待状态(进入到等待队列) Object.notifyAll() 唤醒等待中的全部线程 Object.notify() 随机唤醒一个线程 代码 con ...
- Java基础:HashMap假死锁问题的测试、分析和总结
前言 前两天在公司的内部博客看到一个同事分享的线上服务挂掉CPU100%的文章,让我联想到HashMap在不恰当使用情况下的死循环问题,这里做个整理和总结,也顺便复习下HashMap. 直接上测试代码 ...
- OO第一单元作业总结
oo第一单元的作业是对多项式的求导.下面就是对三次作业分别进行分析. 第一次作业 分析 第一次作业相对来讲比较简单,甚至不用面向对象的思想都能十分轻松的完成(实际上自己就没有使用),包含的内容只有常数 ...
- nginx系列4:日志管理
日志切割 如果使用默认日志配置,经过一段时间运行后,access.log和error.log文件会变得非常大,使维护和排查问题变得不便,所以非常有必要做日志切割. 通常的思路是:使用nginx的-s ...
- js 动态添加class封装(es6语法)
export function hasClass(el, className) { let reg = new RegExp('(^|\\s)' + className + '(\\s|$)') re ...
- ionic3 Loading组件的用法
import { LoadingController } from 'ionic-angular'; @Component({ selector: 'page-contact', templateUr ...