为了理解目的,我创建了以下代码。
在下面的代码中,try块中有一个错误,所以它应该去catch块并打印15,因为finally块总是被执行,我们也应该得到20。 但是在输出中我输出的只有20而不是15。
请告知如何有这种描述。我是Java的初学者。 如果需要,还可以在程序中进行任何必要的更改,以获得15和20作为输出。
package javaapplication91;
public class NewClass
{
public static void main(String[] args)
{
NewClass n = new NewClass();
int z = n.m1();
System.out.println("z = " + z);
}
public int m1()
{
try
{
int a = 10/0;
System.out.println("Exception created");
return 10;
}
catch(ArithmeticException ae)
{
return 15;
}
finally
{
return 20;
}
}
}
答案 0 :(得分:1)
如果方法声明的返回值类型为int
,则只能从方法返回一个值。
当你导致异常ArithmeticException
时,你试图返回15,但是你得到20,因为finally
阻止在try catch
块的末尾执行,它将是最后一个return语句。
您可以阅读finally
here (Java Tutorial)
如果要返回两个值,可以像这样使用数组或列表:
public List<Integer> m1() {
List<Integer> returnValues = new ArrayList<Integer>();
try {
int a = 10/0;
System.out.println("Exception created");
returnValues.add(10);
} catch(ArithmeticException ae) {
returnValues.add(15);
} finally {
returnValues.add(20);
return returnValues;
}
}
答案 1 :(得分:0)
ArithmeticException中的返回将被finally返回覆盖,并将返回到您的函数。 建议最后只能在关闭文件或恢复资源时使用。