zoukankan      html  css  js  c++  java
  • Java中的 try、catch、finally

    最近发现,有些东西还是要记录一下的,不记录事情一多就慢慢地忘了,真的是好记性不如烂笔头。

    今天记录一下finally的警告“finally block does not complete normally”的原因,以及解决方法。(finally必须出现在try,catch块之后,不能单独出现)。

    在解决这个警告之前,我们需要先梳理一下各种情况下try,catch,finally的执行结果。

    1.当try,catch中有return,finally中没有return时,无论finally中对返回值如何修改,最后返回的依旧是try,catch中的返回值。

    2.当try,cath中没有return,finally中有return时,最后返回的是finally中经过处理的返回值。

    3.当try,catch中有return,finally中有return时,try,catch中的return被finally中的return覆盖,最后真正返回的是finally中经过处理的返回值。

    我们再看一下警告信息“finally block does not complete normally”,它是因为try,catch中有return,而且finally中也有return,finally中的return会覆盖掉try,catch中的return,可能导致finally块无法正常完成。解决这个异常我们根据情况去掉其中一个return即可,不过最好别在finally中加return,他可能会导致返回的并不是我们在try,catch中要返回的值。

    https://www.cnblogs.com/aigongsi/archive/2012/04/19/2457735.html

    例子:

    package hello;
    
    public class Hello {
    
        public static void main(String[] args) throws ParseException {
            int ret = testFinally0();//10
            System.out.println(ret);
            ret = testFinally1();//2
            System.out.println(ret);
            try{
                testFinally2();//"算术异常"
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    
        private static int testFinally0() {
            int i;
            try{
                i=10;
                return i;
            }finally{
                i=20;
            }
            
        }
    
        private static int testFinally1() {
            try{
                return 1;
            }finally{
                return 2;
            }
        }
        
        private static void testFinally2() {
            try{
                throw new NullPointerException("空指针");
            }finally{
                throw new ArithmeticException("算术异常");
            }
        }
    
    }
    View Code

    常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。

    昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。
  • 相关阅读:
    使用python selenium webdriver模拟浏览器
    Xen基本原理
    Xen安装部署和基本原理
    Setups For Debugging QEMU with GDB and DDD
    Performance comparison amount different cache mode of KVM
    I/O 全虚拟化和准虚拟化 [KVM I/O QEMU Full-Virtualizaiton Para-virtualization]
    Useful plug-in collection of jenkins
    How to get YAST2 log during installing
    How to create a "BOOT USB DISK" for EXSI6.0
    php设计模式-单例模式
  • 原文地址:https://www.cnblogs.com/htj10/p/13377365.html
Copyright © 2011-2022 走看看