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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Lo_Twilight 中级黑马   /  2015-2-17 23:06  /  1253 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

形象的让你了解到异常的分类!

有一类特殊的异常叫“RuntimeException”,就是“运行时异常”,包括像常见的“NullPointerException”(空指针异常)等,这些异常通通继承于“RuntimeException”类,它们通常是一些无法预先知道的异常,只有在程序运行起来后才能知道到底会不会出现异常。

这种“RuntimeException”是用不着catch住,也不需要throws显式抛出的(当然也允许catch或throws,如果程序确实有需要的话),Java虚拟机会自动把它们向上一层抛出,如果一直没有被catch到,最后就由Java虚拟机catch住,然后在控制台显示出我们平常见到的异常信息,接着程序将被中止。

对于其它不是“RuntimeException”的异常(“非运行时异常”),方法中如果有可能出现,就必须catch住或者用throws显示抛出,否则Java源代码是无法通过编译的。


一般在下面这种情况时使用throws:
某个方法中调用了一些会抛出异常方法,而这个方法从业务或逻辑上来说又不太应该处理这种异常,所以由它来catch住异常不好,这时就可以在方法上加上throws把异常交给上一层调用本方法的代码去处理。
总的来说,throws的含义就表示某个方法按照功能,有可能会出现某种异常。

例如:
情况一:有一个方法,功能是接收一个字符串,把按指定格式转换为日期,如果格式不符合,就返回null。
情况二:有一个方法,功能是接收一个字符串,把按指定格式转换为日期,如果格式不符合,就抛出格式不符的异常。

字符串转换日期一般可以用DateFormat抽象类的parse方法(实现类通常是SimpleDateFormat),这个方法会抛出ParseException异常。
那么,
对于情况一,就要用catch抓住异常:
public Date strToDate(String dateStr) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
   date = sdf.parse(dateStr);
} catch (ParseException e) {
   e.printStackTrace();
}
return date;
}

而对于情况二,就要在方法上加throws来抛出异常:
public Date strToDate(String dateStr) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.parse(dateStr);
}

这两种情况的区别,就在于方法设计的功能实现不同,情况一要求这个方法能够处理字符串格式不对的例外;而情况二只要求这个方法转换格式,对于字符串格式不对的例外,只需要把这个“例外”告诉上层调用它的方法就行了。

比较形像的描述就是:
方法一:你给我一个字符串,我看看它格式对不对,如果不对,就返回给你一个null;如果格式对了,就返回给你正确日期。
方法二:你给我一个字符串,我就返回正确日期;如果格式有问题,我就喊一声“格式有问题!”。
这里的throws,就相当于实现了“喊一声”的功能。

评分

参与人数 1黑马币 +10 收起 理由
烟雾绕 + 10

查看全部评分

3 个回复

倒序浏览
:lol   还没学到  留着备用  感谢楼主分享
回复 使用道具 举报
xyf19881010 来自手机 中级黑马 2015-2-17 23:35:17
藤椅
楼主写的很好,学习了
回复 使用道具 举报
huangchunwei 来自手机 中级黑马 2015-2-17 23:46:46
板凳
分析的不错。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马