java异常return在finally前面_java 异常处理

java异常return在finally前面_java 异常处理java 的异常处理机制,执行顺序;return在异常中的使用 ;自定义异常类的简单应用异常处理2种方法:1.抛 (throws)2.自己处理try/catch/finally1.抛出:向上一级抛出,异常实际没有被解决掉2.try/catch/finally(1)正常执行public class Test1 { public static void main(String[] args) { Test1 test1 = new Test1(); test

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

java 的异常处理机制,执行顺序;return在异常中的使用 ;自定义异常类的简单应用
异常处理2种方法:

1.抛 (throws)
2.自己处理try/catch/finally

1.抛出:向上一级抛出,异常实际没有被解决掉

2.try/catch/finally

(1)正常执行

public class Test1 { 
   
    public static void main(String[] args) { 
   
        Test1 test1 = new Test1();
        test1.say();
    }
    public void say() { 
   
        String str = "123";
        try { 
   
        System.out.println(Integer.parseInt(str));
        System.out.println("正常执行");
        //return;
        }catch(Exception e) { 
   
            System.out.println("有异常");
            //return;
        }finally { 
   
            System.out.println("finally");
            //return;
        }
    }
}

复制代码
123
正常执行
finally
(2)异常情况:

复制代码

public class Test1 { 
   
    public static void main(String[] args) { 
   
        Test1 test1 = new Test1();
        test1.say();
    }
    public void say() { 
   
        String str = "abc";
        try { 
   
        System.out.println(Integer.parseInt(str));
        System.out.println("正常执行");
        //return;
        }catch(Exception e) { 
   
            System.out.println("有异常");
            //return;
        }finally { 
   
            System.out.println("finally");
            //return;
        }
    }
}
有异常
finally

结论:finally是一定会被执行的!因此,finally通常用于释放资源,在IO流操作和数据库操作中,程序没有报错,执行了 try 和 finally 代码块,程序报错了,执行try catch finally 代码块

那么这里就有一个问题,执行的先后顺序?

这里我们需要连接一个关键字return!

Java中的return有两方面的用途:

(1)返回方法指定类型的值(前提是方法的返回值类型不是void)。

(2)方法的结束,它会导致当前的方法退出。

通过return我们去探究一下,try catch finally的执行先后顺序!

复制代码

public class Test1 { 
   
    public static void main(String[] args) { 
   
        Test1 test1 = new Test1();
        System.out.println(test1.say());
    }

    public String say() { 
   
        String str = "123";
        try { 
   
            Integer.parseInt(str);
            return "try";
        } catch (Exception e) { 
   

            return "catch";
        } finally { 
   
            return "finally";
        }
    }
}
结果为:finally
public class Test1 { 
   
    public static void main(String[] args) { 
   
        Test1 test1 = new Test1();
        System.out.println(test1.say());
    }

    public String say() { 
   
        String str = "abc";
        try { 
   
            Integer.parseInt(str);
            return "try";
        } catch (Exception e) { 
   

            return "catch";
        } finally { 
   
            return "finally";
        }
    }
}
结果也是finally

这是为什么?finally是必定执行的代码块!所有finally逻辑上虽然能使用return,但一般finally不会接return。否则你什么也测不出来

public class Test1 { 
   
    public static void main(String[] args) { 
   
        Test1 test1 = new Test1();
        System.out.println(test1.say());
    }

    public String say() { 
   
        String str = "abc";
        try { 
   
            Integer.parseInt(str);
            return "try";
        } catch (Exception e) { 
   
            System.out.println("catch");
            return "catch";
        } finally { 
   
            System.out.println("finally");
        }
    }
}
catch
finally
catch

由此可以看出执行的顺序为:

(1)Integer.parseInt(str);
(2)System.out.println(“catch”);
(3)System.out.println(“finally”);
(4)return “catch”;
同理其他:
复制代码

public class Test1 { 
   
    public static void main(String[] args) { 
   
        Test1 test1 = new Test1();
        System.out.println(test1.say());
    }

    public String say() { 
   
        String str = "abc";
        try { 
   
            Integer.parseInt(str);
            return "try";
        } catch (Exception e) { 
   
            System.out.println("catch");
            return "catch";
        } finally { 
   
            System.out.println("finally");
            return "finally + return";
        }
    }
}

复制代码

catch
finally
finally + return
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168700.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JAVA中String的深入研究

    每次上网冲杯Java时,都能看到关于String无休无止的争论。还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸裸的站在我们这些Java色狼面前了。嘿嘿….众所周知,String是由字符组成的串,在程序中使用频率很高。Java中的String是一个类,而并非基本数据类型。 不过她却不是普通的类哦!!! 【镜头1】 String对象的创建       1、关于

    2022年3月11日
    43
  • 算法模型定义介绍

    算法模型定义介绍1.马尔科夫模型1.1马尔科夫过程  马尔可夫过程(Markovprocess)是一类随机过程。它的原始模型马尔可夫链。已知目前状态(现在)的条件下,它未来的演变(将来)不依赖于它以往的演变(过去)。  一个马尔科夫过程就是指过程中的每个状态的转移只依赖于之前的n个状态,这个过程被称为1个n阶的模型,其中n是影响转移状态的数目。最简单的马尔科夫过程就是一阶过程…

    2022年6月23日
    32
  • MySQL常用SQL语句大全

    MySQL常用SQL语句大全MySQL数据库是一个十分轻便的数据库管理系统,相比大型的数据库管理系统如Oracle、MS-SQL,MySQL更拥有轻便、灵活、开发速度快的特色,更适用于中小型数据的存储与架构。MySQL之所以能够被数以万计的网站采用,也是由此而来。

    2022年6月13日
    42
  • hdu 4885 TIANKENG’s travel(bfs)

    hdu 4885 TIANKENG’s travel(bfs)

    2021年12月6日
    40
  • java list转set用法

    java list转set用法参考:https://blog.csdn.net/kye055947/article/details/80561633之前一直被这两list转set,set转list所烦恼,今天整理了下两者之间怎么转的初始化listList<Integer>list=newArrayList<>();list.add(11);list.add(22);list.add(33);方法一(直接放HashSet里面)Set<Integer>lis

    2022年6月21日
    43
  • 两种方法在VMware中安装VMware Tools

    两种方法在VMware中安装VMware ToolsVMwareTools的主要作用是虚拟硬件的驱动,鼠标的无缝移出移入,剪贴板共享,共享主机上的文件夹等功能。 方法一1.打开文件夹-Ubuntu17.10amd64(根据自己版本来看)。2.在VMwareWorkstation主界面点击菜单“虚拟机”。会弹出提示框,点击是。3.保持网络状态,等待后台下载,下载后会出现一个压缩包。在下载过程中可能会出现DVD图标…

    2022年5月26日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号