目录:

  • 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子句的使用的更多相关文章

  1. spring事务——try{...}catch{...}中事务不回滚的几种处理方式

    当希望在某个方法中添加事务时,我们常常在方法头上添加@Transactional注解 @ResponseBody @RequestMapping(value = "/payment" ...

  2. spring事务——try{...}catch{...}中事务不回滚的几种处理方式(转载)

    转载自   spring事务——try{...}catch{...}中事务不回滚的几种处理方式   当希望在某个方法中添加事务时,我们常常在方法头上添加@Transactional注解 @Respon ...

  3. 在oracle中where 子句和having子句中的区别

    在oracle中where 子句和having子句中的区别 1.where 不能放在GROUP BY 后面 2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用 ...

  4. C#:在catch中return,会执行finally吗?

    本文转自 vipxiaotian(CSDN) 请参考下面一段简单的语句块: 1:  try2:  {3:      throw new Exception("new exception&qu ...

  5. try/catch中finally的执行时间

    前言 由于总是搞不清楚try/catch中的一个执行顺序,返回结果.所以总结一下 1.finally没有return 时,可以看出finally确实在return之前执行了 public static ...

  6. aspx页面使用ajax遇到try catch中使用Response.End()报错

    1.使用Ajax接收数据,在返回Response.Write()后应该调用Response.End()才能将数据写入到调用的页面,才能被jQuery的回调函数获取到返回的JSON数据 2.在try-- ...

  7. SQL Server中事务transaction如果没写在try catch中,就算中间语句报错还是会提交

    假如我们数据库中有两张表Person和Book Person表: CREATE TABLE [dbo].[Person]( ,) NOT NULL, ) NULL, ) NULL, [CreateTi ...

  8. Java的finally语句在try或catch中的return语句执行之后还是之前?

    import java.util.HashMap; import java.util.Map; public class FinallyDemo1 { public static void main( ...

  9. C#中try catch中throw ex和throw方式抛出异常有何不同_异常捕获堆栈丢失问题

    前言,最近遇到一个使用try-catch异常捕获后记录一下日志,然后再抛出该异常后,异常堆栈里无法显示准确的堆栈地址的问题?   其实以前也遇到过类似问题,没有重视,这次好好研究了下,并上度娘上找了找 ...

  10. java-try catch中return在finally之前 还是之后执行

    finally语句在return语句执行之后return返回之前执行的. finally块中的return语句会覆盖try块中的return返回. 如果finally语句中没有return语句覆盖返回 ...

随机推荐

  1. centos7 ftp服务搭建记录

    1. 装包与卸载 yum -y install vsftpd yum -y autoremove vsftpd&&rm -rf /etc/vsftpd /etc/pam.d/vsftp ...

  2. Project facet Java version 13 is not supported.

    问题 导入的文件运行时出现报错:Project facet Java version 13 is not supported. 大概就是版本不支持,看了下自己的Java版本是1.8的,修改下版本即可运 ...

  3. 用最少的代码模拟gRPC四种消息交换模式

    我们知道,建立在HTTP2/3之上的gRPC具有四种基本的通信模式或者消息交换模式(MEP: Message Exchange Pattern),即Unary.Server Stream.Client ...

  4. Crypto - Caesar I

    原题链接:http://www.wechall.net/challenge/training/crypto/caesar/index.php 告诉我们这是个古凯撒密码,让我们解...我们百度下古凯撒密 ...

  5. Fastjsonfan反序列化(一)

    前置知识 Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象. Fastjson 可以操作任何 Java 对象 ...

  6. C# Math 中的常用的数学运算

    〇.动态库 System.Math.dll 引入动态库 using System.Math;   Math 为通用数学函数.对数函数.三角函数等提供常数和静态方法,使用起来非常方便,下边简单列一下常用 ...

  7. jquery操作内容

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 使用 System.Text.Json 时,如何处理 Dictionary 中 Key 为自定义类型的问题

    在使用 System.Text.Json 进行 JSON 序列化和反序列化操作时,我们会遇到一个问题:如何处理字典中的 Key 为自定义类型的问题. 背景说明 例如,我们有如下代码:   // 定义一 ...

  9. Java多线程详解(通俗易懂)

    一.线程简介 1. 什么是进程? 电脑中会有很多单独运行的程序,每个程序有一个独立的进程,而进程之间是相互独立存在的.例如图中的微信.酷狗音乐.电脑管家等等. 2. 什么是线程? 进程想要执行任务就需 ...

  10. SQLMap入门——判断文本中的请求是否存在注入

    从文件中加载HTTP请求,SQLMap可以从一个文本文件中获取HTTP请求,这样就可以不设置其他参数(如cookie.POST数据等),txt文件中的内容为Web数据包 文本文件如图(请求数据可以通过 ...