文档章节

java项目经验总结之自定义异常类

指尖残雪
 指尖残雪
发布于 2016/05/22 23:56
字数 538
阅读 16
收藏 1

在项目开发中遇到自定义异常,根据自己项目的需要进行相应的覆写,便于捕获和错误输出。

package org.dyb.exception;

import java.io.PrintStream;
import java.io.PrintWriter;

/**
 * @说明 自定义异常基础类
 * @author dyb
 *
 */
public class BaseException extends RuntimeException{

	private static final long serialVersionUID = -434104233779192938L;
	/**
	 * 未知错误code
	 */
	public static final int UNKNOWN_ERROR_CODE = 0;
	/**
	 * 未知错误message=""
	 */
	public static final String UNKNOWN_ERROR_MSG = "";
	
	private Throwable cause;//异常
	private int errorCode;//错误code
	private String traceId;//追踪id
	
	public BaseException(String errorMsg){
		this(null, errorMsg);
	}
	
	public BaseException(Throwable cause){
		this(cause, "");
	}
	
	public BaseException(int errorCode, String errorMsg) {
		this(null, errorCode, errorMsg);
	}
	public BaseException(Throwable cause, String errorMsg){
		this(cause, BaseException.UNKNOWN_ERROR_CODE, errorMsg);
	}
	
	public BaseException(Throwable cause, int errorCode, String errorMsg){
		this(cause, errorCode, errorMsg, null);
	}
	
	public BaseException(Throwable cause, int errorCode, String errorMsg, String traceId){
		super(errorMsg);
		this.cause = cause;
		this.errorCode = errorCode;
		this.traceId = traceId;
	}
	
	public void printStackTrace() {
		this.printStackTrace(System.err);
	}
	
	public void printStackTrace(PrintStream ps){
		if(null == getCause()){
			super.printStackTrace(ps);
		}else{
			ps.println(this);
			getCause().printStackTrace(ps);
		}
	}
	
	public void printStackTrace(PrintWriter pw){
		if(null == getCause()){
			super.printStackTrace(pw);
		}else{
			pw.println(this);
			getCause().printStackTrace(pw);
		}
	}
	
	public Throwable getCause(){
		return this.cause == this ? null : this.cause;
	}
	public String getMessage(){
		if (getCause() == null) {
			return super.getMessage();
		}
		return super.getMessage() + getCause().getMessage();
	}

	public int getErrorCode() {
		return errorCode;
	}

	public String getTraceId() {
		return traceId;
	}
	
}

package org.dyb.exception;

public class BoException extends BaseException{

	private static final long serialVersionUID = 2729611264067131179L;

	public BoException(int errorCode, String errorMsg) {
		super(errorCode, errorMsg);
	}

	public BoException(String errorMsg) {
		super(errorMsg);
	}

	public BoException(Throwable cause, int errorCode, String errorMsg,
			String traceId) {
		super(cause, errorCode, errorMsg, traceId);
	}

	public BoException(Throwable cause, int errorCode, String errorMsg) {
		super(cause, errorCode, errorMsg);
	}

	public BoException(Throwable cause, String errorMsg) {
		super(cause, errorMsg);
	}

	public BoException(Throwable cause) {
		super(cause);
	}

}

package org.dyb.exception;


public class DaoException extends BaseException {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public DaoException(String errorMsg) {
		super(errorMsg);
	}

	public DaoException(int errorCode, String errorMsg) {
		super(errorCode, errorMsg);
	}

	public DaoException(Throwable cause, int errorCode, String errorMsg,
			String traceId) {
		super(cause, errorCode, errorMsg, traceId);
	}

	public DaoException(Throwable cause, int errorCode, String errorMsg) {
		super(cause, errorCode, errorMsg);
	}

	public DaoException(Throwable cause, String errorMsg) {
		super(cause, errorMsg);
	}

	public DaoException(Throwable cause) {
		super(cause);
	}

}

package org.dyb.exception;

public class ServiceException extends BaseException{

	private static final long serialVersionUID = 8566572900818858358L;

	public ServiceException(int errorCode, String errorMsg) {
		super(errorCode, errorMsg);
	}

