异常的产生、处理
捕捉异常
try { 可能有异常的代码序列 } [catch(异常类型1 变量) { 处理的代码1 }]* [finally { 必然执行的代码 }]?
说明:
1. 必须至少有一个catch或finally,不能只有try的部分。 try-catch-finally 语句可以进行嵌套。
2. 当在 try子句、catch子句、finally子句 中某行代码发生异常时(且这个异常没有被处理掉),程序均不会再执行该子句中发生异常那一行后面的代码,然后将异常从本子句中抛出。
3. try子句中抛出来的异常,会被后续的一系列catch中的异常类型进行依次匹配,如果与抛出的异常类型是赋值兼容的,就进入这个catch子句进行处理(相当于这个catch子句吃掉了这个异常)。
4. catch子句中新抛出来的异常不会再被这个catch子句后面的catch匹配,因为这些ctach只会匹配前面的try中抛出的异常。
5. 在任何情况下(不管try、catch是否执行异常),都会执行finally语句。
6. try子句、catch子句、finally子句 均可以抛出异常,其中特殊的是try子句抛出的异常可能会被后面的catch子句吃掉,而 catch子句和finally子句抛出的异常则必然还会继续向更外层抛出。这些没有被吃掉的异常,在执行了finally子句后,才会向更外层抛出,最终抛出的那个异常是最近产生的那个异常。(比如前面已经有异常没处理了,并且在finally中又产生了新的异常,则最后抛出的是finally中产生的这个异常)
在代码中抛出异常: throw [异常对象名 | new 异常类型名(...)] ;
这个throw类似于return,一旦执行,其后面的代码将不再运行。
在方法声明时抛出异常: .... 方法名(...) throws 异常类型名1 [, 异常类型名n]* [ ;|{方法体} ]
表示这个方法中可能有异常会抛出,调用这个方法的地方必须捕捉这些异常或继续向更外层抛出。
异常类型
所有自定义的异常类型,必须是 Throwable 类的直接或间接子类。大部分情况下,程序员自定义类型都是继承 Exception 。
Error类型及其子类一般表示系统或环境错误,这种错误一般是程序员处理不了的。
运行时异常: 是指在运行的时候才可能发生的异常,如 除数为0,访问null的属性,数组下标越界...。一般是程序设计不当造成,可以根据报错提示完善程序。
检查型异常: 也称非运行时异常,是指那些由程序员手动调用 throw语句 或 在方法上使用throws抛出的异常处理。这类异常仍然发生在程序运行时,但编译器会做静态检查,要求必须处理所有可以出现异常的地方。
标签:Java,处理,抛出,try,finally,子句,catch,异常 From: https://www.cnblogs.com/xiafl/p/17334915.html