Java 如何创建特定于应用程序的有效异常层次结构

Java 如何创建特定于应用程序的有效异常层次结构,java,exception,exception-handling,Java,Exception,Exception Handling,我是一个设计方面的新手,虽然我有一些开发经验。我的问题与声明有关- “在项目开始时设计异常层次结构始终是一种良好的做法” 经过大量的阅读和研究,检查和未检查异常的定义已经很清楚了 然而,我仍然想知道在为应用程序设计异常层次结构时,什么是最佳实践。下面的方法正确吗 创建您自己的特定于应用程序的顶级异常 我的认知异常 MyAppCheckedException 子类MyAppCheckedException,其中包含所有业务异常,您希望调用方接受特定异常。例如 TryWithDifferent

我是一个设计方面的新手,虽然我有一些开发经验。我的问题与声明有关-

“在项目开始时设计异常层次结构始终是一种良好的做法”

经过大量的阅读和研究,检查和未检查异常的定义已经很清楚了

然而,我仍然想知道在为应用程序设计异常层次结构时,什么是最佳实践。下面的方法正确吗

  • 创建您自己的特定于应用程序的顶级异常
    • 我的认知异常
    • MyAppCheckedException
  • 子类MyAppCheckedException,其中包含所有业务异常,您希望调用方接受特定异常。例如
    • TryWithDifferentinInputException-这不是正确的输入,请更正
    • TryAlternateServiceException-此服务不可用,但您可以选择另一个将执行此作业的服务
  • 类似地,对运行时异常进行子类化,该异常会螺旋上升,仅由spring异常解析程序之类的东西捕获,并在前端显示适当的消息

  • 另一件让我头疼的事情是如何在项目开始时提出大多数异常场景。这样做的策略应该是什么。

    你好,海尔墨菲,欢迎来到so

    在我看来,没有必要为每个应用程序设计一个完整的异常层次结构。相反,只有当现有的库存异常都不能充分解决您遇到的错误时,才应该引入新的异常

    例如,您的TryWithDifferentinPutException可能很容易被替换为
    IllegalArgumentException
    IllegalStateException
    。我发现99%的时候,我都能很好地处理现有的

    至于在你真正开始编写代码之前知道会发生哪些异常:你的程序的复杂部分,比如类结构、算法、协议等,应该在你真正启动IDE并动手之前考虑并记录下来。UML是实现这一点的常用方法。在这个过程中,当你在书写你的算法或协议时,试着看看边界情况(当这个值变为零时会发生什么?如果这个参数为
    null
    ?我的算法还能工作吗?很好!它会崩溃吗?例外!)并扮演魔鬼代言人的角色(如果网络连接在我的协议中途中断怎么办?我可以从中恢复吗,还是让我处于无法恢复的状态?)您应该能够看到异常情况

    如果您确实发现自己需要创建自定义异常,请直接从最合适的祖先派生它们-错误、非法状态异常、RuntimeException、IOException等。不要创建您自己的完整层次结构,除非您需要只捕获您自己的所有异常,而不捕获任何库存异常。Ho不过,奈斯利说,我看不出这有什么用处


    更一般地说,异常应该是处理无法从中恢复的错误的“最后手段”,而不是作为控制流的一种形式。如果您希望在应用程序中自然发生某些事情(例如错误的用户输入),通常不应该通过异常处理。如果你有一个算法在很多情况下无法恢复,这可能表明你还没有找到正确的算法。

    好吧,我不会回答你所有的问题,只回答我根据经验知道的部分

    如果我们对应用程序的设计非常清楚,那么在一开始就创建异常的想法是有意义的。我的意思是,我们必须知道应用程序的流程以及可能发生的事情。如果我们不知道设计超过80%,我们可能会改变很多事情,包括异常层次结构,很多次

    此外,如果我们的应用程序设计正确,并且在编码阶段出现新的异常,那么在异常树中添加异常应该很容易

    我希望你明白。
    拜拜

    只是一个评论,我不会将异常命名为“用户应该做什么”,而是命名为异常。示例-不是“TryWithDifferentinInputException”,可能是“InputTypeException”(输入类型不正确)和“TryAlternateServiceException”作为“ServiceUnavailableException”。:)谢谢Stu Whyte。。我想给人的印象是,打电话的人需要采取一些行动。不过,我绝对同意,名字应该是为了事业,而不是为了行动。