1 Error类和Exception类
Error类和Exception类都是继承Throwable类
1.1 Error(错误)
是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正。一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
1.2 Exception(异常)
表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。
Exception又分为两类
- CheckedException:(编译时异常) 需要用try——catch显示的捕获或者直接throws异常。
- UnCheckedException(RuntimeException):(运行时异常)不需要捕获,对于程序错误(不可恢复)的异常使用RuntimeException。
1.3 常见的RuntimeException异常
- NullPointerException - 空指针引用异常
- ClassCastException - 类型强制转换异常。
- IllegalArgumentException - 传递非法参数异常。
- ArithmeticException - 算术运算异常
- ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
- IndexOutOfBoundsException - 下标越界异常
1.4 常见的CheckedException异常
- SQLException
- OException
- ClassNotFoundException
- NamingException,
- ServletException,
我们在编写程序过程中try——catch捕获到的或者直接throws的异常都是CheckedException。
2 throw和throws
2.1 位置不同
- throws 用在函数头上,后面跟的是异常类,可以跟多个;
- throw 用在函数体内,后面跟的是异常对象。
2.2 功能不同
- throws 用来声明异常,让调用者只知道该功能可能出现的问题,可以给出预先的处理方式;
- throw 抛出具体的问题对象,执行到throw,功能就已经结束了,跳转到调用者,并将具体的问题对象抛给调用者。也就是说 throw 语句独立存在时,下面不要定义其他语句,因为执行不到。
- throws 表示出现异常的一种可能性,并不一定会发生这些异常;throw 则是抛出了异常,执行throw 则一定抛出了某种异常对象。
- 两者都是消极处理异常的方式,只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。