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抓住吗?

解决方案 »

  1.   

    遍历到第一个出现异常之后,就到error2那里了,程序不会执行了
      

  2.   

    同意楼上,异常这时可像return看待。它会从接受异常的处理器中返回。
      

  3.   

    当for循环运行到i=2时,output.append(" " + Integer.parseInt(data[i])); 抛出异常,就会进入
    catch(Exception e) {
                        System.out.println("error1 " + data[i]);
                        } 
    但是catch里,这句System.out.println("error1 " + data[i]);又抛出异常,
    由于没有Catch它,使得程序退出toString()并将异常往外抛,并被main方法中的catch块捕获。
      

  4.   

    正解,如果想要某段程序一定要被执行,只要放在finally中就可以了。
      

  5.   

    chenchuanfeng001正解;其他说法不对;
      

  6.   

    lz用e.printStackTrace();一下,看看结果就知道怎么回事了。10.5在Integer.parseInt的时候抛出NumberFormatException,这个时候打印出error1
    当i为2的时候抛出ArrayIndexOutOfBoundsException,这个时候就打印出error2
      

  7.   

      前面的人的回复,有的是对的,有的是错误的。我这样分析的,当i=1的时候,Integer.parseInt(data[i]),data[i]="10.5",所以就发生了异常,java.lang.NumberFormatException: For input string: "10.5",捕获了异常就输出error1 10.5。
      当i=3的时候,又发生数组下标越界了,此时发生java.lang.ArrayIndexOutOfBoundsException: 2
    接着就执行 System.out.println("error1 " + data[i]); 但是这句话也有异常呀,所以就把这个异常传递给了调用这个toString()方法的main方法,由它来处理异常,所以就输出error2了。
      

  8.   

    i=2的时候,
    另:三楼的解释是正确的。总共抛出三次异常。
    一次是:Integer.parseInt(data[i])); data[i]==10.5被捕捉住
    继续循环,i=2数组下标越界。
    捕捉,输出的代码:
    System.out.println("error1 " + data[i]); 
    这时又越界。抛出异常。主函数里边的catch捕捉。
     
      

  9.   

    只要出现异常,程序直接跳到catch块中,try中的都不会再执行了,所以输出error2