技术文章 > java >  java基础 > 正文

java中finally不执行的分析

小妮浅浅

我们使用finally的目的,是为了其后面的语句在异常产生时得到执行,那么事实真的如此吗?这里我们做了一个try之前异常的实例,探索finally语句执行的情况。同时在异常的情况下,finally执行先后顺序的问题一并讨论。下面就finally在异常情况下的执行情况展开讲解。

1. try 语句块之前返回(return)或者抛出异常,finally不会被执行

package com.zwwhnly.springbootaction;
 
public class FinallyTest {
    public static void main(String[] args) {
        System.out.println("return value of test():" + test());
    }
 
    public static int test() {
        int i = 1;
        /*if (i == 1) {
            return 0;
        }*/
        System.out.println("the previous statement of try block");
        i = i / 0;
        try {
            System.out.println("try block");
            return i;
        } finally {
            System.out.println("finally block");
        }
    }
}

只有与 finally 相对应的 try 语句块得到执行的情况下,finally 语句块才会执行。

2.有异常,finally 中的 return会导致提前返回

public static String test() {
        try {
            System.out.println("try");
            throw new Exception();
        } catch(Exception e) {
            System.out.println("catch");
            return "return in catch";
        } finally {
            System.out.println("finally");
            return "return in finally";
        }
    }

调用 test() 的结果:

try
catch
finally
return in finally

finally 语句块在 try 语句块中的 return 语句之前执行。

以上就是关于java中finally不执行的分析,根据代码运行我们发现,finallytry语句未运行的情况也没有执行,这点需要我们在使用finally时格外注意。

免费视频教程
本文原创发布python学习网,转载请注明出处,感谢您的尊重!
相关文章
 java中try-catch的使用
 Exeption在java中的分支
 java异常的解决方法
 java finally处理异常
相关视频章节
 网络爬虫
 云端部署Web应用程序视频
 Web应用框架Flask和文件模板
 Web应用程序开发概述
 继承和多态
作者信息

小妮浅浅

认证0级讲师

最近文章
java编译命令是什么517
java的jdk是什么407
java Wrapper类的使用806
推荐视频
视频教程分类