目录结构:

contents structure [+]

一,为什么需要自定义异常类

当java中的异常类型没有能够满足我们所需的异常的时候就需要自定义异常类。

二,自定义异常的方式

a.自定义异常类继承Exception或者其子类。

b.提供一个无参的和一个有参数的构造方法。

三,实例

写一个Person类,同时定义AgeException,当年龄输入不合法时,抛出异常。

AgeException异常类:

/*
* 自定义异常需要继承Exception或其子类
* 同时需要提供两个构造方法,第一个是无参构造,第二个是带字符串的构造
*/
public class AgeException extends Exception { /*
* 这里之所以需要序列化ID,是因为从JDK1.4开始,
* 异常信息已经添加到该类的序列化表示形式,
* 所以如果需要打印异常信息,
* 也就是在捕获异常的时候需要调用 e.printStackTrace() 那么就需要声明序列化ID。
* 如果在捕获异常后不打印错误信息,就不需要声明序列化ID。
*/
private static final long serialVersionUID = 1L; public AgeException(){//无参构造
super();
} public AgeException(String str){//带字符串的构造
super(str);
} public AgeException(Throwable cause){//从jdk1.4开始,带异常对象的构造方法,可以存储异常产生的源信息,如果需要存储异常的源信息,推荐使用这个
super(cause);
}
}

AgeException

Person类

