---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
5.1. 异常体系
Java.lang
|--Object
|--Throwable
|--Error
|--Exception
|--RunntimeException
5.2.throw和throws的区别
Throws:自动抛出,在函数后调用,抛给调用者,可以抛出对此,最终抛出给虚拟机,由虚拟机调用printStackTrace()方法,程序停止。
Throw:使用在函数内部,后面跟异常对象,使用时除了RunntimeException以外,要在函数上声明抛出异常。
5.3. 两种异常
编译时异常:编译时候被检查,如果没有进行处理,编译失败,当处理异常发生位置,进行处理,跳出函数(函数后面的语句不再执行),程序继续运行。
运行时异常:编译时候不被检查,异常发生建议让程序停止,修改代码
自定义异常:
1. 必须继承Exception、RunntimeException类(Exception体系中有一个特殊的功能,异常类和对象被抛出,这个是Throwable类中的特性,只有该类及子类才能调用 throw和throws)
2. 继承了Exception中的所有方法super()
RunntimeExcpetion:
1. 如果在函数内部抛出了,那么函数上不用声明,编译一样通过
2. 如果在函数上声明了该类异常,调用时候,不用进行处理
3. 如果自定义异常发生,无法继续执行,那么就让他继承RunntimeException,程序终止,修改代码
RunntimeExcpetion为什么用生命异常?
因为该类异常不需要调用者进行处理,当异常发生的时候,程序停止,因为在运行的时候发生了无法继续运算的情况,希望程序停止后,对代码进行修改。
5.4. 异常的几种格式
Try{}catch(){}
Try{}catch(){}catch(){}
Try{}catch(){}finallu{}
Try{}finally{}
Finally:定义一定会执行的代码,通常用于关闭资源。
多异常处理:
try{}catch(){}catch(){}…..
异常不会同时发生,一旦发生程序就会跳转到catch中进行处理,函数中,发生异常的语句下面的代码不再被执行,对方声明几个一异常,就对应几个catch块,如果多个异常存在继承关系,父类放在后面。
子类覆盖父类的方法:
1.不抛异常
2. 抛父类的异常
3. 抛父类异常的子类
4. 如果子类产生其他异常,用catch
5. 如果父类抛出多个异常,子类抛出父类异常的子集
6. 如果父类方法没有异常,方法覆盖时,子类不可抛异常,如果有异常出现,用catch
5.5. 附加问题
1.finally什么情况会读不到?
在System.exit(0)的时候,程序退出,不读finally
2.异常的好处?
将问题封装,将程序代码和异常代码分离,方便阅读
---------------------- ASP.Net+Unity开发、 .Net培训、期待与您交流! ----------------------详细请查看: www.itheima.com