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的话,直接下载project吧:
Java异常封装(自定义错误码和描写叙述,附源代码)的更多相关文章
- Java异常封装(自定义错误信息和描述)
一.checked异常和unchecked异常 checked异常: unchecked异常: 二.异常封装示例 2.1.添加一个枚举LuoErrorCode.java如下: 2.2.创建一个异常类B ...
- Java异常封装
转载: Java异常封装 Java里面的异常在真正工作中使用还是十分普遍的.什么时候该抛出什么异常,这个是必须知道的. 当然真正工作里面主动抛出的异常都是经过分装过的,自己可以定义错误码和异常描述. ...
- Java异常封装(自己定义错误码和描述,附源码)
真正工作了才发现,Java里面的异常在真正工作中使用还是十分普遍的.什么时候该抛出什么异常,这个是必须知道的. 当然真正工作里面主动抛出的异常都是经过分装过的,自己可以定义错误码和异常描述. 下面小宝 ...
- 潭州课堂25班:Ph201805201 django 项目 第十课 自定义错误码,完成图片验证码,用户是否被注册功能 (课堂笔记)
把 视图传到前台的 JsonResponse(data=data) 先进行处理,之后再传到前台, 处理:引用自定义错误代码,把错误代码返回给前台,前台根据错误代码中文提示 class Code: O ...
- C++_异常2-返回错误码
一种比异常终止更灵活的办法是,使用函数的返回值来指出问题. 例如,ostream类的get(void)成员通常返回下一个输入字符的ASCII码,但到达文件尾时,将返回EOF. 对hmean()来说,这 ...
- [2017-08-28]Abp系列——业务异常与错误码设计及提示语的本地化
本系列目录:Abp介绍和经验分享-目录 前言 ABP中有个异常UserFriendlyException经常被使用,但是它所在的命名空间是Abp.UI,总觉得和展现层联系过于紧密,在AppServic ...
- Spring Boot 如何自定义返回错误码错误信息
说明 在实际的开发过程中,很多时候要定义符合自己业务的错误码和错误信息,而不是统一的而不是统一的下面这种格式返回到调用端 INTERNAL_SERVER_ERROR(500, "Intern ...
- CMPP错误码说明
与中国移动代码的对应关系. MI::zzzzSMSC返回状态报告的状态值为EXPIREDMJ:zzzzSMSC返回状态报告的状态值为DELETEDMK:zzzzSMSC返回状态报告的状态值为UNDEL ...
- 转!!CMPP 网关错误码说明
http://www.163duanxin.com/msg/1753.htm CMPP错误码说明 与中国移动代码的对应关系. MI::zzzzSMSC返回状态报告的状态值为EXPIREDMJ:zz ...
随机推荐
- Ext分区文件恢复工具extundelete
Ext分区文件恢复工具extundelete Ext是延伸文件系统(Extended system)的缩写.它是为Linux内核开发的第一个文件系统.它有多个版本.现在常见的是Ext3和Ext4.由 ...
- Sort Transformed Array -- LeetCode
Given a sorted array of integers nums and integer values a, b and c. Apply a function of the form f( ...
- 透视投影(Perspective Projection)变换推导
透视投影是3D固定流水线的重要组成部分,是将相机空间中的点从视锥体(frustum)变换到规则观察体(Canonical View Volume)中,待裁剪完毕后进行透视除法的行为.在算法中它是通过透 ...
- NOIP 2017 赛后反思 [补档]
首先写一下比赛的情况: D1: T1: 之前做过类似的题目, 因而知道大致的结论, 迅速完成. T2: 貌似直接模拟就可以了, 涉及到字符串信息提取, 比较麻烦, 因而想放到最后做. T3: 非常简洁 ...
- bean装配--auto
1,Dao package com.songyan.autoZhuangpei; public interface UserDao { public void say(); } package com ...
- centos下crontab的使用
1.作用 使用crontab命令可以修改crontab配置文件,然后该配置由cron公用程序在适当的时间执行,该命令使用权限是所有用户. 2.格式 crontab [-u user] {-l | -r ...
- linux命令详解:basename命令
转:http://www.cnblogs.com/lwgdream/archive/2013/11/05/3407768.html 前言 bashname命令用于获取路径中的文件名或路径名(获取的时候 ...
- 【mybatis】mybatis中的<if test=“”>test中多条件
mybatis中的<if test=“”>test中多条件 代码展示: 其中 accountCode和apiName都是ApiAllRespBean的属性 <select id=&q ...
- golang之archive/tar包的使用
原文地址:http://www.niu12.com/article/36 github地址:https://github.com/ZQCard/go_api_practice // tar包实现了文件 ...
- 【AS3 Coder】任务五:Flash 2D游戏的第二春(中)
在上一节中,我们介绍了如何构建我们小小的90度角RPG游戏的背景,在这一节中我将为列位带来重头戏部分,隆重介绍我们的主角及NPC登场,噔噔噔噔……掌声在哪里?! 额,没听到掌声,罢了,直接开场吧. 本 ...