Java异常处理,SimpleDateFormat中的parse函数操作

对于Runtime Exception我们可能都比较熟悉,try catch用用,捕获异常再做点处理,但是前几天想用java算两个日期之间时间差,百度到一段代码是这样的:
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");   
long to = df.parse("2015-5-15").getTime();    
long from = df.parse("2014-5-15").getTime();
System.out.println((to - from) / (1000 * 60 * 60 * 24));
当然你得import java.text.SimpleDateFormat;
但是当你把这个放在main里面后,会提示你parse有异常检测,eclipse于是自动就会给你补上一个throws,在main后面
public static void main(String[] args) throws ParseException
原因就是parse是一个带throws 一场的函数,所以如果不在上一级函数也指明抛出一场,或者对parse函数的操作不放在try catch快中,编译就会出错
然后就又搜了搜,发现百度知道上一个哥们回答的很不错,特此转载
-------------------华丽的分割线-----------------------------------------------------------------------------------------------------------------------
有一类特殊的异常叫“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,就相当于实现了“喊一声”的功能。
  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值