java中如何创建自定义异常Create Custom Exception

创建自定义异常 Create Custom Exception 
马克-to-win:我们可以创建自己的异常:checked或unchecked异常都可以,规则如前面我们所介绍,反正如果是checked异常,则必须或者throws,或者catch。到底哪个好,各路架构师大神的意见是50对50。见我本章后面的附录。sun公司开始说,checked异常可以使你的系统异常语义表达很清楚。但很多人经过一段时间的实践后,马上表示了异议。checked 异常是java独有的,但连Thinking in java的作者都表示,checked异常作为一种java特有的实验行为,不是很成功。我个人的意见是:为了达到解耦的目的,最好继承 unchecked异常。否则你各种业务方法都得throws。将来业务方法一旦改变,还得考虑处理这些throws。(新手可忽略)比如你的业务方法a 里如果新加了一句throw受检异常,而且你还没有catch,则调用你这个a方法的客户程序将必须或者catch或者throws,反正必须做出相应调整。如果当初你的a方法里只是抛出一个非受检异常,客户程序就不用做任何调整了。

马克- to-win:马克 java社区:防盗版实名手机尾号: 73203。



例1.9.1-本章源码

public class Test {
    public static void main(String args[]) throws RelationshipExceptionMark_to_win {
        int talkTimesPerDay = 2;
        if (talkTimesPerDay < 3) {
            RelationshipExceptionMark_to_win e = new RelationshipExceptionMark_to_win();
            e.setMsg("每天说话小于3 次,抛出关系异常的异常,分手");
            System.out.println("马克-to-win:here");
            throw e;
        }
        System.out.println("马克-to-win:优雅结束");
    }
}
class RelationshipExceptionMark_to_win extends Exception {
    String msg;
    String getMsg() {
        return msg;
    }
    void setMsg(String msg) {
        this.msg = msg;
    }
}

输出结果:

马克-to-win:here
Exception in thread "main" RelationshipExceptionMark_to_win
    at Test.main(Test.java:5)




例1.9.2-本章源码

public class Test {
    public static void main(String args[]) {
        int talkTimesPerDay = 2;
        if (talkTimesPerDay < 3) {
            RelationshipExceptionMark_to_win e = new RelationshipExceptionMark_to_win();
            e.setMsg("每天说话小于3 次,抛出关系异常的异常,分手");
            throw e;
        }
        System.out.println("马克-to-win:优雅结束");
    }
}
class RelationshipExceptionMark_to_win extends RuntimeException {
    String msg;
    String getMsg() {
        return msg;
    }
    void setMsg(String msg) {
        this.msg = msg;
    }
}

输出结果:

Exception in thread "main" RelationshipExceptionMark_to_win
    at Test.main(Test.java:5)




例1.9.3-本章源码
public class Test {
    public static void main(String args[]) {
        int talkTimesPerDay = 2;
        try {
            if (talkTimesPerDay < 3) {
                RelationshipExceptionMark_to_win e = new RelationshipExceptionMark_to_win();
                e.setMsg("每天说话小于3 次,抛出关系异常的异常,分手");
                throw e;
            }
        } catch (RelationshipExceptionMark_to_win e1) {
            System.out.println(e1.getMsg());
        }
        System.out.println("马克-to-win:优雅结束");
    }
}

class RelationshipExceptionMark_to_win extends Exception {
    String msg;
    String getMsg() {
        return msg;
    }

    void setMsg(String msg) {
        this.msg = msg;
    }
}

输出结果:

每天说话小于3 次,抛出关系异常的异常,分手
马克-to-win:优雅结束