【发布时间】:2014-10-26 09:09:36
【问题描述】:
谁能通过一个例子清楚地说明 Java 异常处理中 throw 和 throws 之间的区别?我试过谷歌搜索,但无法得出结论。请帮忙
【问题讨论】:
-
@suresh atta 很有趣
谁能通过一个例子清楚地说明 Java 异常处理中 throw 和 throws 之间的区别?我试过谷歌搜索,但无法得出结论。请帮忙
【问题讨论】:
throws 子句用于声明异常,throw 关键字用于显式抛出异常。
如果我们从语法上看,throw 后跟一个实例变量,throws 后跟异常类名。
关键字throw用于方法体内部调用异常,throws子句用于方法声明(签名)。
例如
投掷
throw new Exception("You have some exception")
throw new IOException("Connection failed!!")
投掷
public int myMethod() throws IOException, ArithmeticException, NullPointerException {}
您不能使用throw 声明多个异常。您可以声明多个异常,例如public void method() throws IOException,SQLException。
检查的异常不能用throw 传播,只是因为它显式地用于引发特定的异常。可以使用throws 传播已检查的异常。
异常传播:异常从一个方法传播到另一个方法,沿着调用堆栈向上传播,直到它被捕获。因此,如果 a() 调用 b(),b() 又调用 c(),c() 又调用 d(),并且如果 d() 抛出异常,则异常将从 d 传播到 c 到 b 到 a,除非这些方法之一捕获例外。 what is exception propagation?
【讨论】:
throw 用于抛出实际的 Exception 和 throws 声明它可能会抛出 Exception 的方法。
public int findMax(int[] array) throws Exception{
if(array==null)
throw new NullPointerException(...);
...
}
【讨论】:
public void someMethod(List<Foo> someList) throws SomeException {
if (someList.isEmpty()) throw new SomeException();
}
【讨论】: