Java语言中的异常体系中,令人混淆的莫过于Exception和RuntimeException之间的区别。
简言之,前者及其子类(非从RuntimeException类继承)称为Checked Exception,即受检查异常。而后者及其的子类称为Unchecked Exception。
所谓Checked Exception就是需要用try..catch..语法进行捕获的异常,这类的异常如果不用该语法构造捕获的话,编译器会提示编译错误;而后者则可用也可不用try..catch..进行捕获。RuntimeException可以用catch (Exception)的语法进行捕获。
事实上,有些人以为既然RuntimeException及其子类,如NullPointerException,ArrayIndexOutOfBoundsException等既然不需要用try..catch..进行强行捕获,则不需要捕获。这种思想是由于受到Java语言构造的一知半解所致。实际编程工作中,有不少RuntimeException是需要捕获的,否则就会造成程序崩溃。