try...catch中finally子句的使用
目录:
- finally的使用
- finally面试题
- final、finally、finalize的区别
finally子句的使用:
1、在finally子句中的代码是最后且一定会执行的,即使try语句块中的代码出现异常
2、finally子句必须和try一起出现,不能单独编写
3、finally子句出现的情况如下:
通常finally语句块中完成资源的释放/关闭。
try{
System.out.println("hi");
return;
}finally{
System.out.println("finally");
}
//注意,try和finally联合使用,没有catch也可以,但try不能单独使用
以上代码执行顺序:
先执行try,后执行finally,最后执行return
注意:return语句只要执行,所在方法必然结束!
try{
System.out.println("hi");
//退出JVM
System.exit(0);
}finally{
System.out.println("finally");
}
//控制台输出:hi
原因:finally只有在退出JVM之后,其代码才不会执行
finally面试题:
判断下面程序输出的结果为多少?
public static void main(String[] args){
int result = m();
System.out.println(result);
}
public static int m(){
int i = 100;
try{
return i;
}finally{
i++;
}
}
答案:100
原因:
存在一些Java语法规则,方法体中的代码必须遵循自上而下的顺序依次执行;return语句一旦执行,整个方法必须结束。
在以上程序中执行完int i=100之后,代码执行就到了return i;此时为return 100;此语句搁置,先执行finally,最后执行return 100;
具体执行过程可以看代码反编译之后的结果
//上述代码反编译之后的结果
public static int m(){
int i=100;
int j=i;
i++;//finally语句确实在return i;之前执行
return j;//return 100
Exception exception;
exception;
i++;
throw exception;
}
final、finally、finalize的区别:
final是一个关键字,表示不变的,最终的
final int i=100;
其中final修饰的类无法继承、修饰的方法无法覆盖、修饰的变量不能重新赋值。
finally也是一个关键字,和try联合使用,用在异常机制中,并且finally语句块中的代码一定会执行
finalize()是object类中的一个方法,作为方法名出现,属于标识符,这个方法是由垃圾回收器G负责调用的。
try...catch中finally子句的使用的更多相关文章
- spring事务——try{...}catch{...}中事务不回滚的几种处理方式
当希望在某个方法中添加事务时,我们常常在方法头上添加@Transactional注解 @ResponseBody @RequestMapping(value = "/payment" ...
- spring事务——try{...}catch{...}中事务不回滚的几种处理方式(转载)
转载自 spring事务——try{...}catch{...}中事务不回滚的几种处理方式 当希望在某个方法中添加事务时,我们常常在方法头上添加@Transactional注解 @Respon ...
- 在oracle中where 子句和having子句中的区别
在oracle中where 子句和having子句中的区别 1.where 不能放在GROUP BY 后面 2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用 ...
- C#:在catch中return,会执行finally吗?
本文转自 vipxiaotian(CSDN) 请参考下面一段简单的语句块: 1: try2: {3: throw new Exception("new exception&qu ...
- try/catch中finally的执行时间
前言 由于总是搞不清楚try/catch中的一个执行顺序,返回结果.所以总结一下 1.finally没有return 时,可以看出finally确实在return之前执行了 public static ...
- 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 ...
- 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异常捕获后记录一下日志,然后再抛出该异常后,异常堆栈里无法显示准确的堆栈地址的问题? 其实以前也遇到过类似问题,没有重视,这次好好研究了下,并上度娘上找了找 ...
- java-try catch中return在finally之前 还是之后执行
finally语句在return语句执行之后return返回之前执行的. finally块中的return语句会覆盖try块中的return返回. 如果finally语句中没有return语句覆盖返回 ...
随机推荐
- Thinkphp6使用腾讯云发送短信步骤
1.前提条件国内短信地址:https://console.cloud.tencent.com/smsv2 已开通短信服务,具体操作请参见 国内短信快速入门.如需发送国内短信,需要先 购买国内短信套餐包 ...
- A-深度学习面试题
目录 目录 一,滤波器与卷积核 二,卷积层和池化输出大小计算 2.1,CNN 中术语解释 2.2,卷积输出大小计算(简化型) 2.3,理解边界效应与填充 padding 参考资料 三,深度学习框架的张 ...
- Composer 部署国内镜像
众所周知的原因,原版的镜像下载会比较慢,建议改成阿里的会比较快. 1 备份你的原镜像文件,以免出错后可以恢复.mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum ...
- Pod控制器详解
Pod控制器详解 7.1 Pod控制器介绍 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类: 自主式pod:kubernetes直接创建出来 ...
- python文件名解析---从文件名获得分类类别
python文件名解析-从文件名获得分类类别 python os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表.列表以字母顺序. listdir()方法 举例说明 lis ...
- VideoPipe可视化视频结构化框架更新总结(2022-12-9)
项目地址:https://github.com/sherlockchou86/video_pipe_c 往期文章:https://www.cnblogs.com/xiaozhi_5638/p/1685 ...
- Django中ORM多对多三种创建方式(全自动-纯手动-半自动)
一:多对多三种创建方式 1.全自动: 利用orm自动帮我们创建第三张关系表 class Book(models.Model): name = models.CharField(max_length=3 ...
- python Modbus 进行通讯时抛出Modbus Error: Exception code = 2
源码: import modbus_tk from modbus_tk import modbus_tcp import modbus_tk.defines as cst PORT = 'com1' ...
- 【机器学习】李宏毅——Unsupervised Learning
读这篇文章之间欢迎各位先阅读我之前写过的线性降维的文章.这篇文章应该也是属于Unsupervised Learning的内容的. Neighbor Embedding Manifold Learnin ...
- 01.Java面试都问啥?
大家好,我是王有志.好久不见,不过这次没有休假,而是搞了个"大"工程,花了点时间自学Python,然后写了"玩具爬虫",爬某准网的面经数据,为来年的" ...