2017-10-18 24 views
5

Tôi đang viết kiểm tra cho chương trình của mình. Đôi khi thử nghiệm của tôi hoạt động, và đôi khi chúng thất bại. Tôi đang cố gắng theo dõi tất cả các nguồn không xác định.Lặp đi lặp lại ném ArrayIndexOutOfBoundsException ngừng tạo dấu vết ngăn xếp

Dưới đây là một đơn giản, khép kín ví dụ về vấn đề của tôi:

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(); 
      } 
     } 
    } 
} 

chương trình này tạo ra một ArrayList. Nó cố gắng truy cập phần tử -1 nhiều lần. Ban đầu, điều này tạo ra một backtrace chi tiết và một tin nhắn cùng với ArrayIndexOutOfBoundsException. Tuy nhiên, nếu bạn gọi nó đủ thời gian (nơi 'đủ' có vẻ là khoảng 5500), ngoại lệ bị ném thiếu một backtrace và một tin nhắn.

Kết quả của chương trình này thay đổi từ khi chạy. Ở đây nó thoát sớm, lúc 5494 lặp:

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 

đây nó không muộn, tại 5540 lặp:

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 

Tại sao của nó làm điều này?

Trả lời

Các vấn đề liên quan