Java提供了两类主要的异常:runtime exception和checked exception。所有的checked exception是从java.lang.Exception类衍生出来的,而runtime exception则是从java.lang.RuntimeException或java.lang.Error类衍生出来的。checked 异常也就是我们经常遇到的IO异常,以及SQL异常都是这种异常
但是另外一种异常:runtime exception,也称运行时异常,我们可以不处理
。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去
处理过NullPointerException异常
,它就是运行时异常,并且这种异常还是最常见的异常之一。
以前一直没仔细想过出现运行时异常了系统会怎样工作
,最近在一个模块排错时,才无意中发现了系统是如何处理运行时异常
。出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码
。如果没有处理块,到最上层,如果是多线程就由Thread
.run()抛出,如果是单线程就被main()抛出。抛出之后
,如果是线程,这个线程也就退出了。如果是主程序抛出的异常
,那么这整个程序也就退出了。
* Runtime exceptions:
在定义方法时不需要声明会抛出runtime exception;
在调用这个方法时不需要捕获这个runtime exception;
runtime exception是从java.lang.RuntimeException或java.lang.Error类衍生出来的。
* Checked exceptions:
定义方法时必须声明所有可能会抛出的checked exception;
在调用这个方法时,必须捕获它的checked exception,不然就得把它的exception传递下去;
checked exception是从java.lang.Exception类衍生出来的。
在定义方法时不需要声明会抛出runtime exception;
在调用这个方法时不需要捕获这个runtime exception;
runtime exception是从java.lang.RuntimeException或java.lang.Error类衍生出来的。
* Checked exceptions:
定义方法时必须声明所有可能会抛出的checked exception;
在调用这个方法时,必须捕获它的checked exception,不然就得把它的exception传递下去;
checked exception是从java.lang.Exception类衍生出来的。