-2

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

4

5 回答 5

4

你可以throw扩展任何东西Throwable

void greet(String name) {
    if (name == null) {
        throw new IllegalArgumentException("Cannot greet null");
    }
    System.out.println("Hello, " + name);
}
于 2013-07-10T19:24:44.587 回答
2

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

throw new IllegalArgumentException("Your value passed in was illegal");
于 2013-07-10T19:24:17.017 回答
2

JLS 14.18中所述

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

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

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

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

抛出以指示方法已传递了非法或不适当的参数。

于 2013-07-10T19:24:57.667 回答
1

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

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

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

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

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

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

于 2013-07-10T19:25:22.163 回答
0

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

于 2013-07-10T19:57:13.187 回答