Java通过异常处理错误

1.在return中使用finally:在一个方法中,可以从多个点返回,finally子句总是会执行的。

public static void main(String[] args) {
    System.out.println(test());
}

private static int test() {
    int i = 1;
    try {
        i++;
        System.out.println("try:" + i);
        return i;
    } catch (Exception e) {
        i++;
        System.out.println("catch:" + i);
    } finally {
        i++;
        System.out.println("finally:" + i);
    }
    return i;
}

2.异常的限制:当覆盖方法的时候,只能抛出在基类方法的异常。

class A {
    public void fun() throws Exception {
    }
}

class B extends A {
    public void fun() throws IOException, RuntimeException {
    }
}

异常限制对构造器不起作用,子类构造器依旧可以抛出父类构造器所没有声明的异常。派生类构造器不能捕获基类构造器抛出异常。

3.构造器:使用finally所有东西都能够被正确的清理,但涉及构造器内抛出异常,清理行为也许就不能正常工作了。

4.异常匹配:抛出异常时,异常处理系统会按照代码的书写顺序找出“最近”的处理程序,找到处理程序后将不继续查找。

class MyTest extends Exception {
}

class Task extends MyTest {
}

public class Test2 {
    public static void main(String[] args) {
        try {
            throw new Task();
        } catch (Task task) {
            System.out.println("捕捉 Task");
        } catch (MyTest myTest) {
            System.out.println("捕捉 myTest");
        }
        System.out.println("----------");
        try {
            throw new Task();
        } catch (MyTest myTest) {
            System.out.println("捕捉 myTest");
        }
    }
}

5.异常使用指南:在知道该如何处理的情况下才捕获异常;进行少许修补,然后绕过异常发生的地方继续执行;把当前运行环境下能做的事情尽量做完,然后把相同(或不同)的异常重抛到更高层;终止程序,让类库和程序更加安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值