接着昨天的SimpleDateFormat来说,先看一段代码:

 

 
  
  1. package com.anjoyo.day1124;  
  2.  
  3. import java.text.SimpleDateFormat;  
  4. import java.util.Calendar;  
  5. import java.util.Date;  
  6.  
  7. public class TestRuntimeException {  
  8.     public static void main(String[] args) {  
  9.         Date d =  new Date();  
  10.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss E");  
  11.         System.out.println(sdf.format(d));//2012/11/24 08:23:10 星期六  
  12.         Calendar c = Calendar.getInstance();  
  13.         System.out.println(sdf.format(c));  
  14.         /* 运行程序,会抛出异常:  
  15.          * Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Date  
  16.             at java.text.DateFormat.format(DateFormat.java:281)  
  17.             at java.text.Format.format(Format.java:140)  
  18.             at com.anjoyo.day1124.TestRuntimeException.main(TestRuntimeException.java:13)  
  19.          * */ 
  20.     }  
  21. }  

昨天有同学说我可以把Date类型的数据给格式化,那我能不能把Calendar类型格式化呢?这里我们只要看下api就清楚参数类型,就不多说,下面说下抛出的异常的问题:

这里我们看到,程序在运行前并没有报错或者提示什么的,以后只要看到这样的,并且后面抛出异常的,抛出的异常都是RuntimeException。

RuntimeException是一类特殊的异常,如除0,数组下标越界等。在程序中产生频繁,处理麻烦,如果显示的声明或者捕获将会对程序可读性和效率影响很大,因此系统会自动检测并将它们提交给系统缺省的异常处理程序,所以我们程序员可以不必对其处理。

Exception中除了RuntimeException,其他异常一般需要我们程序员显示的声明或捕获。

看下api文档,比如在IO包中类的close方法,定义如下:

public void close() throws IOException:这种在方法后跟有throws XException的,调用时候必须处理,即处理的了就try catch,处理不了就throws。

再比如BigDecimal类的abs方法,定义如下:

public BigDecimal abs(MathContext mc):这个方法介绍的最后,有如下说明:

抛出:
ArithmeticException - 如果结果不准确,但是舍入模式为 UNNECESSARY。


这种类型抛出的都是RuntimeException,所以我们调用这样的方法的时候可以处理可以不处理。