异常处理01 Error和Exception 异常 Exception
三种异常:检查行异常、运行时异常、错误(错误不是异常ERROR)
异常处理02 捕获和抛出异常 5个关键字:try、catch、finally、throw、throws
package com.exception;
public class TEST {
public static void main(String[] args) {
int a = 1;
int b = 0;
try{ //try监控区域
System.out.println(a/b);
}catch (Error e){ //cath捕获异常
System.out.println("程序出现异常,变量b不能为0");
}catch (Exception e){ //cath捕获异常
System.out.println("程序出现异常,变量b不能为0");
}catch (Throwable e){ //cath捕获异常
System.out.println("程序出现异常,变量b不能为0");
}finally { //处理善后工作,也可以不需要。
System.out.println("finally");
}
//catch可以有多个
//finally 可以不要finally ,假设是IO资源,这需要finally善后工作关闭
//快捷键: 选中想要测试的内容, CTRL + Alt + T
}
} package com.exception;
public class TEST {
public static void main(String[] args) {
int a = 1;
int b = 0;
try{ //try监控区域
if (b==0){
throw new ArithmeticException(); //主动抛出异常
}
System.out.println(a/b);
}catch (ArithmeticException e){ //catch捕获异常 catch( 想要捕获的异常类型 )
System.out.println("程序出现异常,变量b不能为0");
}finally { //处理善后工作
System.out.println("finally");
}
}
} package com.exception;
public class TEST {
public static void main(String[] args) {
try {
new TEST().test(1,0);
} catch (ArithmeticException e) {
e.printStackTrace();
}
}
//假设这方法中,处理不了这个异常。方法上抛出异常。
public void test(int a, int b){
if(b==0){
throw new ArithmeticException(); //主动抛出异常,一般在方法中使用
}
}
} 异常处理03 自定义溢出和经验小结 自定义异常类步骤:
创建自定义异常类。 在方法中通过throw关键字抛出异常对象 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否者在方法的声明中通过throws关键字指明抛出给方法调用者的异常,继续进行下一步操作。 在出现异常方法的调用者中捕获并处理异常。 package com.exception;
public class TEST {
//可能会存在异常的方法
static void test(int a) throws MyException{
System.out.println("传递的参数为:"+a);
if(a>10){
throw new MyException(a); //抛出
}
System.out.println("OK");
}
public static void main(String[] args) {
try {
test(11);
}catch (MyException e){
System.out.println("MyException=>"+e);
}
}
} package com.exception;
//自定义的异常类,要继承Exception public class MyException extends Exception{
//传递数字>10
private int detail;
public MyException(int a){
this.detail = a;
}
//toString 方法构建 快捷键 ALT+ INSERT
@Override
public String toString() {
return "MyException{" +
"detail=" + detail +
'}';
}
} 经验总结
处理运行时异常,采用逻辑去合理规避同时辅助try-catch处理 在多重catch块后面,可以加一个catch (Excetion) 来处理可能会被遗漏的异常 对于不明确的代码,也可以加上try-catch,处理异常 ,也有快捷键 ALT + ENTER 尽量去处理异常,切忌只是简单地调用printStackTrace() 去打印输出 具体如何处理异常,要根据不同的业务需求和异常类型去决定 尽量添加finally语句块去释放占用的资源