Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中,Finally块不设置变量的值_Java - Fatal编程技术网

在java中,Finally块不设置变量的值

在java中,Finally块不设置变量的值,java,Java,我有下面的代码 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 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

谁能告诉我它是怎么工作的吗。
谢谢。

从try块中删除
返回和
,您将获得所需的输出。 像


删除
return
表单try块,并在方法末尾添加。 试试这个代码

   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块用于清理活动,而不是逻辑。这不是好的做法。

正在根据您的输出执行
finally

sum===15
sum===35
Hardik::15
问题是,
try-catch
部分中的
return
语句
finally
不会更新返回给调用者的begin值,因为该值已被放入内存的另一部分

更新

我是一个很老的学校,所以我相信我所有的方法都有一个入口和一个出口

像下面这样的东西会产生你想要得到的结果

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 catch

catch
部分修改
sum
,从//return 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;
    }

}

在try块下使用return语句,sum=a+b,print语句不会引发任何异常,这就是为什么控件返回到main方法,值为sum 15,这就是为什么输出为Hardik::15。如果您希望得到预期的输出,那么应该从try中删除return语句,并将其替换为return sum
比如:


删除返回值;从try块实际上从try中删除return sum,并将return 1更改为return sum。重复该操作是错误的,异常不是问题所在。如果他将返回写入黑色(此处为try),程序将停止并返回,并且无法到达finally块^^我想如果你这样做,你也会有同样的问题。第一次返回后,该方法退出!
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;
    }

}
 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;
}