Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的异常抛出_Java_Exception_Exception Handling - Fatal编程技术网

java中的异常抛出

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

我刚刚开始自学java,目前正在学习如何抛出异常。我正在观看的在线教程说,在第二个粗体行list.geti中,如果I的值小于0或太大,可能会导致异常。我知道它怎么可能太大,但它的值怎么可能小于0?在什么情况下会发生这种情况

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