Java 加入catch块是一种良好的编码实践吗?

Java 加入catch块是一种良好的编码实践吗?,java,try-catch,Java,Try Catch,我在做一些与服务相关的工作。下面的代码段有效吗 try { //some code here } catch (ServiceException e) { throw new ServiceException("Error!!!"); } 我正在捕获ServiceException并抛出相同的异常。 这是一个好的实践吗?在catch部分中,您实际上捕获了代码执行期间发生的主要异常。然后从中抛出自定义/用户可读的异常。这是一个好的

我在做一些与服务相关的工作。下面的代码段有效吗

try {
          //some code here
    } catch (ServiceException e) {
                throw new ServiceException("Error!!!");
   }

我正在捕获ServiceException并抛出相同的异常。
这是一个好的实践吗?

在catch部分中,您实际上捕获了代码执行期间发生的主要异常。然后从中抛出自定义/用户可读的异常。这是一个好的实践。

不是一个好的实践。因为很难找到问题的根源

你不确定你写的是好是坏。在这种情况下,我会记录一些我计划使用的工具,在本例中是Java的异常机制,然后我会开始问问题:

  • 是否有理由让我捕获ServiceException e,然后抛出另一个相同类型且信息较少的异常。您使用较少的信息创建了新的。字符串“Error!!!”肯定比您从原始的e.getMessage()或e.getCause等中可能得到的要少(假设ServiceException e可能正在包装另一个低级异常,请记录一下异常包装)
  • 某些调用代码是否会捕获ServiceException并对其执行操作?检查一下您的调用层次结构,并找到您必须对ServiceException执行操作的位置。停在那里,然后开始再次询问。如果我在这里捕获到一个带有“Error!!!”的ServiceException,或者原始的ServiceException e,会有什么区别吗
  • 我在我的代码中抛出并捕获异常,我是否必须在稍后跟踪这里发生的事情?如果是,那么我也会记录一些错误、警告或关于发生了什么的信息,这取决于场景。这样,对于以后检查应用程序日志的人来说,故障排除过程将更加容易。我也会读一些关于吞咽异常以及为什么这样做是不好的
    投接球挡是很好的练习。忽略原始异常是有问题的做法。“我捕获ServiceException并抛出相同的异常。”你抛出相同类型的异常,不同的异常。我看到Catch中的警告抛出可以忽略IntelljCatch中的Catch异常,并在该块中再次抛出该异常不是一个好的做法,相反,您应该将其更改为某个自定义异常或执行其他操作operation@srp321 “捕获异常并在该块中再次抛出该异常不是一个好的做法有时,您需要在catch块中执行一些清理,然后重新引发异常。这是完全可以的:你不需要对原始异常做任何更改,你只是在它呼啸而过时做一些事情。从开发人员的角度来看,你可以打印堆栈跟踪,但你是否建议他将实际异常传递给最终用户??例如,如果有空指针异常,那么您是否直接在前端显示此错误??或者你会抛出一些有意义的错误?欢迎来到堆栈溢出。。。