A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曾翰翰 中级黑马   /  2012-11-25 12:58  /  1498 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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)

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

2 个回复

倒序浏览
你是想要问什么?你这个程序执行结果都是对的,
对于: 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快,无论是否抛出异常,这里总能执行");
                   }
                 }

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
cath为了抛出异常或是捕获异常,发生异常是带不会再往下执行,而finally是为了在发生异常是继续执行finally{代码块}代码块种的代码,ffinally是为关闭一些打开的资源,如数据库资源等

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马