java异常

万恶之源——Throwable,所有的异常都继承自Throwable接口
Throwable有两个儿子,一个是Error,一个是Exception,Error是系统错误,将直接导致程序崩溃(如内存溢出,虚拟机异常,线程死锁),例如工厂的机器设备坏掉,线路断掉无法通电等,Exception仅仅是程序异常,例如工厂的原材料不够了,导致整个工厂无法再正常运转。
 
Exception也有两个儿子,一个是RuntimeException(运行时异常,也称非检测性异常,即便有异常,在编译的时候也不会报错,而是在程序动态运行时才会报错),一个是CheckedException(检测性异常,在编译时就必须手动抛出异常才行)。
 
RuntimeException由java虚拟机自动抛出并自动捕获,常见的有:类转换异常,数组越界异常,空指针异常,算数异常,InputMismatchException等。
 
CheckedException 常见的有ClassNotFindException,IOException,SQLException等。
 
如果出现异常,会阻止当前方法继续执行,程序必须捕获异常,如果不捕获异常就直接报错。一旦捕获异常,就会执行catch块中的代码,程序继续执行。如果当前方法没有捕获,则往外抛出,由调用它的方法进行捕获。
 
如果try语句块里面抛出多种类型的异常,则需要多重catch语句
try{
}catch(){
}catch(){
}finally{
}
捕获异常的顺序很重要,先捕获子类,最后捕获父类
finally语句块在try块的return语句执行完之后,返回给调用者之前执行,也就是先执行return语句,但是不返回,而是先去执行finally中的语句,执行完之后再返回return的值。
 
throws: 向上级抛出异常
 public void foo() throws Exception{
}
 
throw:将产生的异常抛出
if(n=0){
         throw new Exception("除数不能为0");
}
原文地址:https://www.cnblogs.com/james111/p/6607408.html