代码之家  ›  专栏  ›  技术社区  ›  James P. PachinSV

投球或试接球

  •  64
  • James P. PachinSV  · 技术社区  · 14 年前

    在决定是否添加 throws 方法或使用方法的子句 try-catch ?

    从我自己读到的 投掷 在方法内部执行的操作期间发生异常时,应使用。是这样吗?如果是这样,呼叫者应该怎么做?

    注:通过谷歌搜索,所以,但想在这一个明确的答案。

    10 回复  |  直到 5 年前
        1
  •  60
  •   pete    11 年前
    • 只有在能够以有意义的方式处理异常时,才能捕获异常
    • 如果异常是由输入参数引起的,则抛出异常(但这些异常通常是未选中的)
        2
  •  15
  •   Mike Omeiri Kouider    5 年前

    IOExceptions 不能在本地以合理的方式处理。同样的情况也适用于无效的输入,我个人的选择是抛出一个未检查的异常,比如 IllegalArgumentException 在这种情况下。

    它应该从被调用的方法捕获异常,如果:

    • 它可以在本地处理(例如,尝试将输入字符串转换为数字,如果转换失败,则返回默认值是完全有效的),
    • DAO 使用 Hibernate 因为坚持我的实体,所以我抓住了一切 HibernateExceptions 并将它们转换为我自己的异常类型)。
        3
  •  12
  •   Justian Meyer    14 年前

    抛出:

    • 你只想让代码在 出现错误。
    • 善于使用容易导致 如果某些先决条件是 不符合。

    试一试:

    • 当你想要这个节目的时候 错误。
    • 有意义的 对最终用户的错误。

    我知道很多人总是使用投掷,因为它更干净,但就是没有太多的控制。

        4
  •  9
  •   Jeff Thomas    14 年前

    • 以有意义的方式 (从注释中添加)?所以把代码放进去 try/catch . 通过处理它,我的意思是能够通知用户/从错误中恢复,或者在更广泛的意义上,能够理解这个异常如何影响代码的执行。
    • 其他地方,扔掉它

    注意:此回复现在是一个社区wiki,请随时添加更多信息。

        5
  •  3
  •   EijiAdachi    11 年前

    向方法中添加try-catch或throws子句的决定取决于“您希望(或必须)如何处理您的异常”。

    如何处理一个异常是一个广泛的、远不是琐碎的问题。它特别涉及到在哪里处理异常以及在catch块中实现什么操作的决策。事实上,如何处理异常应该是一个全局的设计决策。

    所以回答你的问题,没有经验法则。

        6
  •  2
  •   Alberto Zaccagni    14 年前

    如果引发异常的方法有足够的信息来处理它,那么它应该捕获、生成关于发生了什么以及正在处理什么数据的有用信息。

        7
  •  1
  •   supercat    11 年前

    throws 如果它能够围绕对象的状态、传递给方法的任何参数以及方法作用于的任何其他对象做出合理的保证,则为异常。例如,应该从集合中检索调用者期望包含在其中的项的方法可能会 投掷 如果预期存在于集合中的项不存在,则会出现选中的异常。捕获该异常的调用方应该期望集合不包含有问题的项。

    请注意,虽然Java将允许通过声明为抛出适当类型的异常的方法触发已检查的异常,但这种用法通常应被视为反模式。例如,想象一下,某个方法 LookAtSky() 声明为调用 FullMoonException ,预计在月圆时抛出;再想象一下 电话 ExamineJupiter() ,也被宣布为 throws FullMoonException . 如果 ,如果 LookAtSky() 没有捕获它,或者处理它,或者将它包装到其他异常类型中,即调用 LookAtSky

    如果异常对方法调用方的意义与对被调用方法的意义相同,则调用方可能希望处理的异常(基本上包括所有已检查的异常)只能通过方法渗透。如果代码调用的方法被声明为抛出某个选中的异常,但调用方并不期望它在实际中抛出该异常(例如,因为它认为它是预验证的方法参数),那么选中的异常应该被捕获并包装在某个未选中的异常类型中。如果调用者不期望抛出异常,那么调用者就不能期望它有任何特定的含义。

        8
  •  1
  •   sofs1 Romain Manni-Bucau    6 年前

    没有硬性规定。

    但是作为开发人员,Checked异常必须包含在方法的throws子句中。这对于编译器知道要检查哪些异常是必要的。 按照惯例,未经检查的例外情况不应包含在throws子句中。

    资料来源:凯西·塞拉的SCJP 6书

        9
  •  1
  •   Keshav Deo Sharma    4 年前

    我给你简单点。 当您认为被调用方法中的功能可能导致某些异常时,请使用try catch block(处理被调用方法中的异常)

        10
  •  0
  •   Jarkid    7 年前

    如果使用try-catch,当异常发生时,剩余的代码仍将执行。

    如果您指定抛出异常的方法,那么当异常发生时,代码将立即停止执行。

        11
  •  0
  •   user8148636    6 年前

    try-catch pair在您希望提供定制行为时使用,以防出现异常…..换句话说…您可以根据您的程序要求解决您的问题(异常发生)。。。。。

    但是,当您没有任何关于异常发生情况的具体解决方案时,就会使用throws…您只是不希望程序异常终止。。。。

    希望是正确的:-)