Java 异常处理 - 这是好的做法吗?

标签 java exception

我正在为框架开发 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/

相关文章:

java - 如何使用 Jackson 序列化和反序列化对象列表

java - 覆盖静态方法功能

java - hibernate:如果父层是新的,则不会将更新级联到子层

java - 运行 OSGI 框架时出现 bundle 异常

java - 在使用它迭代java时从arraylist中删除项目

java - 如何在java中执行mysql查询时运行进度条?

typescript - 如何在nest.js中使用异常过滤器

asp.net - "Exception has been thrown by the target of an invocation"错误(mscorlib)

java - 异常处理错误: with Java?

c++ - 为什么不捕获 `std::promise::~promise` 中已经传播的异常