开发中的两个道理: * \6 w* ^, P6 L' `& q
①如何控制try的范围:根据操作的连动性和相关性,如果前面的程序代码块抛出的错误影响了后面程序代码的运行,那么这个我们就说这两个程序代码存在关联,应该放在同一个try中。 ) E4 W2 F. p7 J3 T: }( F q( o
① 对已经查出来的例外,有throw(积极)和try catch(消极)两种处理方法。
9 L/ r" X+ N9 \1 p9 ~4 h" }- Z" ?0 F对于try catch放在能够很好地处理例外的位置(即放在具备对例外进行处理的能力的位置)。如果没有处理能力就继续上抛。
. q/ }- O8 |7 R5 C/ ]- |( g- T
$ H. N4 _- |4 K' w, V当我们自己定义一个例外类的时候必须使其继承excepiton或者RuntimeException。 4 F1 g5 r% R* r) e
Throw是一个语句,用来做抛出例外的功能。
" |0 a( }6 R4 b# m. _3 Q, j而throws是表示如果下级方法中如果有例外抛出,那么本方法不做处理,继续向上抛出。
2 O+ r% a* {; J, s! mThrows后跟的是例外类型。 , ]+ H( i, e- z, \) g# k
断言是一种调试工具(assert)
8 \/ f n5 G$ V2 O其后跟的是布尔类型的表达式,如果表达式结果为真不影响程序运行。如果为假系统出现低级错误,在屏幕上出现assert信息。
% H: o, @3 @- y) ~+ yAssert只是用于调试。在产品编译完成后上线assert代码就被删除了。
5 c$ a- l: j. \ - y3 r+ R* R" K
方法的覆盖中,如果子类的方法抛出的例外是父类方法抛出的例外的父类型,那么编译就会出错:子类无法覆盖父类。 7 g, k* U% a+ s$ d- x/ g0 A
结论:子类方法不可比父类方法抛出更多的例外。子类抛出的例外或者与父类抛出的例外一致,或者是父类抛出例外的子类型。或者子类型不抛出例外。 0 |: H4 ?7 a# ?, U
如果父类型无throws时,子类型也不允许出现throws。此时只能使用try catch。 4 |+ |0 t4 u1 N& A) D
" E. B, X' G6 A7 P/ ]练习:写一个方法:int add(int a,int b) " m2 u, c' w# h5 {3 c
{
# B6 H6 z( o2 R' L$ F return a+b;
& u1 `, h. l( v G8 g}
0 F( Y/ }* ?; e) N当a+b=100;抛出100为异常处理。 |