方法签名中的 Throw 和 Java 中的 Throw 语句之间的区别
我试图弄清楚方法签名中的 Throw 和 Java 中的 Throw 语句之间的区别。抛入方法签名如下所示:
public void aMethod() throws IOException{
FileReader f = new FileReader("notExist.txt");
}
抛出语句如下所示:
public void bMethod() {
throw new IOException();
}
根据我的理解,in 方法签名是该方法可能引发此类异常的通知。 语句是在相应情况下实际抛出创建的对象。从这个意义上说,如果方法中存在 throw 语句,则应始终显示 throw in 方法签名。throws
throw
但是,以下代码似乎并非如此。代码来自库。我的问题是为什么会发生这种情况?我是否理解了错误的概念?
这段代码是从java.util.linkedList复制的。@author 乔什·布洛赫
/**
* 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();
}