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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马磊 中级黑马   /  2012-10-18 16:57  /  2875 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马磊 于 2012-10-18 17:16 编辑

老毕基础视频day10-06面向对象 练习四中第25题,让写出一个方法判断字符数组中是否有某个字符。
如果输入的数组为空的话,抛出异常。老毕给的答案是:
  1. public int getIndex(char[] arr, char key)
  2.         {
  3.                 if (arr==null)
  4.                         throw new IllegalArgumentException("");
  5.                 for(int x=0; x<arr.length; x++)
  6.                 {
  7.                         if (arr[x]==key)
  8.                                 return x;
  9.                 }
  10.                 return -1;
  11.         }
复制代码
为什么在 public int getIndex(char[] arr, char key) 后面不用写throws IllegalArgumentException


评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
本帖最后由 丁旭 于 2012-10-18 17:08 编辑

throws用来声明该方法有可能会出现此异常问题。一旦声明就必须抛出或处理异常。
throw用来手动抛出异常。
IllegalArgumentException是运行时异常,编译时是不会出现失败。这种异常也可以用try{}catch(){}处理,但是通常不需要编写try{}进行处理,因为这种异常发生是为了让程序停掉。 一旦发生,就让程序停掉。然后对代码进行修正。

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
IllegalArgumentException这个异常是属于RuntimeException的子类,而RuntimeException是在运行时期的异常,比较特殊,所以函数那里不需要用throws。
你回去看一下毕老师的视频吧,有讲过RuntimeException的。
回复 使用道具 举报
这个问题后面老毕会将的,先把我的笔记给你看看下
@@特殊异常类RuntimeException:
RuntimeException以及他的所有子类
(主要包括 NullPointerException空指针异常,<Array或者String>IndexOutOfBoundsException数组或字符串角标越界异常,IllegalArgumentException非法参数异常等)
特点:
1,在函数内抛出RuntimeException对象,函数上可以不用声明,编译通过!
2,在函数上声明RuntimeException类,调用者可以不用处理,编译通过!
3,调用含RuntimeException异常的函数,调用者可以不用处理。编译通过!
而一般情况下,函数内可能出现异常,并且内部没有进行try处理,那么函数上需要声明,否则编译失败。
但RuntimeException类及其子类 特殊!
特殊的原因:当该异常发生时,希望程序停止。因为在运行时,出现了无法继续运算的情况。希望程序停止后,对代码进行修正!
自定义异常:如果该异常的发生,无法再继续进行运算,就让自定义异常继承RuntimeException
异常分两种:
1,编译时不被检测的异常(RuntimeException及其子类)。运行时异常。异常发生时,程序停掉。
2,编译时被检测的异常。javac 的时候。编译时异常。异常发生,可以被处理。
异常在子父类覆盖中的提体现:
1,子类覆盖父类方法时,如果父类的方法抛出异常。那么子类的覆盖函数只能抛出父类的异常或该异常的子类。(对于新的异常,子类方法只能内部try catch处理)
2,父类方法抛出多个异常,子类在覆盖该方法时,只能抛出父类异常的子集。
3,父类或接口中方法没有异常抛出,子类在覆盖方法时,也不能抛出异常。
    如果子类覆盖的方法发生了异常,就必须进行try处理,绝对不能抛出。

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
谢谢大家的讲解,原来以前的视频提到过,只是没注意。
印象中有个RuntimeException,但是没注意IllegalArgumentException 是RuntimeException的子类。
还以为是题目中自定义的类呢。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马