概念:程序执行过程中的意外的结果.java中使用java.lang.Throwable表示异常的顶层的类.
概念:java语言中异常(Exception)和错误(Error)的父类.通常在程序开发很少直接处理Throwable.异常可以直观的反馈出程序当时出现的问题(异常的信息,以及异常的位置),程序员可以通过分析异常信息解决程序中的问题.方便对于程序的维护.
概念:是Throwable的子类,开发中不建议处理的错误.当Error出现,通常表示当前的程序执行的环境出现了问题.比如栈溢出,内存溢出.
概念:是Throwable的子类,程序中需要进行捕获和处理的异常.常见的异常:NullPointerException表示空指针异常.IndexOutOfBoundsException下标越界的异常.
原则:java中异常的处理的基本原则:能处理就处理,不能处理抛给调用者.
//使用throws声明该方法可能出现异常1或者异常n
//如果方法出现声明的异常,会自动将该异常抛给调用者
//如果方法中有检测异常的存在,就必须使用throws进行声明
访问修饰符 返回值类型 方法名(参数类型列表) throws 异常1,..,异常n{
}
try{
//可能发生异常的代码
}catch(Exception1 e){
//如果try块中抛出了Exception1的实例,执行该catch语句
}catch(Exceptoin2 e){
//如果try块中抛出了Exception2的实例,执行该catch语句
}
注意
1. catch中声明的异常范围由小到大
2. 如果出现异常catch语句只会执行一个
3. jdk7.x提供了catch的优化的写法.如果是兄弟关系的异常可以使用|隔开.
4. 如果catch中不能处理该异常,必须使用throw关键字将该异常的实例抛给调用者.
- throw抛出检测异常的实例,必须在方法中使用throws声明该异常
- throw抛出运行时异常的实例,方法中使用throws声明不是必须的
经典面试题:throw和throws的区别?
- throws是在方法声明中使用,表示该方法可能出现的异常,多个异常使用逗号隔开,具备将异常的实例抛给调用者的功能.
- throw 在程序中抛出一个异常的实例.
特点:配合try块,表示总是执行的概念.finally中定义的代码不管是否出现异常总是会执行.
try{
//开启了物理资源 //物理资源必须手动释放
//操作资源
}catch(Exceptoin e){
//捕获异常,对异常进行处理或者提供额外功能
throw e;
}finally{//finally中的代码总是执行
//释放资源
}
注意
1. try块不能独立存在,后面必须定义catch或者finally,二者可以只有一个,或者同时存在,catch块可以定义多个,finally最多只能有一个
2. finally总是执行,除非JVM终止,不推荐在finally中使用return关键字
3. finally中通常用于释放物理资源(IO流/Connection对象)
概念:根据业务需求定义的业务相关的异常.(用户名密码错误/字符串格式正确),自定义异常是对Java异常体系一种补充.