平台异常1
学习java,离不开给Exception打交道,现通过总结简单问题来学习一下
1.异常分类
异常分为:运行异常/非运行异常
java编译器要求必须对非运行异常必须进行处理(捕捉或抛出),对运行时异常可以不处理.
(1)非运行异常(编译不能通过提示:Unhandled exception type...):
如文件读写时必须进行IOExecption的捕捉.
(2)RuntimeException(所有运行异常的父类)代表运行时由JAVA虚 拟机生成的异常,原因是编程错误。如:
?IndexOutOfBoundsException/ NullPointerException/ IllegalArgumentException
?
2. 什么时候进行try/catch,什么时候进行throws?
见平台异常2 - try/catch or throws
?
3.什么时候自定义异常?
总结:为了给软件试用者提供较规范的错误信息(如 errorCode + ?errorMessage), 使用自定义异常,
这样比单独每个错误直接记录log日志更加简明,便于后期维护.
4.自定义异常的使用?
首先定义的异常需 extends ?Throwable 类,
5.平台的自定义异常?
?
DAOException.java
P2PException.java
PlatformConnectLogOnException.java
PlatformDeliveryException.java
PlatformDownloadException.java
PlatformException.java
PlatformSFTPException.java
PlatformTransformException.java
SyncException.java
MessageException.java
NoAuthenticatedException.java
NoAuthorizedException.java
.....
平台在各个模块基本都定义了本模块的异常, 异常的发生 将会使程序不能正确运行,使用这些自定义异常能使客户从日志中清楚知道 异常代码+异常信息, 使得我们的后期维护具有较高效率.
在以后开发中,当遇到这些情况时,已尝试使用自定义异常.
6.常见的类
6.1 java.lang.Throwable
?所有Error/Exception 的父类; 定义了常见的构造方法如?Throwable(String?message, Throwable?cause);?方法 如printStackTrace()等
?
6.2 Exception
?
所有异常的父类?
?
7.问题:
(1) 每个自定义异常类都有private static final long serialVersionUID = -7564015249480613950L;
这个value是怎么得来的?
为什么可以重复? 见下1L
1.2 异常中定义了大量ErrorCode ,这些Errorcode值怎么确定的?
如PlatformConnectLogOnException.java中 从:10001开始 , ?serial~Id: ?-3966244863223955260L
PlatformDeliveryException.java中 从40001开头?? ??1L
PlatformDownloadException.java从 20001开头 ? ??-5174978579291077870L
PlatformTransformException.java从30001开头 ? ? ?1L
通过分析知:每类异常都以不同的万位数开头, 这样可以方便从日志中知道是哪个功能的异常.
?
(2) 在com.al9202.platform.common.exception包中定义了4个异常类和一个抽象异常类PlatformException.java
这些子类异常都重写了logErrorMessage()方法,但在抛出时,通过构造方法完成调用,并没有调用?logErrorMessage()方法?