zoukankan      html  css  js  c++  java
  • java异常处理:finally中不要return

    java异常处理:finally中不要return
     
    
    复制代码
    public class Ex1 {
    
        public static void main(String[] args) {
            System.out.println(Ex1.getResult());
        }
    
        public static int getResult(){
            int a =100;
            
            try{
                return a+10; //注意,java的基础数据类型是值传递,这里的返回值已经和上面的a没有关系了
            }catch(Exception e){
                e.printStackTrace();  
            }finally{
                return a;    //最后再把值重定向到a(相当于将try中的返回值覆盖掉),所以输出还是100
            }
        }
    }
    复制代码
     再看一个例子:
    
     
    
    复制代码
    public class Ex1 {
    
        public static void main(String[] args) {
            try{
            System.out.println(Ex1.getResult());
            }catch(Exception e){
                e.printStackTrace();
                System.out.println("截获异常catch");
            }finally{
                System.out.println("异常处理finally");
            }
        }
    
        public static int getResult() throws Exception{
            int a =100;
            
            try{
                
                a=a+10; 
                throw new RuntimeException();
            }catch(Exception e){
                System.out.println("截获异常并重新抛出异常");
                throw new Exception();            
            }finally{
                return a;
            }
        }
    }
    复制代码
    输出如下:
    
    截获异常并重新抛出异常
    110
    异常处理finally
    关键的“截获异常catch”却没有执行!!!
    
    原因是在getResult()的finally中return一个值,等同于告诉编译器该方法没有异常,但实际上异常是有的,这样的结果是该方法的调用者却捕获不到异常,相对于异常被无端的被吃掉了,隐藏杀机啊!!
    
    结论:不要再finally中试图return一个值,这样可能会导致一些意想不到的逻辑错误,finally就是用来释放资源的!!
    
  • 相关阅读:
    uva 11294 Wedding
    uvalive 4452 The Ministers’ Major Mess
    uvalive 3211 Now Or Later
    uvalive 3713 Astronauts
    uvalive 4288 Cat Vs. Dog
    uvalive 3276 The Great Wall Game
    uva 1411 Ants
    uva 11383 Golden Tiger Claw
    uva 11419 SAM I AM
    uvalive 3415 Guardian Of Decency
  • 原文地址:https://www.cnblogs.com/wzhanke/p/4778654.html
Copyright © 2011-2022 走看看