JAVA中异常处理的概念问题。。。

那个我们平常写程序,不写throws抛异常,最后也能显示一堆错误,是不是默认自动抛的啊。。。一般什么时候用throws抛异常呢。。。... 那个我们平常写程序,不写throws 抛异常,最后也能显示一堆错误,是不是默认自动抛的啊。。。
一般什么时候用throws抛异常呢。。。
展开
 我来答
玩者无敌
2011-01-09 · TA获得超过1812个赞
知道小有建树答主
回答量:306
采纳率:0%
帮助的人:442万
展开全部
有一类特殊的异常叫“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,就相当于实现了“喊一声”的功能。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式