/*
* 实现Person类的封装
*/
public class Person { private String name;
private int age; public Person() {
super();
}
/*
* 抛出异常
*/
public Person(String name, int age) throws AgeException {
super();
setName(name);
/*
* 当年龄在0到150之间是合法的
* 当年龄不合法的时候,就new一个AgeException并且抛出
*/
if(age>0 && age<150){
setAge(age);
}else{
//抛出异常类AgeException
throw new AgeException("年龄不合法");
}
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

Person

测试类

public class TestPerson {

    public static void main(String[] args) {
/*
* 创建一个Person对象
*/
Person person=null;
try {
//创建Person对象的时候传入不合法的年龄
person=new Person("jame",-1);
} catch (AgeException e) {
//打印异常信息
e.printStackTrace();
}finally{
//打印对象
System.out.println(person);
}
}
}

TestPerson

四,异常日志

下面的封装类可以收集java中抛出的异常信息

package cn.jd.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date; /**
* 用来收集异常日志
*
* JavaEE web阶段
*
* 当产生异常时, 应把异常收集起来 ,
*
* 存储到
* 本地文件
* 网络存储
* 短信发送
* 邮件
*/
public class ExceptionUtil { /**
*
* 存储:
* 在存储的目录下 ,按照每天的日期创建单独文件夹
*
* 每天的文件夹中, 异常日志存储的文件, 一个异常一个文件, 文件名称按照时-分-秒-毫秒的格式存储
*
*
* @param e 要存储的异常信息
* @param exceptionPath 要存储的位置: 是一个文件夹, 文件夹可以不存在
* @throws Exception
*/
public static void toException(Exception e,File exceptionPath) throws Exception{
if(!exceptionPath.exists()){
//创建文件夹
exceptionPath.mkdirs();
}
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String day = sdf.format(date);
//创建每天的异常文件夹
File dayDir = new File(exceptionPath, day);
if(!dayDir.exists())
dayDir.mkdirs();
//创建本次异常存储的文件
SimpleDateFormat sdf2 = new SimpleDateFormat("HH-mm-ss-sss"); String fileName = sdf2.format(date);
File file = new File(dayDir, fileName+".txt");
//创建一个字符打印流 , 指向创建的这个文件
PrintWriter pw = new PrintWriter(new FileOutputStream(file));
//将异常信息输出至这个文件
e.printStackTrace(pw);
pw.close();
}
/**
*
* @param e 要存储的异常信息 , 存储的位置 ,在F://log文件夹中
*/
public static void toException(Exception e){
try {
toException(e,new File("F://log"));
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} }

ExceptionUtil.java

【java】自定义异常类的更多相关文章

  1. Java自定义异常类的简单实现

    学习目标: 掌握自定义异常类 例题: 需求:自定义异常类,简单判断是否注册成功 代码如下: RegisterException类: /** * @author YanYang * @projectNa ...

  2. Java自定义异常类

    用户可以根据自己的需要定义自己的异常类,定义异常类只需要继承Exception类即可 //================================================= // Fi ...

  3. Java自定义异常类以及异常拦截器

    自定义异常类不难,但下面这个方法,它的核心是异常拦截器类. 就算是在分布式系统间进行传递也可以,只要最顶层的服务有这个异常拦截器类(下例是在 springboot 项目中) 1.自定义异常类,继承自 ...

  4. Java 自定义异常类

    类1:public class LogicException extends RuntimeException {    //业务逻辑异常    /**     *      * @param mes ...

  5. [转]如何编写和应用Java的自定义异常类

    编写自定义异常类实际上是继承一个API标准异常类,用新定义的异常处理信息覆盖原有信息的过程.常用的编写自定义异常类的模式如下:   public class CustomException exten ...

  6. java中自定义异常类

    hello,大家好,今天跟大家分享一下java中如何自定义异常,以后如果有新的心得,再添加,欢迎前辈指导... 首先,上Api,看一下异常和错误的父类: 然后,现在假设我有个循环(i=0;i<1 ...

  7. java基础之自定义异常类及throw和throws的区别

    一.异常的架构: Throwable类:所以异常类都是Throwable的子类,它派生两个子类 Error和Exception. Error类:表示仅靠程序本身无法恢复的的严重错误,比如内存溢出,虚拟 ...

  8. 设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”。。。

    设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ”,则抛出一个异常信息“This is a XYZ”,如果从命令行输入 ABC,则没有抛出异常.(只有 ...

  9. java——异常类、异常捕获、finally、异常抛出、自定义异常

    编译错误:由于编写程序不符合程序的语法规定而导致的语法问题. 运行错误:能够顺利的编译通过,但是在程序运行过程中产生的错误. java异常类都是由Throwable类派生而来的,派生出来的两个分支分别 ...

随机推荐

  1. Anroid 解决小米和魅族不能在mac上调试

    第一种方法 1.mac->关于本机->系统报告->usb->copy厂商ID** 2.cmd->echo " 0x2a45" >> ~/. ...

  2. IDEA 禁止自动导入引用包 取消import包

    http://www.oschina.net/question/2010061_226765 我想拷贝一小段代码,或者我就是不想引入拷贝来的包,我该怎么取消掉idea的自动导入import包呢? 找到 ...

  3. Hibernate: No Session found for current thread

    在Struts2+Hibernate+Srping项目中经常会遇到这种问题 我知道的一种情况是: Spring的事务配置中没有配置好异常出现处的路径 <aop:advisor pointcut= ...

  4. UML关系(泛化,实现,依赖,关联(聚合,组合))

    http://www.cnblogs.com/olvo/archive/2012/05/03/2481014.html UML类图关系(泛化 .继承.实现.依赖.关联.聚合.组合) 继承.实现.依赖. ...

  5. 最纯粹的直播技术实战03-通过filter进行旋转及卡顿修复

    最纯粹的直播技术实战03-通过filter进行旋转及卡顿修复 最新实战教程,Android自己主动化刷量.作弊与防作弊,案例:刷友盟统计.批量注冊苹果帐号 这个系列的文章将会研究最纯粹的Android ...

  6. android studio中为项目添加依赖包的方法

    右键项目,Open Module Settings 打开后选择Dependencies选项卡,点最右边的加号: 选择Libriay dependencies,从下拉列表里面选择就可以了.

  7. Nginx+Lua+Redis构建高并发应用

    一.  源文来自:http://www.ttlsa.com/nginx/nginx-lua-redis/ 二.  预览如下:

  8. MACD底背离选股公式——通达信、同花顺

    {底背离,通达信版.同花顺版} DIFF:=EMA(CLOSE,) - EMA(CLOSE,); DEA:=EMA(DIFF,); MACD:=*(DIFF-DEA); QZQ:=BARSLAST(R ...

  9. winf

    真的,先亮注册码!!(直接复制即可) 注册码: <第1组> 用户名:大眼仔~旭(Anan) 注册码:01000000007002140V <第2组> 用户名:大眼仔~旭(Ana ...

  10. Java多线程中的内存模型

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6536131.html  一:现代计算机的高速缓存 在计算机组成原理中讲到,现代计算机为了匹配 计算机存储设备的 ...