[size=medium]异常匹配:
1、抛出异常的时候,异常处理系统会按照你书写代码的顺序找出“最近”的处理程序。
2、找到匹配的处理程序之后,它就认为异常将得到处理,然后就不再继续查找。
3、如果你把捕获基类的catch子句放在最前面,就会把派生类的异常全给“屏蔽”掉,产生编译错误。
异常的限制
a、当你重载方法的时候,你只能抛出在父类方法的异常说明里列出的那些异常,或者不抛出任何异常。
b、这个限制很有用,因为这样的话,对父类能工作的代码应用到子类对象的时候,一样能够工作,异常也不例外。
c、异常限制对构造函数不起作用。可以抛出任何异常,而不必理会基类构造函数的异常说明。
(1)、尽管在继承过程中,编译器会对异常说明做强制要求,但异常说明本身并不属于方法原型的一部分,方法原型是由方法的名字与参数的类型组成的。
(2)、在继承和重载的过程中,方法的“异常说明的接口”不是变大了而是变小了……这恰好和类接口在继承时的情形相反。
RuntimeException是一个特列。对于这种异常类型,编译器不需要异常说明
[/size]
1、抛出异常的时候,异常处理系统会按照你书写代码的顺序找出“最近”的处理程序。
2、找到匹配的处理程序之后,它就认为异常将得到处理,然后就不再继续查找。
3、如果你把捕获基类的catch子句放在最前面,就会把派生类的异常全给“屏蔽”掉,产生编译错误。
异常的限制
a、当你重载方法的时候,你只能抛出在父类方法的异常说明里列出的那些异常,或者不抛出任何异常。
b、这个限制很有用,因为这样的话,对父类能工作的代码应用到子类对象的时候,一样能够工作,异常也不例外。
c、异常限制对构造函数不起作用。可以抛出任何异常,而不必理会基类构造函数的异常说明。
(1)、尽管在继承过程中,编译器会对异常说明做强制要求,但异常说明本身并不属于方法原型的一部分,方法原型是由方法的名字与参数的类型组成的。
(2)、在继承和重载的过程中,方法的“异常说明的接口”不是变大了而是变小了……这恰好和类接口在继承时的情形相反。
RuntimeException是一个特列。对于这种异常类型,编译器不需要异常说明
[/size]