国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html
内部邀请码:C8E245J (不写邀请码,没有现金送)
国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为中国PE第一股,市值超1000亿元。 

------------------------------------------------------------------------------------------------------------------------------------------------------------------

原文地址:http://my.oschina.net/liuzeli/blog/351280

这里总结一下Java的Exception,并实现一个自定义Exception类。

总结:

  1. Throwable对象分为两种类型:Error(表示编译时和系统错误);Exception(在Java类库、用户方法以及运行时故障中抛出的异常)。
  2. Exception细分成两种异常:受检查异常(如,IOException, SQLException等。在编译时要被强制检查的异常,需要用try, catch, finally关键字在编译时期处理,否则会报错。);运行时异常(如,ArithmeticException, ClassCastException, IllegalArgumentException, IndexOutOfBoundsException, NullPointerException等。编译器不会检查这类异常。)
  3. Java编程中处理异常的最佳实践[4]:
  • 为可恢复的错误使用检查型异常,为编程错误使用非检查型错误。
  • 在finally程序块中关闭或者释放资源
  • 在堆栈跟踪中包含引起异常的原因
  • 始终提供关于异常的有意义的完整的信
  • 避免过度使用检查型异常
  • 将检查型异常转为运行时异常
  • 记住对性能而言,异常代价高昂
  • 避免catch块为空
  • 使用标准异常
  • 记录任何方法抛出的异常

受检查异常和运行时异常的区别:

  • 受检查异常需要自行处理,运行时异常不需要
  • 受检查异常是Exception直接子类,运行时异常是RuntimeException的子类
  • 受检查异常多是编程时出现的错误,运行时异常是程序运行时故障率较高

避免出现NullPointerException的最佳实践[5]:

  • 用已知的字符串对象调用equals()和equalsIgnoreCase()方法【"hello".equals(objString)】;
  • 如果valueOf()和toString()方法的返回值一样的话,用valueOf()方法代替toString()方法【当为null的对象调用toString()方法时会抛出NullPointerException异常而调用valueOf()方法时会返回一个"null"的封装类】;
  • 使用对null安全的方法和库【eg, StringUtils.isBlank(), isNumeric(), isWhiteSpace()等】;
  • 方法调用的返回值用返回空的集合或者空的数组避免返回null的情况【Collections.EMPTY_LIST, Collections.EMPTY_SET和Collections.EMPTY_MAP等】;
  • 使用@NotNull和@Nullable的注解明确指出是否可能有null的情况出现;
  • 避免代码中出现不必要的自动装箱和拆箱【避免类似的int a 出现接收返回值为null的情况,用Integer a代替更好】;
  • 遵守契约并且使用合理的默认值【通过定义什么可以为空,什么不能为空,主叫方可以明确的作出判断。】;
  • 在使用数据库存储对象时,要定义是否允许某个字段为空,这样数据库自身机制可以检查是否为空的情况,避免程序调用后出现非法的空字段。
  • 使用null的封装对象Null类。

自定义一个Exception类:

ProjectNameException.java 内容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.trianlge23.projectname.exception;
public class ProjectNameException extends Throwable {
    private static final long serialVersionUID = 8093803025939797139L;
    //exception code
    private int exceptionCode;
    //exception detailed message
    private String detailMsg;
    public ProjectNameException(int exceptionCode, String extraMsg) {
        super();
        this.setDetailMsg(exceptionCode);
        this.setExtraMsg(extraMsg);
    }
    public ProjectNameException(int exceptionCode) {
        super();
        this.setDetailMsg(exceptionCode);
    }
    //notice: we do not offer the set method to set the excption code.
    public int getExceptionCode() {
        return exceptionCode;
    }
    //if there has no extra message for this excption code, init it.
    private void setDetailMsg(int exceptionCode) {
        this.exceptionCode = exceptionCode;
        if (ProjectNameExceptionCode.EXCEPTION_CODE_MAP
                .containsKey(exceptionCode)) {
            this.detailMsg = ProjectNameExceptionCode.EXCEPTION_CODE_MAP
                    .get(exceptionCode);
        } else {
            this.detailMsg = ProjectNameExceptionCode.EXCEPTION_CODE_MAP
                    .get(ProjectNameExceptionCode.PROJECTNAME_EXCEPTION_CODE_NOT_FOUND);
        }
    }
    //if there has extra message for this exception code, add it.
    private void setExtraMsg(String extraMsg) {
        this.detailMsg += ProjectNameExceptionCode.EXTRA_EXCEPTION_MSG_SPLITER
                + extraMsg;
    }
    //override the super class method getMessage()
    @Override
    public String getMessage() {
        return this.detailMsg;
    }
}

ProjectNameExceptionCode.java内容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.triangle23.projectname.exception;
import java.util.HashMap;
import java.util.Map;
public class ProjectNameExceptionCode {
    //the separator between default message and extra message of exception.
    public static final String EXTRA_EXCEPTION_MSG_SPLITER = ": ";
    //the map stores the exception code and exception message
    public static Map<Integer, String> EXCEPTION_CODE_MAP;
    public static final int PROJECTNAME_EXCEPTION_CODE_NOT_FOUND = 1;
    static {
        EXCEPTION_CODE_MAP = new HashMap<Integer, String>();
        EXCEPTION_CODE_MAP.put(PROJECTNAME_EXCEPTION_CODE_NOT_FOUND,
                "[PROJECTNAME Exception] Not found exception code.");
    }
}

