异常是一种特殊的类,在创建异常时会保存创建时的方法调用堆栈镜像。即,为了保留异常出现时的实时堆栈信息,不应复用异常,每个异常均需单独new方式生成。
下面演示一段有问题的代码并进行分析
1、问题代码
a)自定义异常定义
- package demo.bce;
- public class MyException extends RuntimeException {
- private static final long serialVersionUID = -3802919537257556719L;
- private String id;
- public MyException(String id) {
- super();
- this.id = id;
- }
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- @SuppressWarnings("unused")
- private MyException() {
- }
- }
|
b)自定义异常常量
- package demo.bce;
-
- public final class MyExceptionContext {
-
-
-
- public static final MyException x1 = new MyException("X1");
- public static final MyException x2 = new MyException("X2");
-
- }
|
c)测试代码
package demo.bce;
- public class MyMain {
- public static void main(String[] args) {
- testx();
- }
-
- private static void testx() {
- try {
- x11();
- } catch (Exception e) {
- e.printStackTrace();
- }
- try {
- x12();
- } catch (Exception e) {
- e.printStackTrace();
- }
- try {
- x21();
- } catch (Exception e) {
- e.printStackTrace();
- }
- try {
- x22();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- private static void x11() {
- throw MyExceptionContext.x1;
- }
- private static void x12() {
- throw MyExceptionContext.x2;
- }
- private static void x21() {
- throw MyExceptionContext.x1;
- }
- private static void x22() {
- throw MyExceptionContext.x2;
- }
- }
|