1、捕获(主动处理):try、catch、finally
语法:try{可能会出现异常的代码}catch(要捕获的异常类型1 变量名){ 如果出现对应异常所执行的代码}catch{...}...
catch需要注意的点
1、catch中捕获的异常类型必须与出现异常的类型一致(大于等于),否则相当于没有处理异常
2、catch中的异常类型可以捕获多个,注意:捕获异常的顺序是从小到大
3、捕获异常的时候,可以捕获最大的异常Exception
finally的特点:
1、无论代码是否出现异常,都会执行finally中的代码
2、一般在finally写,释放资源的代码
3、如果方法中出现return关键字,finally依旧会执行,(但如果调用System.exit(0);那么finally不会再执行
4、try、catch、finally使用语法:
try{...}catch(){...}一起使用
try{...}catch(){...}catch(){...}一起使用
try{...}finally{...}一起使用
try{...}catch(){...}catch(){...}finally{...}一起使用
finally不能单独使用
5、捕获异常 代码执行的顺序
先执行try中的代码
1、没有异常,正常执行完整个程序
2、有异常,就会执行对应catch语句块。而try后面的代码就不会再执行
2、抛出(被动处理):
1、在方法上声明 throws
语法:public void show() throws 异常的类型1,异常类型2{}
特点:
1、如果在方法上声明异常,那么方法的调用者就要进行处理
2、如果异常声明在了main方法上,实际上就是给JVM处理(那就是没有处理)
3、声明异常可以声明多个
场景:
1、当前无法对异常进行处理的时候,就可以把异常抛给方法的调用者
2、现在如果代码出现异常(直接try、catch)
特殊案例:
如果在main方法上声明(抛出)异常,那么这个异常就交给了main方法的调用者,而main方法的调用者是JVM,所以这个异常并没有处理
2、在方法内部抛出 throw
语法:throw 异常对象;
特点:
1、如果抛出运行期异常,那么直接抛出即可
2、如果抛出编译期异常,那么需要在方法上声明抛出
3、总结:
1、运行期异常,可以利用逻辑判断解决(避免)
2、编译器异常,必须要解决 现在如果代码出现异常(直接try、catch)