问题:请问为什么main()中的System.out.println("result = " + divide(x,2));中的divide(x,2)方法明明是越界了,但是却不能抛出异常并捕捉,说白了在这个程序中这句话就是一句废话,请问要怎么修改才能够让系统抛出这个异常呢??谢谢!!!public class ZeroDivideException extends Exception{
private int index = -1;
public ZeroDivideException(){}
public ZeroDivideException(String s){
super(s);
}
public ZeroDivideException(int index) {
super("/ by zero");
this.index = index;
}
public int getIndex(){
return index;
}
public static int divide(int[] array,int index) throws ZeroDivideException {
try {
System.out.println("First try block in divide() entered");
array[index + 2] = array[index]/array[index + 1];
System.out.println("Code at end of first try block in divide()");
return array[index + 2];
}catch(ArithmeticException e){
System.out.println("Arithmetic exception caught in divide()");
throw new ZeroDivideException(index + 1);
}catch(ArrayIndexOutOfBoundsException e) {
System.out.println(
"Index-out-of-bounds index exception caught in divid()");
}
System.out.println("Executing code after try block in divide()");
return array[index + 2];
}
public static void main(String args[]){
int[] x = {10,5,0};
try {
System.out.println("First try block in main()entered");
System.out.println("result = " + divide(x,0));
x[1] = 0;
System.out.println("result = " + divide(x,0));
x[1] = 1;
System.out.println("result = " + divide(x,2));
}catch(ArithmeticException e){
System.out.println("Arithmetic exception caught in main()");
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Index-out-bounds index exception caught in main()");
}catch(ZeroDivideException e){
int index = e.getIndex();
if(index > 0) {
x[index] = 1;
x[index + 1] = x[index - 1];
System.out.println("Zero divisor correted to " + x[index]);

}
System.out.println("Outside first try block in main()");
}
}
}

解决方案 »

  1.   

    都Exception了,當然不會繼續往下執行。
    你讓前面的Exception不會發生,自然他就會錯給你看了。
      

  2.   

    x[1] = 0;
    System.out.println("result = " + divide(x,0));
    这句,array[index + 1]已经是0了。肯定就抛出异常了。x[1] = 0;
    System.out.println("result = " + divide(x, 0));
    把这两句注释掉!就能抛出
      

  3.   

    補充一下 想要每一行錯誤都能被 catch ,就分開使用try catch如下(只是示意,所以沒寫完整)try{
    System.out.println("result = " + divide(x,0));
    }catch(){}try{
    x[1] = 0;
    System.out.println("result = " + divide(x,0));
    }catch(){}try{
    x[1] = 1;
    System.out.println("result = " + divide(x,2));
    }catch(){}