一、异常结构图
1.检查型异常;
2.运行时异常;
3.错误
public class Demo01 {
public static void main(String[] args) {
Demo01 D= new Demo01();// new Demo01.a();
D.a();//这样调用的结果是Error(错误)
System.out.println(11/0);//这样调用的结果是Exception(异常)
}
public void a(){
b();
}
public void b(){
a();
}
}
二、异常处理机制:
1.抛出异常
2.捕获异常
异常处理五个关键字: try、catch、finally、throw、throws.
public class Demo02 {
public static void main(String[] args) {
new Demo02().test(1, 0);
int a = 1;
int b = 0;
//快捷键:Ctrl+Alt+T ———— 捕获异常
try { //try监控区域
if (b == 0) {
throw new ArithmeticException();//主动抛出异常!
}
System.out.println(a / b);
} catch (Error e) { //想要捕获的异常类型可以定义
System.out.println("此处为错误!");
} catch (Exception e) {
System.out.println("此处为异常!");
} catch (Throwable e) {
System.out.println("Throwable!"); //要捕获多个异常,级别要逐层递进
} finally { //可以不要,善后工作.
System.out.println("结束!");
}
}
public void test(int a, int b) throws ArithmeticException {//假设方法中处理不了这个异常。在方法上,抛出异常:throws
if (b == 0) {// throw 与 throws
throw new ArithmeticException();//主动抛出异常!在方法中,使用:throw
}
System.out.println(a / b);
}
}
三、自定义异常
1.创建自定义异常
2.在方法中通过throw关键字抛出异常现象
3.如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否
则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
4.在出现异常方法的调用者中捕获并处理异常。
//如何自定义异常
public class Demo04 extends Exception {
//传递数字>10;
private int detail;
public Demo04(int a) {
this.detail = a;
}
//toString: 异常的打印信息
@Override
public String toString() {
return "Demo04{" + "detail=" + detail + '}';
}
}
来一个测试test01类:
public class test01 {
//可能会存在异常的方法
static void test(int a) throws Demo04 { //2. 也可以直接抛出去,让调用这个方法的地方捕获
System.out.println("传递的参数为:"+a);
if(a>10){
throw new Demo04(a); //1.直接捕获
}
System.out.println("Ok");
}
public static void main(String[] args) { //调用上面的方法
try {
test(11);
} catch (Demo04 e) { //捕获到了上面抛出的异常
//增加一些异常的处理
System.out.println("Demo04=>"+e); //e就是自定义异常中toString的内容!
}
}
}