异常是指程序运行时(非编译)所发生的非正常情况或错误,当程序违反了语言规则,jvm就会将出现的错误表示一个异常抛出。
异常也是java的对象,定义java.lang.throwable作为异常父类。这些异常又包括error和exception两大类。常见的error如栈溢出。
error类异常主要是运行时逻辑错误导致,一个正确程序中是不应该出现error的。当出现error一般jvm会终止。
exception表可恢复异常,包括检查异常和运行时异常。检查异常是最常见异常比如IO异常、sql异常,都发生在编译阶段(这点需要仔细考虑),这类异常IDE一般会提示,可以通过try、catch捕捉。
而运行时异常,编译器没有强制对其进行捕捉和处理。一般都会把异常向上抛出,直到遇到处理代码位置,若没有处理块就会抛到最上层,多线程用thread.run()抛出,单线程用mian()抛出。常见的运行时异常如上图所示:空指针异常、类型转换异常、数组越界异常等等。
注意:RuntimeException不需要捕获