异常
异常
异常就是在程序运行时出现的不正常现象,也就是程序运行时出现的问题。问题也是现实生活中一个具体的事物,我们通过java类来对其进行描述,并封装成对象。就是java中的异常类。
出现的问题一种是不可处理的,一种是可处理的。对于不可处理的,通过Error类进行描述。开发中一般不编写针对性的代码对其进行处理。对于可处理的,用Exception来描述,在开发中可以使用针对性的处理方式,进行处理。
Error和Exception有共性的内容,比如不正常信息,引发原因等。就形成了异常体系。
java.lang.Object > java.lang.Throwable >Error ,Exception
异常捕捉 trychatch
异常调用printStackTrace(),将向输出流(默认的是控制台)打印异常信息。信息包括异常名称,异常信息,异常出现的位置。jvm默认的的异常处理机制,就是在调用printStackTrace方法,向控制台输出异常的堆栈跟踪信息。
try
{
需要被检测的代码
}
catch(异常类 变量)
{
处理异常的代码
}
finally
{
一定会执行的语句
}
对捕获到的异常进行常见方法操作:String getMessage() 获取异常信息
异常声明throws
对不可处理的异常,在函数小括号后大括号前,用throws关键字对程序有可能出现的问题进行标识。方便调用者处理。
多异常处理
声明异常时,要尽可能的声明的更具体些,这样处理的就可以更具体。
程序中有多个异常时,声明几个异常,就应该有几个catch块,不要定义多余的catch块,如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。
建议在进行catch处理时,catch中一定要定义具体处理方式。不要简单定义一句e.printStackTrace()。
自定义异常
因为项目中会出现特有的,未被java封装的成异常类的问题,我们可以对这些问题按照java封装问题的思想,对其进行封装。
当在函数内部出现了throw抛出异常对象,那么就必须要给出对应的处理动作。要么在内部捕捉,要么在函数上声明,让调用者处理。一般情况下。函数内部出现异常,函数上需要声明
如何定义异常信息呢?因为父类已经把异常信息的操作都完成了,所以子类只需要在构造时,将异常信息通过super语句传递给父类。就可以直接使用getMessage方法获取自定义的异常信息。
自定义异常必须是自定义类继承Exception。因为异常体系有一个特点,异常类和异常对象都会可以被抛出。即它们都具有可抛性,可抛性是Throwable这个体系中独有的特点。只有这个体系中的类和对象才可以被throws和throw操作。
throw和throws的区别
1、throw使用在函数内,throws使用在函数上
2、throws后面跟的是异常类,可以跟多个,用逗号隔开。throw后跟的是异常对象。
RuntimeException
Exception中的RuntimeException 是运行时异常,如果在函数内抛出该异常,函数上可以不用声明,编译可以通过。如果在函数上声明了该异常,调用者可以不用进行处理,编译可以通过。程序执行RuntimeException后,会停止。自定义异常时,如果该异常的发生使程序无法继续进行运算,就让自定义异常继承RuntimeException。
异常可以分为编译时被检测的异常和运行时异常。运行时异常是RuntimeException及其子类。
异常finally
常用于关流,解锁。
异常的格式
1try{}catch(){}
2try{}catch(){}catch(){}
2try{}catch(){}finally{}
3try{}finally{}
异常覆盖时的特点
子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类,或者不抛。