异常——异常处理机制
- 抛出异常
- 捕获异常
- 异常处理五个关键字
- try、catch、finally、throw、throws
异常范围及分类:
快捷键,选中语句,按下Ctrl+Alt+T:
package(包)com.du.exception.demo01:类Test(异常处理机制)
package com.du.exception.demo01;
public class Test {
public static void main(String[] args) {
int a = 1;
int b = 0;
//单纯输出a/b时会出现异常
//System.out.println(a/b);//异常:Exception in thread "main" java.lang.ArithmeticException: / by zero
//以下结构中,try{}、catch{}是必须存在的,finally{}可以不写
try{ //try监控区域
System.out.println(a/b);//假设在try中调用a():new Test().a();//此时无法捕获到此异常,但是finally还是会执行,打印出“finally!”之后再进行异常抛出。可以catch改成catch(Throwable e){}即可捕获了。
}catch (ArithmeticException e){ //catch(想要捕获的异常类型) 捕获异常
System.out.println("程序出现异常,变量b不能为0");
}finally { //处理善后工作
System.out.println("finally!");
}
//finally可以不要,假设有IO流、资源等要关闭可放在finally中
/*支持以下语法:
try{
}catch(异常范围小){
}catch(异常范围中){
}catcah(异常范围大){
}finally{
}
* */
Test test = new Test();
test.test(1,0);//会抛出异常ArithmeticException
Test test2 = new Test();
//捕获异常
try {
test2.test2(1,0);
} catch (ArithmeticException e) {
throw new RuntimeException(e);
}
}
public void a(){b();}
public void b(){a();}
public void test(int a,int b){
if(b == 0){//抛出异常 throw
throw new ArithmeticException();//主动抛出异常,一般在方法中使用
}
}
//假设这个方法中处理不了这个异常。主动在方法上抛出异常 throws
public void test2(int a,int b) throws ArithmeticException{
if(b == 0){//主动在方法内抛出异常 throw
throw new ArithmeticException();//主动在方法内抛出异常,一般在方法中使用
}
}
}
package(包)com.du.exception.demo01:类Test2(异常处理机制)
package com.du.exception.demo01;
public class Test2 {
public static void main(String[] args) {
int a = 1;
int b = 0;
//快捷键: Ctrl + Alt + T
try {
System.out.println(a/b);
} catch (Exception e) {
throw new RuntimeException(e);//打印错误信息
} finally {
}
}
}