在现实中充满了不良的代码和有错误的代码,在程序运行时,由于一些错误或其他外部环境的影响造成用户数据的丢失,用户就可能不在使用这个程序了。为解决这些问题,Java使用一种称为异常处理的错误捕获机制处理。
一、异常分类
在Java中,异常对象都是派生于Throwable类,上图即为Java中的异常层次结构图。
Error类描述了Java运行时系统的内部错误和资源耗尽错误。应用程序不应该抛出这种类型的异常。
在设计Java程序时,需要关注Exception层次结构。这个层次分为也分为2个分支,由图可以看出。
由程序错误导致的异常属于RuntimeException;而程序本身没问题,但由于像IO错误这类问题导致的异常属于其他异常。
Java语言规范中有2个重要的概念:非受查异常(unchecked)和受查异常(checked)。
编译器将检查是否为所有的受查异常提供异常处理器。
二、方式
1.通过throws声明受查异常
在方法首部声明所有可能抛出的异常
如果调用了一个抛出受查异常的方法,就必须对他进行处理,或者继续传递。
注:子类覆盖超类方法时,子类中声明的受查异常不能比超类方法中声明的异常更通用。(子小于父)
2.抛出异常
throw抛出异常。一旦方法抛出了异常,这个方法就不可能返回到调用者。
3捕获异常
try,catch语句。注意有多个catch时的书写顺序,应该将范围小的写在上方
当代码抛出一个异常时,就会终止方法中剩余代码的处理,并退出这个方法的执行。要想一些方法在退出前得到处理,就使用finally子句。
三、断言
在一个具有自我保护能力的程序中,断言很常用。断言机制允许在测试期间向代码中插入一些检查语句。当代码发布时,这些插入的检测语句会被自动移走。
写法:
关键字assert 条件;
或者 assert 条件:表达式;
如果结果为false,则抛出一个AssertionError异常
默认情况下,断言被禁用。可以用 java -ea命令进行启用,启用或禁用断言时不必重新编译程序。