java中的异常处理,为什么会使程序陷入死循环?

时间:2021-12-24 23:51:06
package com.exception;

public class Test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 0 ;
String greetings[] = {"Hello World", "Hello", "HELLO WORLD"};
while(i < 4){
try{
System.out.println(greetings[i]);
i++;
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("not ended!");
}
}

System.out.println("nomal ended!");
for(i = 0; i < 3; i++)
System.out.println(greetings[i]);
}

}

在数组可能越界的地方,我进行了异常的捕获,为什么这个程序确实一直输出:not ended!
程序无法继续向下执行!

6 个解决方案

#1


当i=3时, 程序就调到异常里面,i++不会执行。 所以i = 3然后无线循环了。

你这样写就可以了

System.out.println(greetings[i++]);
            }catch(ArrayIndexOutOfBoundsException e){
                System.out.println("not ended!");
            }

#2


引用 1 楼 whos2002110 的回复:
当i=3时, 程序就调到异常里面,i++不会执行。 所以i = 3然后无线循环了。

你这样写就可以了

System.out.println(greetings[i++]);
            }catch(ArrayIndexOutOfBoundsException e){
                System.out.println("not ended!");
            }

..你这个一样会出现楼主的情况。。
建议直接输出“not ended” 之后加 break;直接跳出循环。反正效果一样。

#3


这个debug  调试看看。

#4


引用 3 楼 rui888 的回复:
这个debug  调试看看。
我debug试试看!

#5



while(i < 4){
            try{
                // i=3 时,就进入catch块,然后i 不会自增,再来访问greetings[i],再进catch,陷入怪圈
                System.out.println(greetings[i]); 
                i++;
            }catch(ArrayIndexOutOfBoundsException e){
                 System.out.println("not ended!");
            }
 }

#6


因为你的i=3时 打印greetings[i]出现异常 无法执行i++就继续循环了 今后i一直等于3就死循环了

#1


当i=3时, 程序就调到异常里面,i++不会执行。 所以i = 3然后无线循环了。

你这样写就可以了

System.out.println(greetings[i++]);
            }catch(ArrayIndexOutOfBoundsException e){
                System.out.println("not ended!");
            }

#2


引用 1 楼 whos2002110 的回复:
当i=3时, 程序就调到异常里面,i++不会执行。 所以i = 3然后无线循环了。

你这样写就可以了

System.out.println(greetings[i++]);
            }catch(ArrayIndexOutOfBoundsException e){
                System.out.println("not ended!");
            }

..你这个一样会出现楼主的情况。。
建议直接输出“not ended” 之后加 break;直接跳出循环。反正效果一样。

#3


这个debug  调试看看。

#4


引用 3 楼 rui888 的回复:
这个debug  调试看看。
我debug试试看!

#5



while(i < 4){
            try{
                // i=3 时,就进入catch块,然后i 不会自增,再来访问greetings[i],再进catch,陷入怪圈
                System.out.println(greetings[i]); 
                i++;
            }catch(ArrayIndexOutOfBoundsException e){
                 System.out.println("not ended!");
            }
 }

#6


因为你的i=3时 打印greetings[i]出现异常 无法执行i++就继续循环了 今后i一直等于3就死循环了