多次抛出ArrayIndexOutOfBoundsException不再生成堆栈跟踪信息

5

我正在为我的程序编写测试。有时我的测试可以正常工作,但有时它们会失败。我试图找出所有不确定性的来源。

这里是一个简单、自包含的问题示例:

import java.util.ArrayList;

public class ArrayExceptions {
    public static void main(String[] args) {
        final int ITERATIONS = 10000;
        ArrayList<Integer> list = new ArrayList<>();
        try {
            list.get(-1);
        } catch(ArrayIndexOutOfBoundsException e) {
            e.printStackTrace();
        }
        for(int i = 0; i < ITERATIONS; i++) {
            try{
                list.get(-1);
            } catch (ArrayIndexOutOfBoundsException e) {
                if(e.getMessage() == null) {
                    System.out.println(i);
                    break;
                }
            }
        }
        for(int i = 0; i < 10; i++) {
            try {
                list.get(-1);
            } catch(ArrayIndexOutOfBoundsException e) {
                e.printStackTrace();
            }
        }
    }
}

该程序创建一个ArrayList。它尝试重复访问元素-1。最初,这会创建一个详细的回溯和ArrayIndexOutOfBoundsException旁边的消息。然而,如果您调用它足够多次(其中“足够多次”的次数大约为5500次),抛出的异常将缺少回溯和消息。
该程序的输出因运行而异。在此处,它在5494次迭代时提前退出。
java.lang.ArrayIndexOutOfBoundsException: -1
    at java.util.ArrayList.elementData(ArrayList.java:418)
    at java.util.ArrayList.get(ArrayList.java:431)
    at ArrayExceptions.main(ArrayExceptions.java:8)
5494
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException

在5540次迭代后,它最终失败了:

java.lang.ArrayIndexOutOfBoundsException: -1
    at java.util.ArrayList.elementData(ArrayList.java:418)
    at java.util.ArrayList.get(ArrayList.java:431)
    at ArrayExceptions.main(ArrayExceptions.java:8)
5540
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException

为什么会出现这种情况?
1个回答

6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接