博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【java】自定义异常类
阅读量:5095 次
发布时间:2019-06-13

本文共 3833 字,大约阅读时间需要 12 分钟。

目录结构:

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

 

转载于:https://www.cnblogs.com/HDK2016/p/6830719.html

你可能感兴趣的文章
深入剖析Android系统
查看>>
[转]JavaScript快速检测浏览器对CSS3特性的支持
查看>>
密码强度正则表达式 – 必须包含大写字母,小写字母和数字,至少8个字符等...
查看>>
对接系统的一些思考
查看>>
无法识别的属性“targetFramework”。请注意属性名称区分大小写。错误解决办法...
查看>>
exception from hresult:0x8000401A(excel文档导出)
查看>>
过年为什么要贴门神? 分类: 其他 2015-01-...
查看>>
android学习笔记--AlarmManager
查看>>
Robot Framework 源码解析(1) - java入口点
查看>>
UOJ#33. 【UR #2】树上GCD 点分治 莫比乌斯反演
查看>>
wpf 依赖性属性
查看>>
Python基础-数据类型
查看>>
Gym - 100989G (二分法)
查看>>
第三周学习进度条
查看>>
spark 参数调优
查看>>
精彩博文收集目录索引(程序猿就是我)
查看>>
搭建日志环境并配置显示DDL语句
查看>>
SelectorChapek(选择器的快速创建)
查看>>
使用Java合并图片、修改DPI
查看>>
JPush极光推送 Java调用服务器端API开发
查看>>