如何获得一个方法来抛出我创建的自定义异常?

 书友71424043 发布于 2023-02-12 16:53

所以我的自定义异常是PatternFormatException,并且我已经附加throws PatternFormatException到我的方法的末尾,但我想知道我如何能够实际获得物理抛出它的方法?我用if statements吗?即

  if //[doesn't_parse] throw PatternFormatException 

对于许多不同的代码行来说,这似乎很麻烦?我可以捕获一个更普遍的构建异常,即NumberFormatException,然后在处理这个,抛出我自己的异常?

1 个回答
  • 您使用throw关键字抛出异常:

    throw new PatternFormatException(...);

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

    像这样的东西:

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

    如果您确切知道可能发生的异常以及是否所有异常都被正确封装,通常都可以PatternFormatException.但是,Java中的Exceptions的关键思想是,您始终了解可能发生的所有可能的异常.这就是为什么Java强制您将所有可能抛出的异常(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调用不同的构造函数,因此可以不同地处理不同的异常.最后一个catch包装了一个意外的异常,因为你的程序遇到了RuntimeException你没有计划的异常(可能是a ).如果用户然后抱怨UnexpectedPatternFormatException,你可以回到你的代码并修复代码,这样底层的Exception就不会再被抛出或者以更有意义的方式被包装.您也可以使用单个UnexpectedMySomethingException类作为所有try/catch块的后备,以使事情变得更简单.

    关于异常引起的问题应该说的最后一句话:尽管Java使用Exceptions来处理各种情况,甚至是那些基本上不受Java程序员控制的情况(例如,当访问文件甚至尝试将字符串解析为数字时) ),始终要知道抛出和捕获异常实际上是非常昂贵的,这就是为什么许多人倾向于避免这种情况.如果性能不是问题(当Exception是罕见的事件时),那么才真正使用Exceptions.

    此外,如果抛出异常并且捕获它太晚,异常可能会威胁程序状态的完整性,因此应该执行的行不会被执行(例如,用于清理资源的代码或其他代码需要保留程序状态"正确"),因此,唯一安全的做法是关闭程序.

    2023-02-12 16:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有