如何从方法正确处理异常?

时间:2018-08-09 03:56:15

标签: java exception-handling

假设我有一个方法:

private void someMethod() {
    try {
        //Do something here
    }
    catch (NullPointerException ex) {
        System.out.println("error");
    }
}

现在,我想在其他地方使用此方法:

private void newMethod() {
    someMethod();
    JOptionPane.showMessageDialog(null, "Exception didn't occur");  
}

现在,我希望如果someMethod()中发生异常,那么newMethod()将不会继续前进,我的意思是在这种情况下不会显示JOptionPane消息。

什么是最好的方法?我找到了一种方法,将另一个NullPointerException扔到someMethod()的catch块中,然后从newMethod()处理。下面的代码演示了这一点:

private void someMethod() {
    try {
        //Do something here
    }
    catch (NullPointerException ex) {
        System.out.println("error");
        throw new NullPointerException("error");
    }
}

private void newMethod() {
    try {
        someMethod();
        JOptionPane.showMessageDialog(null, "Exception didn't occur");
    }
    catch (NullPointerException ex) {
        System.out.println("error");
    }           
}

但是,通过这种方法,我在其他情况下面临一些困难。我想有更好的方法可以实现这一目标。还是谢谢。

2 个答案:

答案 0 :(得分:3)

您不需要处理someMethod内部的异常。相反,您可以在此方法的throws子句中声明异常(如果它是已检查的异常),然后让newMethod处理该异常。

private void someMethod() throws SomeCheckedException {
   //Do something here
}

在发生NullPointerException的情况下,您无需执行上述操作,因为它是未经检查的异常。不要在someMethod内捕获它,而要在newMethod内进行try-catch。

答案 1 :(得分:1)

如果您的函数打算引发异常使其成为函数声明的一部分,则是一种很好的做法。因此,建议将someMethod()更改为private void someMethod() throws <exception Name>

根据您的要求,您可以使用相同的方法处理该异常并引发另一个异常,或者重新引发相同的异常并在另一个函数中对其进行处理。

如果您重新抛出相同的异常语法,则如下:

private void someMethod() throws WhateverException  {
    try {
        //Do something here
    }
    catch (WhateverException e) {
        throw e;
    }

}