异常认识
异常是什么 :
Java异常是Java提供的一种识别及响应错误的一致性机制。是对问题的描述,将问题进行对象的封装。
异常的好处:
Java异常机制可以使程序中异常处理代码和正常业务代码分离,在有效使用异常
的情况下,异常能清晰的回答what,where,why这3个问题:异常类型回答了“什么
”被抛出,异常堆栈跟踪回答了“在哪“抛出,异常信息回答了“为什么“会抛出。
异常两大体系:
Throwable (所有异常都是从Throwable继承而来。)
--Error
--Exception
--RuntimeException
Error:
所有编译时期的错误,以及系统错误,均由Error抛出。这些错误表示错误发生
在虚拟机自身,或发生在虚拟机试图执行时,如java虚拟机运行错误(Virtual
MachineError)、类定义错误。这些错误是**不可查**的,因为他们在应用程序
的控制处理能力之外。
Exception: 程序自身可以处理的异常。
Checked Exception:
可检查的异常,发生可预测。除RuntimeException及其子类外,都是CheckException。
UncheckException:
RuntimeException及其子类。如NPE空指针异常,除零算术异常,Error也是。
---
异常体系的特点:
异常体系中的所有类及建立的对象都具有可抛型,也就是说可以被throw和
throws关键字锁操作,只有异常体系具备这个特点。
throw和throws用法:
throw:定义在函数内,用于抛出异常对象;
throws:定义在函数上,用于抛出异常类,可以抛出对个,用逗号隔开。
Java异常机制用到的几个关键字:try、catch、finally、throw、throws。
• try -- 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。
• catch -- 用于捕获异常。catch用来捕获try语句块中发生的异常。
• finally -- finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。
• throw -- 用于抛出异常。
• throws -- 用在方法签名中,用于声明该方法可能抛出的异常。
自定义异常:
-
产生原因:
因为项目中会出现特有的问题,而这些问题并未被java锁描述或封装对象,所以对于这些特有的问题可以按照对java的封装思想,将特有的问题,进行自定义的封装。
-
解决方法:
如果要自定义异常类,则扩展Exception类即可,因此这样的自定义异常都属于检查异常(checked exception)。如果要自定义非检查异常,则扩展自RuntimeException。
自定义的异常应该总是包含如下的构造函数:
- 一个无参构造函数
- 一个带有String参数的构造函数,并传递给父类的构造函数。
- 一个带有String参数和Throwable参数,并都传递给父类构造函数
- 一个带有Throwable 参数的构造函数,并传递给父类的构造函数。
异常处理方法:
通过try...catch语句块来处理:
【注意】:声明几个异常,对应几个catch块,不要定义多余的catch块
,如果多个catch块中的异常出现继承关系,父类异常catch块放在最下
面。
try
{
// 程序代码
}catch(ExceptionName e1)
{
//Catch (捕捉异常,异常会被传到这里)
}
throw或throws抛出到上层处理:
public class Name
{
public void deposit(double amount)
throws RemoteException
{ // Method implementation
throw new RemoteException(); }
//Remainder of class definition}
Finally关键字:
try{
// 程序代码
}catch(异常类型1 异常的变量名1){
// 程序代码
}finally{
// 程序代码
}