异常的作用:得知程序出错的位置(stackTrace)、出错原因(可以传字符串进去进行说明)。
异常也是类,构造器可以传入参数,作为说明。具有体系结构,具有属性和方法(printStackTrace、getMessage、toString),可以被继承从而自定义异常类。
发生异常就是创建了一个异常对象并抛出,此时程序的执行就会终止。
Throwable
- Error(程序的绝症)
- Exception(程序的小毛病)
- RuntimeException
- 编译期异常(Exception中除了RuntimeException之外的异常,并没有统一的名字)
为什么运行期异常可以不处理,而编译期异常必须处理?这两种异常有本质区别吗?
- Runtime exceptions比较常见,如果必须处理,代码就会非常臃肿。
- Runtime exceptions are supposed to be fatal programming errors(空指针、数组越界、类型转换失败、分母为零), so it's better to let the program crash right away.
- One of the distiguishing features of a run-time exception is, that it is unexpected (you don't really expect there to be a bug in your program, right?)
异常的处理:
- throws:自己不处理,向 caller 抛出异常(注意不要丢掉字母 s)
- try - catch - finally:捕获异常并处理
处理之后就不会报错,程序不会终止,后面的代码也会继续执行。
只要jvm没有停止,即使catch 里有return,也会执行finally里面的代码。
子类不能抛出父类没有的异常
自定义异常
自定义的异常类只要写构造器就好,传入对异常的说明信息即可。打印stackTrace可以由继承来的方法完成。
利用 if 判断和 throw 关键字抛出自定义的类。
网友评论