投掷或尝试捕捉

在决定是向方法中添加子句还是使用 ?throwstry-catch

根据我自己读到的内容,当调用方破坏了其协定的末尾(传递的对象)时,应该使用,并且在方法内部执行的操作期间发生异常时应该使用。这是正确的吗?如果是这样,呼叫者方面应该做些什么?throwstry-catch

P.S:通过Google和SO搜索,但希望对此有明确的答案。


答案 1
  • 仅当能够以有意义的方式处理异常时,才捕获异常
  • 声明向上抛出异常(如果它将由当前方法的使用者处理)
  • 如果异常是由输入参数引起的,则引发异常(但这些参数通常未选中)

答案 2

通常,当方法无法在本地处理关联的问题时,应向其调用方引发异常。例如,如果该方法应该从具有给定路径的文件读取,则无法以合理的方式在本地处理。这同样适用于无效输入,并补充说我个人的选择是像在这种情况下抛出一个未经检查的异常。IOExceptionsIllegalArgumentException

如果出现以下情况,它应该从被调用的方法中捕获异常:

  • 它是可以在本地处理的东西(例如,尝试将输入字符串转换为数字,如果转换失败,则返回默认值是完全有效的),
  • 或者它不应该被抛出(例如,如果异常来自特定于实现的下层,其实现细节不应该对调用方可见 - 例如,我不想证明我用于持久化我的实体,所以我在本地捕获所有实体并将其转换为我自己的异常类型)。DAOHibernateHibernateExceptions

推荐