public class Displayer {
private String [] data = {"10","10.5"};
public String toString() {
StringBuffer output = new StringBuffer();
for(int i = 0; i < 3; i++) {
try{
output.append(" " + Integer.parseInt(data[i]));
output.append(" " + Double.parseDouble(data[i]));
} catch(Exception e) {
System.out.println("error1 " + data[i]);
}
}
return output.toString();
}
public static void main(String[] args) {
try{
Displayer d = new Displayer();
System.out.println(d);
}catch(Exception e) {
System.out.println("error2");
}
}
}
为什么输出的答案是下面这些?
answer:
error1 10.5
error2第一个答案 error1 10.5 我明白
但是第二个输出的 当 数组越界时 抛出的异常 不是被 for循环里面的那个catch抓住吗?
catch(Exception e) {
System.out.println("error1 " + data[i]);
}
但是catch里,这句System.out.println("error1 " + data[i]);又抛出异常,
由于没有Catch它,使得程序退出toString()并将异常往外抛,并被main方法中的catch块捕获。
当i为2的时候抛出ArrayIndexOutOfBoundsException,这个时候就打印出error2
当i=3的时候,又发生数组下标越界了,此时发生java.lang.ArrayIndexOutOfBoundsException: 2
接着就执行 System.out.println("error1 " + data[i]); 但是这句话也有异常呀,所以就把这个异常传递给了调用这个toString()方法的main方法,由它来处理异常,所以就输出error2了。
另:三楼的解释是正确的。总共抛出三次异常。
一次是:Integer.parseInt(data[i])); data[i]==10.5被捕捉住
继续循环,i=2数组下标越界。
捕捉,输出的代码:
System.out.println("error1 " + data[i]);
这时又越界。抛出异常。主函数里边的catch捕捉。