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