java中的异常抛出
我刚刚开始自学java,目前正在学习如何抛出异常。我正在观看的在线教程说,在第二个粗体行list.geti中,如果I的值小于0或太大,可能会导致异常。我知道它怎么可能太大,但它的值怎么可能小于0?在什么情况下会发生这种情况java中的异常抛出,java,exception,exception-handling,Java,Exception,Exception Handling,我刚刚开始自学java,目前正在学习如何抛出异常。我正在观看的在线教程说,在第二个粗体行list.geti中,如果I的值小于0或太大,可能会导致异常。我知道它怎么可能太大,但它的值怎么可能小于0?在什么情况下会发生这种情况 private List<Integer> list; private static final int SIZE = 10; public ListOfNumbers () { list = new ArrayList<I
private List<Integer> list;
private static final int SIZE = 10;
public ListOfNumbers () {
list = new ArrayList<Integer>(SIZE);
for (int i = 0; i < SIZE; i++) {
list.add(new Integer(i));
}
}
public void writeList() {
PrintWriter out = new PrintWriter(**new FileWriter("OutFile.txt")**);
for (int i = 0; i < SIZE; i++) {
out.println("Value at: " + i + " = " + **list.get(i)**);
}
out.close();
}
}
所有这些都是直接从接近底部的地方取出来的。一个例子是,如果你正在阅读列表的背景词,从末尾开始,然后递减你的索引 假设您没有设置结束循环的正确条件…这将导致负索引和越界异常 在这个特定的示例中,按照当前设置代码的方式,不可能获得负索引 例如:
for(int i = list.size(); i>= -1; i--){
list.get(i);
}
在你的循环中,它不能 但如果你改变了:
for (int i = 0; i < SIZE; i++) {
致:
然后我将小于0,因此list.geti将抛出一个异常。如前所述,您的代码将永远不会遇到负索引。事实上,即使列表是空的,您也不会遇到负索引的情况,也不会超过列表的最大容量 如果您做了一些愚蠢的事情,例如使用负索引从列表中提取值,则会发生IndexOutOfBoundsException异常:
list.get(-1);
…或者更好的是,如果你从更常见的列表边缘走出来:
list.get(SIZE); // invalid - you can only get up to SIZE - 1
我的理解是ArrayList是一个数组赋值0-I,然后通过FileWriter值在以下位置打印出来:I是I。我的这些假设错了吗?如何输入<0的值?在上面的示例中,您永远不会有负数。但是,当合理合法的代码在索引计算中包含一个bug,该bug涉及从一个值中减去另一个值时,就会发生这种情况。实际上,发生的规律性不大,但只有5%或更少的情况是从另一端开始的。FOR循环的边界为,正如所写的,i<0或i>=SIZE是不可能的。然而,这并不意味着没有代码不会调用这些案例。
list.get(SIZE); // invalid - you can only get up to SIZE - 1