	public ServiceException(String errorMsg) {
		super(errorMsg);
	}

	public ServiceException(Throwable cause, int errorCode, String errorMsg,
			String traceId) {
		super(cause, errorCode, errorMsg, traceId);
	}

	public ServiceException(Throwable cause, int errorCode, String errorMsg) {
		super(cause, errorCode, errorMsg);
	}

	public ServiceException(Throwable cause, String errorMsg) {
		super(cause, errorMsg);
	}

	public ServiceException(Throwable cause) {
		super(cause);
	}

}


单元测试:

package org.dyb.exception;

import org.junit.Test;

public class TestException {

	@Test
	public void test() {
		try {
			service();
		} catch (ServiceException e) {
			System.out.println("test"+e.getMessage());
			System.out.println("test"+e.getErrorCode());
		}
	}

	public void service() throws ServiceException {
		try {
			bo();
		} catch (BoException e) {
			throw new ServiceException(e.getErrorCode(),"   ---service:"+e.getMessage());
		}
	}

	public void bo() throws BoException {
		try {
			dao();
		} catch (DaoException e) {
			throw new BoException(e.getErrorCode()," ---bo:"+e.getMessage());
		}
	}

	public void dao() throws DaoException {
		try {
			throw new DaoException(1,"aa");
		} catch (DaoException e) {
			throw new DaoException(e.getErrorCode(),"  ----dao:"+e.getMessage());
		}
	}

}



本文转载自:http://blog.csdn.net/bq1073100909/article/details/50644723

共有 人打赏支持
指尖残雪
粉丝 7
博文 73
码字总数 0
作品 0
上海
后端工程师
私信 提问
第十四讲 面向对象基础——异常

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yerenyuan_pku/article/details/82084172 异常的概述 异常就是程序在运行时出现的不正常情况。我们不仅要问异...

李阿昀
08/26
0
0
Java中的Exception异常 自定义异常

public class Exception extends Throwable Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。 public class RuntimeException extends Exception Runt...

Sandy_wu
2013/08/09
0
0
如何处理异常? catch Exception OR catch Throwable

在Java中,当你需要统一处理异常的时候,你是会选择catch (Exception),还是直接catch (Throwable)? Java的异常体系 Throwable: Java中所有异常和错误类的父类。只有这个类的实例(或者子类...

狐狸糊涂
2014/12/23
0
0
Java 复习 —— 异常处理

前言 异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误...

learn_more
2015/08/21
0
0
轻量级 Java 框架 - JOxygen

JOxygen 轻量级Java框架 介绍 一个轻量级Java框架 oxygen-core 核心部分 基于cglib的aop实现 提供缓存管理和基于注解的缓存,内置LocalCache和Ehcache实现,可扩展 配置管理,支持${attrs.k...

justlive1
11/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周三乱弹 —— 你是靠自己努力才失败的

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 小小编辑:推荐歌曲 《Raveena》- Raveena 《Raveena》- Raveena 手机党少年们想听歌,请使劲儿戳(这里) 11月18日,俞敏洪在某论坛演讲中称...

小小编辑
58分钟前
313
7
firewalld

1. firewalld 是什么 CentOS中默认是有 firewalld, iptables, etablesd firewalld 是 CentOS7/RadHat7 中默认的防火墙管理工具. firewalld 工具用来管理里netfilter, 不过底层还是调用的还是...

Fc丶
今天
4
0
Java 源代码和 C 源代码的运行区别

与其他程序的执行方式和编译方式不同。 Java 源代码需要进行编译成字节码后在 Java 虚拟机上运行,这样 Java 程序能够保持独立性和跨平台功特性。 请参考下图。 https://www.cwiki.us/pages...

honeymose
今天
6
0
Apache限定目录解析PHP,限制user_agent,PHP相关的配置

Apache限定目录解析PHP 配置前访问upload/index.php [root@test-a ~]# curl -x192.168.77.139:80 'www.test.com/upload/index.php'This is upload diretory 配置,/usr/local/apache2.4/......

野雪球
今天
6
0
java.util.Concurrent.Exchanger源码

类图 源码: package java.util.concurrent;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.atomic.AtomicReference;import java.util.concurrent......

狼王黄师傅
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部