在Java中,Exception和Error都是Throwable的子类,不同之处在于它们的严重性和程序员处理它们的方式不同。
异常是程序运行中发生的事件,它们可以被程序员预见并且被捕获处理,而错误通常指出存在于应用程序以外的严重问题,例如系统崩溃、虚拟机错误,它们通常是程序员无法预料和控制的,是无法处理的。
Exception(异常):
通常由程序的某些操作引发,比如用户输入错误、文件不存在等。
应用程序应该捕获并适当处理。
分为两类:Checked Exception(受检异常),如IOException,必须显式捕获或在方法签名中声明;就是编译器要求你必须处置的异常。不知道你编程的时候有没有遇到过,你写的某段代码,编译器要求你必须要对这段代码try…catch,或者throws exception,如果你遇见过,没错,这就是检查异常,也就是说,你代码还没运行呢,编译器就会检查你的代码,会不会出现异常,要求你对可能出现的异常必须做出相应的处理。Unchecked Exception(未检异常),如NullPointerException和IndexOutOfBoundsException,通常是程序逻辑错误,无法预见,只能在运行时才能检查出来,比如空指针,通过更改代码来避免。
Error(错误):
通常表明严重的问题,如虚拟机运行错误(VirtualMachineError)、OutOfMemoryError或StackOverflowError、NoClassDefFoundError,这些错误通常不允许程序捕获,程序员也几乎无法进行处理。且通常表示程序无法正常继续执行。
应用程序不应该尝试捕获错误,通常是致命的,应该避免发生。
处理方式:
对于Exception,编写异常处理代码(try-catch-finally块)来优雅地处理可能发生的情况。
对于Error,通常建议让程序终止,并根据错误的类型对系统进行调整,修复导致错误的根本原因。