java开发过程中,我们很难保证程序每次都能正常运行,当程序运行出错时是一种很槽糕的开发体验。我们通常希望代码崩溃后能恢复到一种稳定的状态或者给出人性化的提示,指出具体的错误。因此,java提供了异常处理机制,给开发者反馈出错误的原因。
异常处理可以保证出现错误后,控制接下来的程序流程,是选择定位错误信息,还是抛出异常或捕获异常、还是避免程序非正常退出,都取决于程序开发者。
根据异常的不同可以大致分为Error和Exception两类,他们都继承于Throwable 类
其中Error是虚拟机生成并抛出的,Error发生通常表示发生了严重的问题,超出了程序员可处理的范围。比如:
1、Java虚拟机运行错误(VirtualMachineError)
2、内存耗尽错误 (OutOfMemoryError)
3、类定义错误(NoClassDefFoundError)
4、链接错误(LinkageError)
这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。
而Exception通常是程序自身导致的异常,是可预料到的异常。这些异常又可以分为CheckedException和UnCheckedException两种。
1、CheckedException:(编译时异常) 需要用try——catch显示的捕获,对于可恢复的异常使用CheckedException。
2、UnCheckedException(RuntimeException):(运行时异常)不需要捕获,对于程序错误(不可恢复)的异常使用RuntimeException。
这样划分的原因也很简单,因为有一些异常是程序员自身开发导致的,比如空指针异常和数据越界异常。这些异常本不应该发生,可以通过编码来避免的,所以java开发时不会强制要求捕获。
另一种异常是不在程序员开发可控的,有可能会出现,所以必须要捕获。比如:往文件中写入数据时文件不存在,发生IO异常;操作数据库时发生SQL异常,这些都是有可能出现意外的地方,java无法给出保证,所以强制要捕获。