10万次循环里大概有100次会出现数组越界,通常在catch语句里重新调用doSomething方法即可成功解决;
但是有1到2次数组越界无法跳出catch,而且无法预见,在catch里重新调用doSomething方法无法跳出异常,把数据单独提取出来也找不出原因来,由于这种数据很少出现,所以可以忽略不计,也不想浪费时间研究数组方面的问题,但是循环进行到这个数据的时候就是死循环了,问有好的方法可以跳出这次循环,进入下一次循环?public class A{ public static void main(String[] args){
new Thread(new B()).start();
}
}public class B implements Runnable{

public B(){} public void run(){ for(int a=0;a<100000;a++){
C.doSomething(a);
}
}
}public class C{

public static void doSomething(int a){
try {
//主要代码隐藏
}catch (IndexOutOfBoundsException e){
//处理数组越界异常
C.doSomething(a);
}
}
}

解决方案 »

  1.   

    continue
    回复内容太短了! 
      

  2.   

    public class C{
        
        public static void doSomething(int a){
            try {
                //主要代码隐藏        
            }catch (IndexOutOfBoundsException e){
                //处理数组越界异常
                C.doSomething(a);           continue;        }
        }
    }
      

  3.   

    要不在catch里加个调度器,过一定的时间,就认为是死循环,再由调度器跳出去
      

  4.   

    这个办法也可行,要不就是加个计数器变量,当达到一定次数,退出。你这个死loop出现的原因是因为出现会导致outBound的数据,你一直调用dosomething,程序就一直抛出异常,到最后是内存溢出的下场。
      

  5.   

    应该好好检查检查你的核心代码,你的核心代码处理有问题。
    try {
                //主要代码隐藏        
    }
      

  6.   

    不是内存溢出,因为只有特定的值才会进入死循环,受楼上调度器的启发我用System.currentTimeMillis()设置时间超过指定的时间即跳出,这样效果不错,不知有没更好的方法
      

  7.   

    你这个是递归调用 所以会出现死循环
    就是说 你C.doSomething()出现exception但是在处理exception的程序中你又去C.doSomething(),然后又一次Exception...这样无限往复就死循环了。理论上应该会栈益出。解决办法就是不要在catch中递归调用C.doSomething()。而是直接写一段程序,放在这里来处理这种情况,至少打印出不同的出错信息,这样方便你判断到底是哪里出现异常。其实最后你要考虑清楚,出现异常状况你到底要怎么处理。忽略不计?还是一定要处理?