【问题标题】:Finally block does not set values of variable in javafinally块没有在java中设置变量的值
【发布时间】:2013-08-31 01:48:44
【问题描述】:

我有以下代码。

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        try{
            System.out.println("Hardik::"+testFinnalyBlock());  
        }catch(Exception e){
            System.out.println("hhh");
        }
    }


    public static int testFinnalyBlock() throws Exception{
        int a=5,b=10;
        int sum=0;
        try{
            sum = a+b;
            System.out.println("sum==="+sum);
            return sum;
        }catch(Exception e){
            System.out.println("In Catch");
        }finally{
            sum = a+30;
            System.out.println("sum==="+sum);
//          return 1;
        }
        return 1;
    }

上面代码的输出吧 哈迪克::15, 虽然我认为应该是 Hardik::35。

谁能告诉我它是如何工作的。 谢谢。

【问题讨论】:

标签: java


【解决方案1】:

finally 块正在根据您的输出执行...

sum===15
sum===35
Hardik::15

问题在于try-catch 部分中的return 语句。 finally 不会更新开始返回给调用者的值,因为该值已经被放置在内存的另一部分...

更新

我是一个相当老派的人,所以我相信我的所有方法都有一个入口点和一个出口点......

类似下面的东西会产生你想要得到的结果......

public static int testFinnalyBlock() throws Exception {
    int a = 5, b = 10;
    int sum = 0;
    try {
        sum = a + b;
        System.out.println("sum===" + sum);
    } catch (Exception e) {
        System.out.println("In Catch");
    } finally {
        sum = a + 30;
        System.out.println("sum===" + sum);
    }
    return sum;
}

如果您因为错误需要返回不同的值,您应该在try-catchcatch 部分修改sum

【讨论】:

    【解决方案2】:

    从 try 块中删除 return 并在方法末尾添加。 试试这段代码

       public static int testFinnalyBlock() throws Exception{
        int a=5,b=10;
        int sum=0;
        try{
            sum = a+b;
            System.out.println("sum==="+sum);
    
        }catch(Exception e){
            System.out.println("In Catch");
        }finally{
            sum = a+30;
            System.out.println("sum==="+sum);
        //          return 1;
        }
        return sum;
    }
    

    使用 finally 块来清理活动,而不是逻辑。这不是一个好习惯。

    【讨论】:

      【解决方案3】:

      从 try 块中删除 return sum,您将获得所需的输出。 喜欢..

      try{
         sum = a+b;
         System.out.println("sum==="+sum);
      }
      catch(Exception e){
         System.out.println("In Catch");
      }
      finally{
         sum = a+30;
         System.out.println("sum==="+sum);
      }
      return sum;
      

      【讨论】:

      • 错了,异常不是问题。如果他将 return 写入黑色(此处尝试),程序将停止并返回并且无法到达 finally 块。 ^^
      【解决方案4】:

      您在 try 块下使用 return 语句,并且 sum=a+b 和 print 语句不会抛出任何异常,这就是为什么控制返回到 main 方法的总和 15 这就是为什么您的输出是 Hardik:: 15.如果您希望输出符合预期,则应从 try 中删除 return 语句,并将行 return 1 替换为 return sum
      喜欢:

       public static int testFinnalyBlock() throws Exception{
          int a=5,b=10;
          int sum=0;
          try{
              sum = a+b;
              System.out.println("sum==="+sum);
          }
      
         catch(Exception e){
              System.out.println("In Catch");
              return 1; 
         }finally{
              sum = a+30;  
          }
          return sum;
      }
      

      【讨论】:

        【解决方案5】:

        从 // 返回 1 中删除注释;并放回总和;在那里你得到你的答案。

        public static void main(String[] args) {
            // TODO Auto-generated method stub
        
            try{
                System.out.println("Hardik::"+testFinnalyBlock());  
            }catch(Exception e){
                System.out.println("hhh");
            }
        }
        
        
        public static int testFinnalyBlock() throws Exception{
            int a=5,b=10;
            int sum=0;
            try{
                sum = a+b;
                System.out.println("sum==="+sum);
                return sum;
            }catch(Exception e){
                System.out.println("In Catch");
            }finally{
                sum = a+30;
                System.out.println("sum==="+sum);
         return sum;
            }
        
        }
        

        【讨论】:

        • 我想如果你这样做,你也会遇到同样的问题。第一次返回后,方法退出!
        猜你喜欢
        • 1970-01-01
        • 2011-06-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-02
        • 1970-01-01
        • 1970-01-01
        • 2020-01-15
        • 1970-01-01
        相关资源
        最近更新 更多