【问题标题】:Throw keyword in Java [closed]在Java中抛出关键字[关闭]
【发布时间】:2013-07-10 19:22:42
【问题描述】:

在 Java 中,关键字 (throw) 仅用于抛出您创建的异常。如果没有,有人可以举一个例子说明它是如何在你自己的例外之外使用的。

【问题讨论】:

标签: java exception throw throws


【解决方案1】:

你可以throw任何扩展Throwable的东西

void greet(String name) {
    if (name == null) {
        throw new IllegalArgumentException("Cannot greet null");
    }
    System.out.println("Hello, " + name);
}

【讨论】:

    【解决方案2】:

    不,throw 关键字可以与 any Exception 一起使用,包括内置关键字:

    throw new IllegalArgumentException("Your value passed in was illegal");
    

    【讨论】:

      【解决方案3】:

      正如JLS 14.18中提到的那样

      throw 语句中的表达式必须表示 1) 变量 或可分配给该类型的引用类型的值(第 5.2 节) 可抛出,或 2) 空引用,或发生编译时错误。

      例如考虑下面给出的情况:

      public void factorial(int num)
      {
          if (num < 0 )
          {
              throw new IllegalArgumentException("Invalid number :"+num);
          }
          else
              //....code for factorial.
      }
      

      这里IllegalArgumentException 不是用户定义的异常。它是内置的 RunTimeException 并在 oracle 文档中指定:

      抛出表明一个方法被传递了一个非法的或 不恰当的论点。

      【讨论】:

        【解决方案4】:

        您可以抛出任何扩展 Throwable 的内容,包括错误、您的异常和 java 内置异常。

        也可以用于更复杂的逻辑:

        您可以使用它重新抛出,例如,ThreadDeathErrors 以及其他异常。当一个线程必须死时,它可以捕捉到这个错误:

        catch(ThreadDeathError e){
            System.out.println("Thread going down");
            throw e;
        }
        

        这里,e 不是你自己的异常,而是一个被捕获的错误。请尊重错误和异常之间的区别,因为前者通常不会被捕获。

        必须重新抛出线程死亡错误才能真正导致线程死亡。

        【讨论】:

          【解决方案5】:

          throw 可用于抛出任何扩展 java.lang.Throwable 的异常

          【讨论】:

            猜你喜欢
            • 2023-04-08
            • 1970-01-01
            • 2015-07-12
            • 2010-11-06
            • 1970-01-01
            • 2012-06-09
            • 1970-01-01
            • 1970-01-01
            • 2014-02-24
            相关资源
            最近更新 更多