Java中抛出和抛出的区别?

时间:2014-09-02 07:06:40

标签: java throw throws

任何人都能用一个例子清楚地说明Java异常处理中throw和throws之间的区别吗?我试过谷歌搜索但无法得出结论。请帮忙

3 个答案:

答案 0 :(得分:39)

  1. throws子句用于声明异常,throw关键字用于显式抛出异常。

  2. 如果我们看到语法明智,则throw后跟一个实例变量,throws后跟异常类名称。

  3. 在方法体内部使用关键字throw来调用异常,并在方法声明(签名)中使用throws子句。

  4. 例如

    抛出

    throw new Exception("You have some exception")
    throw new IOException("Connection failed!!")
    

    <强>引发

    public int myMethod() throws IOException, ArithmeticException, NullPointerException {}
    
    1. 您无法使用throw声明多个例外。您可以声明多个例外,例如public void method()抛出IOException,SQLException。

    2. 已检查的异常不能仅使用throw传播,因为它明确用于抛出特定异常。已检查的异常可以使用throws传播。

    3. 异常传播:异常传播从方法到方法,向上传递调用堆栈,直到被捕获为止。因此,如果a()调用b(),它调用c(),调用d(),并且如果d()抛出异常,则异常将从d传播到c到b传播到a,除非这些方法中的一个捕获例外。 what is exception propagation?

答案 1 :(得分:7)

throw用于在可能引发Exception的方法上投掷实际的throwsException声明。

public int findMax(int[] array) throws Exception{
    if(array==null)
       throw new NullPointerException(...);
    ...
}

答案 2 :(得分:0)

public void someMethod(List<Foo> someList) throws SomeException { 
    if (someList.isEmpty()) throw new SomeException();
}