目录结构:

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. Excel长数字防止转换为科学计数法

    网上的一个方法是,加单引号,但是不好看. 我的处理,是先加,再替换成带格式的. strTable = Formater.SimpleTable(dt, "aaa", "| ...

  2. 【Python】使用torrentParser1.02对多文件torrent的分析结果

    C:\Users\horn1\Desktop\python\41-torrentParser>python torrentParser.py 文件名=./6.torrent 文件结构: anno ...

  3. ES6 箭头函数(arrow function)

    例行声明:接下来的文字内容全部来自 Understanding ECMAScript 6,作者是Nicholas C.Zakas,也就是大名鼎鼎的Professional JavaScript for ...

  4. esxtop 指标%RDY,NUMA,Wide-VMs

    参考文章:http://www.boche.net/blog/index.php/2010/10/21/cpu-ready-to-rdy-conversion/ http://kb.vmware.co ...

  5. Binutils工具集中的一些比较常用的工具

    addr2line addr2line是用来将程序地址转换成其所对应的程序源文件.代码行以及所对应的函数. ar ar是用来管理档案文件的,在嵌入式系统开发中,ar主要是用来对静态库进行管理. ar常 ...

  6. 算法笔记_230:运动员分组(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 有N个人参加100米短跑比赛.跑道为8条.程序的任务是按照尽量使每组的人数相差最少的原则分组.例如:N=8时,分成1组即可.N=9时,分成2组:一组 ...

  7. C# •MouseDown •MouseDown •MouseUp 的先后顺序

    鼠标按下事件发生的顺序 MouseDown event. Click event. MouseDownevent. MouseUp event. 可以写个测试,放一个picture控件 private ...

  8. unity3d uv动画

    做个总结吧.算是. 之前做过一个项目,是一个关于太空大战的项目. 算是自己做的吧.大体环境是unity3d + win32,mac上不行.好像不支持这个,原因未知.希望知道的告诉我下. 以下具体说下整 ...

  9. Android——代码中使用颜色值

    android中设置颜色时,可以直接使用颜色值来设置: view.setBackgroundColor(Color.parseColor("#颜色值"));

  10. Web服务器讲解与JavaWeb应用部署(本机,以Tomcat为例)

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6042290.html 在讨论Web系统发布之前,我们先来辨析两个概念:服务器.Web服务器. 通常,我们说的服 ...