参考资料:

1. JDK1.7 API:http://docs.oracle.com/javase/7/docs/api/

2. Java编程思想(第四版)

3. Effective Java

4. Exception Handling Java Best Practices: 
http://javarevisited.blogspot.com/2013/03/0-exception-handling-best-practices-in-Java-Programming.html

5. Java Tips and Best practices to avoid NullPointerException: 
http://javarevisited.blogspot.com/2013/05/java-tips-and-best-practices-to-avoid-nullpointerexception-program-application.html

转载于:https://www.cnblogs.com/AloneSword/p/4142049.html

Java自定义Exception相关推荐

  1. java自定义事件案例_Java Custom Exception Example(Java自定义异常案例)

    In this example we will look briefly(短暂的) at the basics of Exception, in Java Programming Language. ...

  2. java中的类加载器有,Java自定义的类加载器,java自定义加载,在java中类加载器有以...

    Java自定义的类加载器,java自定义加载,在java中类加载器有以 在java中类加载器有以下几种java虚拟机自带的加载器 1)根类加载器(Bootstrap,c++实现)2)扩展类加载器(Ex ...

  3. 自定义java线程池_我的Java自定义线程池执行器

    自定义java线程池 ThreadPoolExecutor是Java并发api添加的一项功能,可以有效地维护和重用线程,因此我们的程序不必担心创建和销毁线程,也不必关注核心功能. 我创建了一个自定义线 ...

  4. 我的Java自定义线程池执行器

    ThreadPoolExecutor是Java并发api添加的一项功能,可以有效地维护和重用线程,因此我们的程序不必担心创建和销毁线程,而将精力放在核心功能上. 我创建了一个自定义线程池执行程序,以更 ...

  5. java自定义注解类

    一.前言 今天阅读帆哥代码的时候,看到了之前没有见过的新东西, 比如java自定义注解类,如何获取注解,如何反射内部类,this$0是什么意思? 于是乎,学习并整理了一下. 二.代码示例 import ...

  6. Java基础-TreeSet与Java自定义类型的排序

    TreeSet与Java自定义类型的排序 演示TreeSet对String是可排序的 TreeSet无法对自定义类型进行排序 比较规则怎么写 自平衡二叉树结构 实现比较器接口 Collections工 ...

  7. Java的Exception解析

    在Java核心知识的面试中,你总能碰到关于处理Exception和Error的面试题.Exception处理是Java应用开发中一个非常重要的方面,也是编写强健 而稳定的Java程序的关键,这自然使它 ...

  8. java 自定义json解析注解 复杂json解析 工具类

    java 自定义json解析注解 复杂json解析 工具类 目录 java 自定义json解析注解 复杂json解析 工具类 1.背景 2.需求-各式各样的json 一.一星难度json[json对象 ...

  9. Java 异常——Exception详解

    异常的介绍 异常的概念 异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止. 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常 ...

最新文章

  1. mac下java 开发环境搭建
  2. 从线上偶发的宕机事件看Netty流量控制
  3. 阿里提供中文搜索新选项!AI引擎+达摩院黑科技,你要试试吗?
  4. python在excel中的应用-python中的excel操作
  5. Spring入门图解(体系结构-IOC-DI-AOP)
  6. 用python读取txt文件、并计算数据的总合和平均值_Python,读取许多文件并合并结果...
  7. 合理利用Java不可变对象,让你的代码更加优雅
  8. 2021-04-06梦笔记
  9. HTML实现页面注册
  10. 2022-2028年中国美妆工具行业市场前瞻与投资战略规划分析报告
  11. 汇编达人视频学习4(MOVS、STOS、REP、PUSH、POP、JMP、CALL、RET指令)
  12. microsoftstore连不上网_修复Microsoft Store 无法连接网络 代码: 0x80072EFD
  13. Error in acquiring locks: Locks on the underlying objects cannot be acquired. retry after some time
  14. 腾讯走上王者之位,你以为靠的只是抄袭?
  15. 专为风电筒叶片除冰研发的爬壁机器人
  16. 笔记本电脑 a disk read error occurred 问题解决
  17. 华为认证报考流程(详细步骤)-手把手教你注册华为账号,预约华为考试,下载华为证书
  18. Java定时任务技术分析
  19. 雄关漫道真如铁,而今迈步从头越 | 挥别2022,再战2023!
  20. 智慧物联下主机加固安全解决方案分析

热门文章

  1. 【快乐水题】686. 重复叠加字符串匹配
  2. 【快乐水题】677. 键值映射
  3. jvm垃圾收集器的发展史及回收算法
  4. STM32开发 -- STM32初识
  5. zcmu-1182(大数相减)
  6. 大数据入门基础教程系列
  7. 【译】使用Sovrin构建Android应用程序
  8. python组成三位无重复数字_Python生成十万个无序且唯一的数字
  9. mysql中find_in_set_mysql中find_in_set()函数的使用详解
  10. 小学用计算机画画 说课,小学教师说课稿:《画画美丽的自然景色》