首页 > 编程语言 >【Java】try...catch...finally执行顺序

【Java】try...catch...finally执行顺序

时间:2023-01-19 17:24:00浏览次数:46  
标签:... Java int list try finally catch return

结论:

  1. 如果try中没有异常,则顺序为try→finally;如果try中有异常,顺序为try→catch→finally,并且异常之后的代码不会执行。
  2. 当try或catch中带有return时,会先执行return前的代码,然后暂时保存需要return的信息,[相当于将这里遇到的return的值存入到一个局部变量中。如果是基本数据类型,就是数据值,如果是引用类型,那就是地址值],再执行finally中的代码,最后再通过return返回之前保存的信息(前面提到的局部变量的值)。
  3. finally中有return时,会直接在finally中退出,导致try、catch中的return失效。

注意:

  • 在第2点中,因为return保存的值是数据值,那么后面finally中除了再次遇到return,否则是不会影响到最终返回的值的。但是当return返回的是引用类型的话,虽然返回的值是不变的(地址值), 但引用的具体的东西中的内容是可以改变的。

  • 对于第3点在finally中写return,编译是可以编译通过的,但是编译器会给予警告,所以不推荐在finally中写return,这会破坏程序的完整性

下面给出一个别人的测试的demo,包含了以上所有情况,基本上几个例子看完之后就弄明白了执行顺序了。

 

public class SeDemo {
 
    /**
     * 没有异常 try ,finally
     * @return  3
     */
    public static int divide(){
        try {
            return 1;
        } catch (Exception e){
            return 2;
        } finally {
            return 3;
        }
    }
 
    /**
     *  异常  try,catch,finally
     * @return 3
     */
    public static int divide1 (){
        try {
            int a = 1/0;
            return 1;
        } catch (Exception e){
            return 2;
        } finally {
            return 3;
        }
    }
 
    /**
     *  try ,finally
     * @return 30
     */
    public static int divide2 (){
        int a;
        try {
            a = 10;
        } catch (Exception e){
            a = 20;
        } finally {
            a = 30;
        }
        return a;
    }
 
    /**
     *  try ,finally
     * @return 10
     */
    public static int divide3 (){
        int a;
        try {
            a = 10;
            return a;
        } catch (Exception e){
            a = 20;
        } finally {
            a = 30;
        }
        a++;
        return a;
    }
    /**
     *  trh ,catch,finally
     * @return 20
     */
    public static int divide4 (){
        int a;
        try {
            a = 10;
            int b = 10 / 0;
        } catch (Exception e){
            a = 20;
            return a;
        } finally {
            a = 30;
        }
        return a;
    }
 
    /**
     * @return  [1,3]
     */
    public static  List<Integer> divide5() {
        List<Integer> list = new ArrayList<>();
        try {
            list.add(1);
        } catch (Exception e) {
            list.add(2);
        } finally {
            list.add(3);
        }
        return list;
    }
 
    /**
     * @return  [1,3]
     */
    public static  List<Integer> divide6() {
        List<Integer> list = new ArrayList<>();
        try {
            list.add(1);
            return list;
        } catch (Exception e) {
            list.add(2);
        } finally {
            list.add(3);
        }
        return list;
    }
 
    /**
     * @return  [1,2,3]
     */
    public static  List<Integer> divide7() {
        List<Integer> list = new ArrayList<>();
        try {
            list.add(1);
            int a = 1/0;
        } catch (Exception e) {
            list.add(2);
            return list;
        } finally {
            list.add(3);
        }
        return list;
    }
}

 

标签:...,Java,int,list,try,finally,catch,return
From: https://www.cnblogs.com/cuipengchong/p/17061835.html

相关文章

  • 调用fragment中的onActivityResult时发生java.lang.IndexOutOfBoundsException问题,请
    调用fragment中的onActivityResult时概率发生java.lang.IndexOutOfBoundsException问题,请问下什么原因?StartScanCodeFragment中代码:overridefunonActivityResult(reques......
  • JavaWeb-JSP
    JavaWeb-JSP1,JSP概述JSP(全称:JavaServerPages):Java服务端页面。是一种动态的网页技术,其中既可以定义HTML、JS、CSS等静态内容,还可以定义Java代码的动态内容,也就是JS......
  • 【学懂Java】(四)面向对象编程-2
    一.局部变量和成员变量局部变量成员变量(全局变量)定义在方法中定义在方法外,类之内的变量栈内存中堆内存中局部变量没有默认值成员变量有默认值当前方法当前类的方法不同的方......
  • java学习之生成CSV文件
    1.pom.xml文件 2.代码  ......
  • kettle 创建资源库 Java api DatabaseRepository
    创建资源库前置mysql数据库test核心代码KettleEnvironment.init();DatabaseMetadatabaseMeta=newDatabaseMeta("test-db","MYSQL","Native",......
  • 【学懂Java】(四)面向对象编程-1
    一.OOP:ObjectOrientedProgramming1.面向过程和面向对象面向过程面向对象区别事物比较简单,可以用线性的思维去解决事物比较复杂,使用简单的线性思维无法解决共同点1.面向......
  • java.lang.UnsupportedClassVersionError
    一般是版本不兼容Exceptioninthread"main"java.lang.UnsupportedClassVersionError:org/eclipse/swt/events/ShellListenerhasbeencompiledbyamorerecentver......
  • Java零基础09篇:while循环和案例
    文章目录​​一、while结构(掌握)​​​​while循环完整格式:​​​​while循环执行流程:​​​​示例代码:​​​​二、while循环练习-珠穆朗玛峰(应用)​​​​需求:世界最高山峰......
  • Java零基础07篇:switch语句以及案例
    文章目录​​一、switch语句结构(本阶段需要掌握)​​​​格式:​​​​执行流程:​​​​二、小练习-春夏秋冬​​​​需求:一年12个月分属于春夏秋冬4个季节,键盘录入一个月份,用......
  • Java零基础06篇:流程控制语句应用篇
    文章目录​​前言​​​​一、流程控制语句分类​​​​二、顺序结构​​​​三、分支结构之if语句​​​​if语句格式1:​​​​if语句格式2:​​​​if语句案例:奇偶数​​​......