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

How to handle Exception properly from a method?

假设,我有一个方法:

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 消息。

最好的方法是什么?我找到了一种方法,在 someMethod() 的 catch 块中抛出另一个 NullPointerException,然后从 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");
    }           
}

但是,通过这种方法,我在处理其他情况时遇到了一些困难。我想有更好的方法可以实现这一目标。还是谢谢了。

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

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

如果是NullPointerException,则不需要执行上述操作,因为它是一个未经检查的异常。不要在 someMethod 中捕获它,而是在 newMethod.

中使用 try-catch

如果您的函数打算抛出异常,最好将其作为函数声明的一部分。所以建议是把someMethod()改成private void someMethod() throws <exception Name>

根据您的要求,您可以在相同的方法中处理异常并抛出另一个异常,或者重新抛出相同的异常并在另一个函数中处理它。

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

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

}