01异常分类
分三类:
-
检查性异常:用户错误或问题引起的异常
-
运行时异常:
-
错误ERROR:
-
Error:灾难性的致命的错误
-
Error类对象由Java虚拟机生成并抛出,大多与代码编写者所执行的操作无关
-
-
Exception:可以被程序处理
-
可分为运行时异常(RuntimeException)和非运行时异常,详见上图
-
02 异常处理机制
异常处理的五个关键字:try,catch,finally,throw,throws
try...catch...finally:捕获异常
public class Test { public static void main(String[] args) { int a=1; int b=0; try{//try监控区域 new Test().a(); System.out.println(a/b); }catch(ArithmeticException e1){ System.out.println("ArithmeticException"); }catch(Exception e2){ System.out.println("Exception"); }catch(Throwable e3){ System.out.println("Throwable"); } finally{//处理善后工作,无论有无异常都会执行 System.out.println("finally"); } //要捕获多个异常,从小到大去捕获 //可以不要finally,假设有IO流,资源关闭的操作在finaaly内 } public void a(){ b(); } public void b(){ a(); } }
throw throws:抛出异常
public class Test2 { public static void main(String[] args) { //快捷键:Ctrl+Alt+T try { new Test2().test(1,0); } catch (ArithmeticException e) { e.printStackTrace(); } } //throws:假设方法中处理不了这个异常,可通过throws抛出异常 public void test(int a,int b) throws ArithmeticException { if (b==0){//主动抛出异常 throw throw new ArithmeticException(); } System.out.println(a/b); } }
03自定义异常
使用自定义异常的步骤:
-
创建自定义异常类
-
在方法中通过throw抛出异常对象
-
try..catch...在方法中处理异常,或在方法声明处通过throws将异常抛出给方法调用者处理
-
在出现异常的方法调用者中捕获并处理异常
自定义异常类:MyException
public class MyException extends Exception{ //传递数字>10 private int detail; public MyException(int a){ this.detail=a; } //toString:异常的打印信息 @Override public String toString() { return "MyException{" + "detail=" + detail + '}'; }
测试:
public class Test {
public static void main(String[] args) {
try {
test(11);
} catch (MyException e) {
System.out.println("MyExceotion=>"+e);
}
}
//可能存在异常的方法
static void test(int a) throws MyException {
System.out.println("传递的参数为:"+a);
if(a>10){
throw new MyException(a);//抛出异常
}
System.out.println("OK");
}