查询异常处理

时间:2017-01-06 11:41:29

标签: java exception exception-handling

为了理解目的,我创建了以下代码。

在下面的代码中,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;
    }
}
}

2 个答案:

答案 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返回覆盖,并将返回到您的函数。 建议最后只能在关闭文件或恢复资源时使用。