【问题标题】:IllegalArgumentException + continue to avoid breaking program?IllegalArgumentException + 继续避免破坏程序?
【发布时间】:2021-07-24 18:00:55
【问题描述】:

我想问是否可以阻止 IllegalArgumentException 破坏程序运行。如果我这样做:

throw new 
IllegalArgumentException("Value not 
allowed!");
continue;

这会阻止 IAE 在异常触发后中断程序吗?如果没有,有什么方法可以将其作为错误消息发送给用户,然后允许他们继续运行程序而无需重新运行?

【问题讨论】:

  • 打印一条消息然后:System.err.println("Value not allowed!");
  • 抛出异常的目的是如果抛出的错误没有得到处理,程序就会崩溃。如果您不希望程序因错误而崩溃,您可能不应该抛出异常,或者您应该在调用链的其他位置捕获它。
  • 阅读 try-catch 块。
  • throw 表示“现在停止并返回调用堆栈”。

标签: java break illegalargumentexception continue


【解决方案1】:
  1. 如果要处理异常(即阻止程序终止),则必须使用 try/catch 块。

  2. 只要抛出异常,控制就会立即退出。您的“继续”语句被执行。

  3. 当您“捕获”异常时,您可以重新抛出它。您可能会在代码中的某个更高级别有另一个 try/catch 块。

  4. 然而,您的最佳策略是“防御性编码”并尝试从一开始就防止 IllegalArgumentException 发生。

  5. 最后,你永远不想丢失信息。

    /*
     * Poor: 
     * *WHAT* value???  Where did this occur?  Why?
     * You've just lost all this information, "Value not allowed" is uselessly vague...
     */
    throw new IllegalArgumentException("Value not allowed!");
    

【讨论】:

  • 感谢您的建议,我将使用 try/catch 代替。至于“价值”,这是我拥有的完整程序中的一个想法,以及从其他类中接收价值的想法,我只是不想让一个简单的问题/想法过于复杂,我出于好奇而得到了更多。该值在程序的上下文中是有意义的。
【解决方案2】:

要么使用try..catch 结构来“拦截”异常,要么一开始就不抛出异常。

【讨论】:

    猜你喜欢
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多