我试图弄清楚方法签名中的抛出和Java 中的抛出语句之间的区别。方法签名中的抛出如下:
public void aMethod() throws IOException{
FileReader f = new FileReader("notExist.txt");
}
抛出语句如下:
public void bMethod() {
throw new IOException();
}
据我了解,throws
in 方法签名是该方法可能抛出此类异常的通知。throw
语句是在相应情况下实际抛出创建的对象。从这个意义上说,如果方法中存在throw语句,则方法签名中的throws应始终出现。
但是,以下代码似乎没有这样做。代码来自图书馆。我的问题是为什么会这样?我理解的概念错了吗?
这段代码是 java.util.linkedList 的副本。@作者乔什·布洛赫
/**
* Returns the first element in this list.
*
* @return the first element in this list
* @throws NoSuchElementException if this list is empty
*/
public E getFirst() {
final Node<E> f = first;
if (f == null)
throw new NoSuchElementException();
return f.item;
}
更新答案:
更新1:上面的代码和下面的代码一样吗?
// as far as I know, it is the same as without throws
public E getFirst() throws NoSuchElementException {
final Node<E> f = first;
if (f == null)
throw new NoSuchElementException();
return f.item;
}
更新 2:检查异常。我需要在签名中有“投掷”吗?是的。
// has to throw checked exception otherwise compile error
public String abc() throws IOException{
throw new IOException();
}