假设我有一个方法:
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");
}
}
但是,通过这种方法,我在其他情况下面临一些困难。我想有更好的方法可以实现这一目标。还是谢谢。
答案 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;
}
}