我正在为框架开发 Java 插件。
我的代码编写方式如下所示,entryPoint 函数如下所示(考虑这是起点,主函数)
function entryPoint()
{
try{
//some code block
subFunction1();
subFunction2();
}
catch(Exception e) {}
catch(IOException ioe) {}
catch(NullPointerException npe){}
}
function subFunction1() throws IOException
{
//some code
}
function subFunction2() throws NullPointerException
{
//some code
}
所以这个想法是,所有子函数都会向主函数抛出特定的异常,并且 我们在主要函数中捕获这些异常并进行处理。
这种方式正确吗?如果没有请建议更好的方法。
最佳答案
catch
语句的顺序应该更改。由于第一个catch
将匹配所有Exception
,因此后面的两个永远不会被触发。NPE
在大多数情况下是意外且不可恢复的。捕获它意味着应用程序能够从中恢复并运行。真的是这样吗?即使
NPE
是可恢复的,更好的做法是检查!= null
而不是依赖命令流的异常。这是出于概念原因(基于异常的命令流需要更多代码,可读性较差,意图通常不清楚)以及性能原因。所有
异常
都会被吞掉 - 不会发生日志记录或重新抛出。这样,没有人知道是否以及何时出现问题,因为没有记录任何异常。在大多数情况下,用户、其他开发人员和维护人员希望几乎所有异常都是真正异常的,因此会被记录下来。
关于Java 异常处理 - 这是好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16394547/