开发者社区> ghost丶桃子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Java异常封装(自己定义错误码和描述,附源码)

简介:
+关注继续查看

目录(?)[+]

真正工作了才发现,Java里面的异常在真正工作中使用还是十分普遍的。什么时候该抛出什么异常,这个是必须知道的。

当然真正工作里面主动抛出的异常都是经过分装过的,自己可以定义错误码和异常描述。

下面小宝鸽就为大家介绍一个Java异常简单封装的例子。

在给出异常分装例子之前,需要给大家普及Java里面的checked异常和unchecked异常的个概念。

一、checked异常和unchecked异常

这里之所以让大家清楚checked异常和unchecked异常概念,是因为:待会我们的异常是继承unchecked异常RuntimeException的。了解一下并无坏处嘛

checked异常:

表示无效,不是程序中可以预测的。比如无效的用户输入,文件不存在,网络或者数据库链接错误。这些都是外在的原因,都不是程序内部可以控制的。

必须在代码中显式地处理。比如try-catch块处理,或者给所在的方法加上throws说明,将异常抛到调用栈的上一层。

继承自java.lang.Exception(java.lang.RuntimeException除外)。

unchecked异常:

表示错误,程序的逻辑错误。是RuntimeException的子类,比如IllegalArgumentException, NullPointerException和IllegalStateException。

不需要在代码中显式地捕获unchecked异常做处理。

继承自java.lang.RuntimeException(而java.lang.RuntimeException继承自java.lang.Exception)。

看下面的异常结构图或许层次感更加深些:

这里写图片描述

二、异常分装实例

2.1、添加一个枚举LuoErrorCode.java如下:

package com.luo.errorcode;

public enum LuoErrorCode {

    NULL_OBJ("LUO001","对象为空"),
    ERROR_ADD_USER("LUO002","添加用户失败"),
    UNKNOWN_ERROR("LUO999","系统繁忙,请稍后再试....");

    private String value;
    private String desc;

    private LuoErrorCode(String value, String desc) {
        this.setValue(value);
        this.setDesc(desc);
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    @Override
    public String toString() {
        return "[" + this.value + "]" + this.desc;
    }
}

注意!!!这里我们重写了LuoErrorCode的toString方法,至于为什么要这样,后面会提到,客观请继续看。

2.2、创建一个异常类BusinessException.java,继承RuntimeException:

package com.luo.exception;

public class BusinessException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public BusinessException(Object Obj) {
        super(Obj.toString());
    }

}

这里的代码虽然短,但是有两点需要注意的!!!第一点是其继承了RuntimeException,因为一般我们的业务异常都是运行时异常。第二点,这里的构造方法调用父方法super(Obj.toString());,这就是重写了LuoErrorCode的toString方法的原因了,如果还不明白,看完后面的你就明白了。

2.3、测试类ExceptionTest.java:

package com.luo.test;

import com.luo.errorcode.LuoErrorCode;
import com.luo.exception.BusinessException;

public class ExceptionTest {

    public static void main(String args[]) {
        Object user = null;
        if(user == null){
            throw new BusinessException(LuoErrorCode.NULL_OBJ);
        }
    }
}


运行结果:

这里写图片描述

补充一下:在我们实际项目里面,比如别人调用你接口,你可能需要先看他传过来的对象是不是空的,先判断如果传过来的对象为空给有友好的提示”[LUO001]对象为空”,不然后面的代码估计会出现空指针异常了。

一般公司都会分装一个基础框架,异常分装是其中一部分,当然他们对异常的分装肯定比我这个例子复杂多,因此本例仅供参考!

如果懒得copy和paste的话,直接下载工程吧:

http://download.csdn.net/detail/u013142781/9422684





















版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
java中异常注意的细节1
/* public class Test{ public static void main(String[] args){ int i=0; try{ func();//区别就是该函数抛出的异常被封装了,外界不知道到底会不会发生该异常 System.
542 0
java中异常注意的细节2
class A extends Exception{ A(){ super(); } A(String msg){ super(msg); } } class B extends A{ B(){ super()...
474 0
Java多线程那些事,对Java并发编程2w余字的总结,超详细(从入门到完全掌握)
Java多线程那些事,对Java并发编程2w余字的总结,超详细(从入门到完全掌握)
79 0
java多线程中的死锁、活锁、饥饿、无锁都是什么鬼?
死锁、活锁、饥饿是关于多线程是否活跃出现的运行阻塞障碍问题,如果线程出现了这三种情况,即线程不再活跃,不能再正常地执行下去了。
67 0
五分钟带你玩转多线程(一)java多线程基础知识简介
线程概念 进程:是一个执行中的程序,如打开网易云音乐,网易云音乐就是一个进程 线程:是进程的组成,一个进程包含多个线程,是jvm最小调度单元。如网易云音乐听歌是一个线程,评价是一个线程。
50 0
1955
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载