因为ArrayDeque类实现了Deque,而且它没有任何容量限制。像addFirst()、addLast()等异常抛出方法的目的是什么?它将在任何情况下添加元素,因为数组没有边界。有人能解释一下我们可以在try{}catch{}块中使用的实现和addFirst可能抛出异常的场景吗?
try{ArrayDeque adObj = new ArrayDeque();
adObj.addFirst("Oracle");//we can keep on adding first. Use to exception handling?
}catch(Exception e){
}发布于 2011-04-11 20:12:52
ArrayDeque确实存在潜在的容量问题,这意味着它可能会抛出。它每次扩展都会使容量加倍,所以最终它不能再加倍了。代码的一个实现执行以下操作:
private void doubleCapacity() {
int n = elements.length;
int newCapacity = n << 1;
if (newCapacity < 0)
throw new IllegalStateException("Sorry, deque too big");
}由于addFirst的定义如下所示,此方法至少可以抛出接口文档中描述的两个异常。
public void addFirst(E e) {
if (e == null)
throw new NullPointerException();
elements[head = (head - 1) & (elements.length - 1)] = e;
if (head == tail)
doubleCapacity();
}正如其他人所提到的,接口上的JavaDoc只是给出了可能的异常。它抛出的类型都不是检查过的异常,所以你不会被强制去捕捉它们。
发布于 2011-04-11 20:11:30
ArrayDequeue.addFirst() is documented to throw的唯一例外是NullPointerException。因为这是一个未检查的异常,所以您不需要catch-block。
发布于 2011-04-11 20:13:32
Deque的一些实现是绑定的(即容量有限),有些则不是。如果已达到限制,则addFirst等方法将抛出IllegalStateException。其他方法,如offerFirst,返回一个布尔值来表示完全相同的结果。
如果您不想处理潜在的异常,或者知道不会有任何异常,只需使用offerFirst并忽略结果。
https://stackoverflow.com/questions/5621004
复制相似问题