接着昨天的SimpleDateFormat来说,先看一段代码:
- package com.anjoyo.day1124;
- import java.text.SimpleDateFormat;
- import java.util.Calendar;
- import java.util.Date;
- public class TestRuntimeException {
- public static void main(String[] args) {
- Date d = new Date();
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss E");
- System.out.println(sdf.format(d));//2012/11/24 08:23:10 星期六
- Calendar c = Calendar.getInstance();
- System.out.println(sdf.format(c));
- /* 运行程序,会抛出异常:
- * Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Date
- at java.text.DateFormat.format(DateFormat.java:281)
- at java.text.Format.format(Format.java:140)
- at com.anjoyo.day1124.TestRuntimeException.main(TestRuntimeException.java:13)
- * */
- }
- }
昨天有同学说我可以把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,所以我们调用这样的方法的时候可以处理可以不处理。
转载于:https://blog.51cto.com/632977922/1069358