目录
1、种类(两种)
1. 错误(Error): 由于硬件问题或者系统本身问题引起的,程序无法处理
2. 异常(Exception): 由于程序设计的不周全或者外部输入引起的问题,程序可以处理。
2、Java异常处理机制
1. Java程序如果在运行时产生了异常,就会将这些异常信息封装在一个对象中,然后传递给jre,--称之为捕捉异常
2. Jre接收到该异常对象之后,就会分析该异常的种类并查找能够处理这一异常的程序代码,处理完了之后程序继续往下运行,--称之为处理异常
3. Jre如果找不到处理该异常的程序代码,jre就会终止运行,相应的应用程序就会退出运行。
3、Java异常处理方式
try{
存放产生异常的程序代码//每次只能捕捉一个异常
}catch(XxxException e){
1~n个,每个catch块只能处理一个异常
存放处理异常的程序代码(处理异常是指获得异常产生的原因及异常信息)
}finally{
永远被执行
存放释放对象或者关闭资源的程序代码
只能放在最后面
}
注意:假设我们的代码中使用的try catch进行异常的捕获,如果在catch中没有throw抛出异常,在try catch之外的代码依旧是可以正常运行的
catch代码块对产生的异常有三种处理方式
获得异常的原因:通过异常对象的e.getMessage()方法
将异常信息写入到日志文件中 logger.error()方法
将异常信息显示给用户查看
throws: 在方法声明中表明方法在运行时可能会产生异常以及异常的类别, 由方法的调用者进行处理
throw:抛出一个具体的异常对象给jvm(后面的话就必须用异常处理)
4、Java异常的结构及种类
Exception: 所有异常处理类的父类
常见的异常类型
1、运行时异常:编译时可以通过, 但是在运行时会出错 RuntimeException,又称为未检验的异常
2、算术异常:ArithmeticException
3、类型转换异常:ClassCastException 对象转换成其他类类型时
4、数组越界异常:ArrayIndexOutOfBoundsException
5、空指针异常:NullPointerException 对空对象进行操作
避免空指针异常:在对取得的对象或者数据进行操作之前先进行为空判断(可以先假设为空和不为空进行判断,判断完再进行操作)
6、IO异常(已检验异常):应用程序与外部设备的数据的读写异常(IOException),如果不对该异常进行处理,则编译无法通过,又称为已检验的异常
7、被操作的文件不存在:FileNotFoundException
8、读取文件内容异常:EOFException
9、寻找异常的源头:Throwable类的printstackTrace()
方法覆盖时的异常处理
。如果父类方法没有申明抛出异常,子类覆盖方法只能增加抛出为检验的异常
。子类覆盖方法申明抛出的异常必须是父类被覆盖方法抛出的异常的子类
。子类覆盖方法声明抛出的异常只能是父类被覆盖方法抛出的异常的子集