class T_test
{
 public static void main(String args[])
 {
  try
  {
   mb_method1(args)
  }
  catch(Exception e)
  {
   System.out.print("m");
  }
  System.out.print("n");
 }
 static void mb_method1(String a[])
 {
  try
  {
   mb_method2(a);
   System.out.print("a");
  }
  catch(Excption e)
  {
   System.out.print("c");
  }
  finally
  {
   System.out.print("c"):
  }
  System.out.print("d");
 }
 static void mb_method2(String a[])
 {
  System.out.println(a[a.length]);
 }
}和
class T_test
{
 public static void main(String args[])
 {
  try
  {
   mb_method1(args)
  }
  catch(Exception e)
  {
   System.out.print("m");
  }
  System.out.print("n");
 }
 static void mb_method1(String a[])
 {
  try
  {
   mb_method2(a);
   System.out.print("a");
  }
    finally
  {
   System.out.print("c"):
  }
  System.out.print("d");
 }
 static void mb_method2(String a[])
 {
  System.out.println(a[a.length]);
 }
}都输入“1 2 3 4”
结果为何不同

解决方案 »

  1.   

    都输入“1 2 3 4” 是啥意思
    不输入啥子 a[a.length] 也会出异常啊; 
      

  2.   

    先说第一个T_test,按照程序的执行步骤在mb_method2的时候捕获到异常进入mb_method1的catch输出‘c’,捕获之后finally肯定是要执行的(只要有finally就会执行不过有没有捕获到异常)输出‘c’接着输出‘d,由于在mb_method2已经捕获到异常,mb_method1输出最后一条语句的结果‘n’。所以最后输出的结果是’ccdn‘。对于第二个T_test,按照程序的执行步骤,main函数捕获到异常,但mb_method2的finally语句还是要先执行所以要输出‘c’,到main的catch中输出m,最后输出n。最后的输出结果是’cmn‘。