如何获得抛出已创建的自定义异常的方法?

亚历克斯·李普

因此,我的自定义异常是PatternFormatException,并且我已经将追加throws PatternFormatException到了方法的末尾,但是我想知道如何才能真正地使该方法实际抛出该方法?我用if statements吗?

  if //[doesn't_parse] throw PatternFormatException 

对于许多不同的代码行来说,这似乎很麻烦?我可以捕获一个更通用的内置异常,即NumberFormatException,然后在处理此异常时抛出自己的异常吗?

多美

您使用throw关键字抛出异常

throw new PatternFormatException(...);

通常,您希望尽早捕获异常并正确处理它们。如果希望解析器(或正在编写的任何程序)生成有意义的错误,通常最好将捕获的异常包装并重新抛出,并嵌入更有意义的异常中,以使用户更好地了解事情的发展。出错。

像这样:

try {
  doSomething();  // throws SomeException
  doSomethingElse();  // throws SomeOtherException
}
catch (Exception e) {
  throw new PatternFormatException(..., e);
}

如果您确切知道可能发生什么异常,并且所有异常都由正确封装,那么通常就可以了PatternFormatException但是,Java中Exceptions的关键思想是您始终知道可能发生的所有可能的Exception。这就是Java强制您将所有可能抛出的Exception(RuntimeException除外)添加到方法声明中的原因。

一个更安全的设计是:

try {
  doSomething();  // throws SomeException
  doSomethingElse();  // throws SomeOtherException
}
catch (SomeException e) {
  throw new PatternFormatException(..., e);
}
catch (SomeOtherException e2) {
  throw new PatternFormatException(..., e2);
}
catch (Exception e3) {
  throw new UnexpectedPatternFormatException(..., e3);
}

请注意,前两个catches调用不同的构造函数,因此可以不同地处理不同的Exception。最后一个catch包含意外的异常,因为您的程序遇到了RuntimeException您未计划的异常(可能是)。如果用户随后抱怨UnexpectedPatternFormatException,则可以返回到代码并对其进行修复,以使基础Exception不再被抛出或以更有意义的方式被包装。您也可以只使用一个UnexpectedMySomethingException类作为所有try / catch块的后备对象,以使事情简单一些。

关于由异常引起的问题,应该说最后一句话:即使Java在各种情况下都使用了异常,即使那些在很大程度上不受Java程序员控制的情况(例如,在访问文件或试图将字符串解析为数字时) ),请始终注意,抛出和捕获异常实际上是非常昂贵的,这就是为什么许多人倾向于避免这种情况的原因。如果性能不是问题(当异常是罕见事件时),则仅真正使用异常。

另外,如果抛出异常并为时太晚,异常可能会威胁程序状态的完整性,从而使原本应该执行的行无法执行(例如,用于清理资源的代码或其他需要保留代码的代码)。程序状态为“正确”),因此,唯一安全的做法是关闭程序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获得抛出已创建的自定义异常的方法?

来自分类Dev

自动使自定义异常抛出

来自分类Dev

抛出并捕获自定义异常

来自分类Dev

如何使用基于 C# 中自定义异常构造的函数抛出自定义异常?

来自分类Dev

如何为Kotlin中的扩展功能抛出的异常提供自定义异常消息?

来自分类Dev

如何正确创建带有消息的自定义异常?

来自分类Dev

CakePHP-如何创建自定义异常?

来自分类Dev

如何在 ColdFusion 中创建自定义异常

来自分类Dev

自定义异常作为聚合异常抛出

来自分类Dev

重新抛出自定义异常的几种方法C ++ 11

来自分类Dev

如何通过资源将自定义异常从过滤器抛出到error.jsp

来自分类Dev

如何查看C#中的自定义类成员抛出的所有异常的列表?

来自分类Dev

如何使用 lombok 在 @NonNull 异常中抛出我自己的自定义消息?

来自分类Dev

关于创建自定义异常

来自分类Dev

创建和调用自定义异常

来自分类Dev

MVC将自定义异常作为JSON抛出

来自分类Dev

GIDSignInDelegate协议上的自定义Google登录抛出异常

来自分类Dev

Automapper自定义解析器抛出空异常

来自分类Dev

自定义服务异常将作为AxisFault抛出

来自分类Dev

djangocms-text-ckeditor自定义配置抛出异常

来自分类Dev

GIDSignInDelegate协议上的自定义Google登录抛出异常

来自分类Dev

带有预抛出钩子的自定义异常?

来自分类Dev

从嵌套函数 C++ 抛出自定义异常

来自分类Dev

抛出自定义异常 Java 的函数

来自分类Dev

从 WebApi 返回自定义错误响应而不抛出异常

来自分类Dev

Java 中的自定义异常尝试抛出捕获

来自分类Dev

如何在django rest框架中快速抛出带有自定义错误代码的自定义异常并覆盖异常响应中的默认字段

来自分类Dev

可以设置一种自定义异常类型,以通过std :: map :: at方法抛出该异常吗?

来自分类Dev

如何避免创建自定义异常类,同时仍在适当的抽象级别上引发异常?

Related 相关文章

  1. 1

    如何获得抛出已创建的自定义异常的方法?

  2. 2

    自动使自定义异常抛出

  3. 3

    抛出并捕获自定义异常

  4. 4

    如何使用基于 C# 中自定义异常构造的函数抛出自定义异常?

  5. 5

    如何为Kotlin中的扩展功能抛出的异常提供自定义异常消息?

  6. 6

    如何正确创建带有消息的自定义异常?

  7. 7

    CakePHP-如何创建自定义异常?

  8. 8

    如何在 ColdFusion 中创建自定义异常

  9. 9

    自定义异常作为聚合异常抛出

  10. 10

    重新抛出自定义异常的几种方法C ++ 11

  11. 11

    如何通过资源将自定义异常从过滤器抛出到error.jsp

  12. 12

    如何查看C#中的自定义类成员抛出的所有异常的列表?

  13. 13

    如何使用 lombok 在 @NonNull 异常中抛出我自己的自定义消息?

  14. 14

    关于创建自定义异常

  15. 15

    创建和调用自定义异常

  16. 16

    MVC将自定义异常作为JSON抛出

  17. 17

    GIDSignInDelegate协议上的自定义Google登录抛出异常

  18. 18

    Automapper自定义解析器抛出空异常

  19. 19

    自定义服务异常将作为AxisFault抛出

  20. 20

    djangocms-text-ckeditor自定义配置抛出异常

  21. 21

    GIDSignInDelegate协议上的自定义Google登录抛出异常

  22. 22

    带有预抛出钩子的自定义异常?

  23. 23

    从嵌套函数 C++ 抛出自定义异常

  24. 24

    抛出自定义异常 Java 的函数

  25. 25

    从 WebApi 返回自定义错误响应而不抛出异常

  26. 26

    Java 中的自定义异常尝试抛出捕获

  27. 27

    如何在django rest框架中快速抛出带有自定义错误代码的自定义异常并覆盖异常响应中的默认字段

  28. 28

    可以设置一种自定义异常类型,以通过std :: map :: at方法抛出该异常吗?

  29. 29

    如何避免创建自定义异常类,同时仍在适当的抽象级别上引发异常?

热门标签

归档