黑马程序员技术交流社区

标题: 异常处理 [打印本页]

作者: 曾翰翰    时间: 2012-11-25 12:58
标题: 异常处理
class Sample13 {
public static void main(String args[]){
  //
  try{
   //
   int[] a =new int[4];
   System.out.println("整型数组创建完毕");
   //
   a[3]=9;
   System.out.println("整型数组中的第四个元素的值为"+a[3]);
  }//
  catch(NullPointerException npe){
   //
   System.out.println("这里出现的错误类型是:空引用");
  }
  //
  finally{
   //
   System.out.println("这里是finally快,无论是否抛出异常,这里总能执行");
  }
}
}
整型数组创建完毕
整型数组中的第四个元素的值为9
这里是finally快,无论是否抛出异常,这里总能执行
int[] a = null;
整型数组创建完毕
这里出现的错误类型是:空引用
这里是finally快,无论是否抛出异常,这里总能执行
int[] a =new int[2];
整型数组创建完毕
这里是finally快,无论是否抛出异常,这里总能执行
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at day20.Sample13.main(Sample13.java:13)

作者: 赵红萍    时间: 2012-11-25 13:27
你是想要问什么?你这个程序执行结果都是对的,
对于: int[] a =new int[4];运行结果就是下面的三行
  整型数组创建完毕
整型数组中的第四个元素的值为9
这里是finally快,无论是否抛出异常,这里总能执行

对于:int[] a = null;这个结果的打印也是对的,你创建了一个数组在栈内存中,但是没有指向,赋值为null就表示没有在堆内存中分配空间,因为你写了空指针的异常处理,所以在运行到a[3]=9时,就去执行你写的异常处理去了,finally语句块中的语句不管什么情况都会执行的

对于:int[] a =new int[2];你创建的这个数组可以装下三个元素,下标从0到2,但是你却要使用下标是3的这个空间,你在异常块中没有捕获下标越界异常,当然在执行时,会抛出异常了,如果你加上下标越界异常的处理,那么系统就不会出现那些英文提示了,效果就和你上面的一样了,如下:
public static void main(String args[]){
                   //
                   try{
                    //
                    int[] a =new int[2];
                    System.out.println("整型数组创建完毕");
                    //
                    a[3]=9;
                    System.out.println("整型数组中的第四个元素的值为"+a[3]);
                   }//
                   catch(NullPointerException npe){
                    //
                    System.out.println("这里出现的错误类型是:空引用");
                   }
                   catch(ArrayIndexOutOfBoundsException pe){
                            //
                            System.out.println("这里出现的错误类型是:下标越界");
                           }
                   //
                   finally{
                    //
                    System.out.println("这里是finally快,无论是否抛出异常,这里总能执行");
                   }
                 }
作者: 罗忠文    时间: 2012-11-25 13:30
cath为了抛出异常或是捕获异常,发生异常是带不会再往下执行,而finally是为了在发生异常是继续执行finally{代码块}代码块种的代码,ffinally是为关闭一些打开的资源,如数据库资源等




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2