由于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){
}
最佳答案
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仅给出了可能的异常。它引发的所有类型都不是检查异常,因此您不必强制捕获它们。