异常是对问题的描述,将问题对象进行封装成一个对象.java
Throwable
|—–Error
|—–Exception
|—–RuntimeException
特色:异常体系中的全部类以及创建的对象都具有可抛性.也就是说能够被throw和throws关键字所操做,只有异常类体系具有这个特色,markdown
throw定义在函数内,用于抛出异常对象
throws定义在函数上,用于抛出异常类,能够抛出多个用逗号隔开的异常类函数
当函数内容有throw抛出异常对象,并未进行try处理,必需要在函数上声明,不然编译报错.固然RuntimeException除外,也就是说,函数内若是抛出RuntimeException异常,函数上不须要声明.spa
若是函数声明了异常,调用者须要进行处理,处理方法能够是throws和try
异常有两种:
编译时被检测异常
该异常在编译时,若是没有处理(没有抛出也没有try),编译失败
运行时异常(编译时不检测)
在编译时不须要处理,编译器不检查
该异常发生,建议不处理,让程序中止,须要对代码进行修正.code
try{
//须要被检测的代码
}
catch(){
//处理异常的代码
}
finally{
//必定会执行的代码
}
注意:
1.finally中定义的一般是 关闭资源代码,由于资源必须释放
2.finally只有一种状况不会执行,当程序在finally以前强行中止,也就是System,exit(0)对象
定义类继承Exception或者RuntimeException
1.为了让该自定义类具备可抛性
2.让该类具有操做异常的共性方法继承
当要定义的自定义异常信息时,可使用父类已经定义好的功能.异常信息传递给父类的构造函数.接口
class MyException extends Exception {
MyException(String message){
super(message);
}
}
自定义异常:按照java面向对象的思想,将程序中出现的特有问题进行封装.资源
1.调用到抛出异常的功能时,抛出几个就处理几个.也就是一个try对应多个catch
2.多个catch状况下,父类的catch放到最下面,以避免覆盖异常
3.catch内须要定义针对性的处理方式,不要简单的定义输出语句,也不要不写,这是良好的代码习惯编译器
在子父类覆盖时: 1.子类抛出的异常必须是父类的异常的子类或者子集 2.若是父类或者接口没有异常抛出时,子类覆盖出现异常,只能try,不能抛出