异常Exception
程序运行时出现的不正常情况。
异常问题分为俩大类:
1、可以处理的问题
一般用Exception(异常)来进行描述,这个异常可以有针对性的代码处理。
2、重大错误问题
用Error进行描述,这种异常发生后,一般不编写针对性的代码来进行处理,而是对程序进行修改。
声明异常
throws Exception :在功能上标识异常。
若该功能用thrwos Exception来标识异常,那么调用者必须处理该异常信息。
但是该功能声明的异常是一个特殊的异常子类时,调用者可以不对异常进行任何处理。这个异常是RuntimeException(运行异常)
两种处理异常的方式
1、try { } catch { }
2、同样抛出异常throws Exception
异常分为俩种:
1、编译被检测异常:包括除去Exception子类RuntimeException以外的所有异常。
2、编译时不被检测异常:RuntimeException以及子类。
自定义异常
将特有的问题进行描述,并封装成对象。
步骤:
定义一个类对异常进行描述,该类必须继承异常类(Exception)或运行异常(RuntimeException)。
根本原因:异常体系和其它对象的不同之处在于异常体系都具有可抛性。异常的类和对象都可以被俩个关键字(throws、thorw)所操作,并且只有异常体系具备这个特点。
throws和throw的区别
1、throws作用与函数上,用于该功能容易出现的问题。抛出的异常要被调用者进行处理。
throw 作用在函数内,用于抛出指定的异常对象。
2、throws后跟的时异常类,可以有多个,中间用逗号隔开。
throw 后跟的时异常对象。
只有异常体系的类和对象才可以被这俩个关键字所操作。
finally块
主要用于关闭资源的代码。无论何时都执行(除去System.Exit(0)退出JVM的情况不执行)。
异常处理
1、当子类覆盖父类时,若父类的函数抛出了异常,那么子类覆盖父类要么不抛异常,要么抛出该异常或该异常的子类。
2、若父类抛出了对个异常,子类覆盖父类时,只能抛出这些异常的子集。
简单来说,子类只能抛出父类的异常或异常的子类,子类不可以抛出父类没有的异常。
注:若被覆盖的函数没有异常抛出,那么子类的函数绝对不能有异常抛出。若子类中有异常发生,那么子类只能用try { } catch { }
当try对象对个catch时,若catch的类型包含有继承关系时,那么父类异常的catch必须放在最下方。