对于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,就相当于实现了“喊一声”的功能。