问题:请问为什么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()");
}
}
}
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()");
}
}
}
你讓前面的Exception不會發生,自然他就會錯給你看了。
System.out.println("result = " + divide(x,0));
这句,array[index + 1]已经是0了。肯定就抛出异常了。x[1] = 0;
System.out.println("result = " + divide(x, 0));
把这两句注释掉!就能抛出
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(){}