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语句覆盖返回 ... 
随机推荐
- openstack单机部署  未完成
			注:centos8单机版 注:本次实验手动配置密码均为admin 环境准备:配置hosts文件 192.168.116.85为本机IP echo '192.168.116.85 controller ... 
- day16 正则表达式 & 反射 & Java内存模型(JMM)
			day16 class 1)获取一个类的所有信息(变量.方法.构造方法) 2)创建类对象newInstance() Field 1)访问变量或给变量赋值 Method 1)执行具体类对象的指定方法 3 ... 
- C#11新特性-Raw string literals原始字符串研究、示例
			这几天看C# 11的新语法,学习到了Raw string literals 今天给大家分享一下: 原始字符串是字符串的一种新格式. 原始字符串可以包含任意文本,包括空格.新行.嵌入引号和其他特殊字符, ... 
- 如何通过Java应用程序压缩PDF文档
			PDF文档是我们日常办公中使用最频繁的文档格式.但因为大多数PDF文档都包含很多页面图像或大量图片,这就导致PDF文档过大,处理起来较为麻烦.PDF文件过大,就会导致传输或者下载的速度变慢,也会增加传 ... 
- openresty package path
			openresty lua_package_path 是整个openresty最基础的功能,不理解 path就无法做项目,更无法写框架. 先看下文档lua_package_path https://g ... 
- python 之异常捕获及处理(try--except)
			在python中,至少有两类错误,一种是程序语法错误,一种是程序异常. 所谓的语法错误是指你未按规定格式书写导致的错误,如:定义函数时,括号后面要紧跟英文冒号,若缺失则不能识别与运行,并抛出 Synt ... 
- DevSecOps 需要知道的十大 K8s 安全风险及建议
			Kubernetes (K8s)是现代云原生世界中的容器管理平台.它实现了灵活.可扩展地开发.部署和管理微服务.K8s 能够与各种云提供商.容器运行时接口.身份验证提供商和可扩展集成点一起工作.然而 ... 
- 可视化—AntV G6 高亮相邻节点的两种方式
			目录 内置的高亮节点 自定义高亮 自定义高亮时保持原始颜色 总结 案例完整代码 通过官方文档,可知高亮相邻节点分为两种方法,文档描述并不是很清楚,对刚接触这个库的小白并不是很友好,慢慢总结慢慢来吧 内 ... 
- CH392/CH395常见问题解决方法指南
			CH395 问题 1: CH395 初始化失败.解答: 1.首先检查"check_exist"命令,正常情况下 CH395 会将该命令的输入值按位取反后输出,若该命令不正常,则说明 ... 
- [sklearn] 决策树、随机森林、隐马尔可夫模型
			决策树 决策树(Decision Tree)是一种用于处理分类和回归问题的无监督学习算法.如下图所示为某女青年在某相亲网站的相亲决策图.这幅图描述的都是一个非常典型的决策树模型. 通过对其相亲决策的分 ... 
