a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 134|回复: 0

[基础知识] JAVA基础:自定义Java异常

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
 1.前言:   你的轨范总有一天会解体失踪,在解体失踪的时辰我们要知道它在哪,为了什么而解体失踪,数据的保留或者丢失踪情形若何等问题。我们可以经由过程担任类java.lang.Throwable的子类:Exception来设计我们自己的Java异常。Exception类用于描述轨范能够捕捉的异常,如ClassNotFoundException。要注重的是自界说异常类之间也可以有担任关系,同时也需要为自界说异常类设计机关体例,以便利机关自界说异常对象。7 N5 H- l& C& H0 N
2.设计实例剖析:
6 S- C( ?- L7 a! v  这是个斗劲完整的自界说异常类的设计,其实是斗劲模板化的工具。& P$ N/ m6 |  x/ }8 B1 H7 D

1 r" z! T8 S0 M! w: P1 y9 n' G
: \, c9 N3 A6 [ package playground;
. g2 m' s* N0 }) E2 n) Z- U  import java.io.*; : i  P# s8 x4 {: p9 V
  public class MyException extends Exception {
# U7 x8 e* ], I, |- }- Y  private int id; // a unique id : J0 G% |% u1 x( v
  private String classname; // the name of the class
- H. p1 t; F4 Z1 X1 u& {  private String method; // the name of the method
; b* x; [" N# G! J5 ]; \1 S0 |  private String message; // a detailed message 4 l. {! p: Y* M! Q! r
  private MyException previous = / m# V/ S) m; R3 @* Q
  null; // the exception which was caught
' G& T5 _* a5 ^- x  i" P  private String separator = "n"; // line separator
8 b7 t  Z  }9 q; ?" w  public MyException(int id, String classname, String method,
. o, x: @, h3 j" ^/ U: V% V  String message, MyException previous) {
) J4 ~, M7 o- @& `) }  this.id = id;
+ {- k: [* N& s! |  this.classname = classname;
- ~' ^' u8 Q1 G$ s  ^" W  this.method = method;
  O( t9 C% w( Z' ]  this.message = message; 6 o3 R  }, z# C& f+ \* c
  this.previous = previous; ) p6 i( H1 Z9 n2 f" J  u$ H$ S1 N
  }
7 F+ w, G" R! V/ F5 F  public String traceBack() {
" X+ A+ ~% ]! @( y, r  return traceBack("n"); # Z) N; [9 ]- Y$ o; L1 c5 D8 E
  } 5 N+ N6 W, K7 V2 {) b& _/ M4 O
  public String traceBack(String sep) { 5 [+ Z1 F$ M3 @) O
  this.separator = sep; ! l# p: |& r  M! i
  int level = 0; 2 ^2 A$ K7 h+ v9 n4 {* H' L% ?
  MyException e = this; 3 ]/ g& j" N% f3 z4 }8 d
  String text = line("Calling sequence (top to bottom)"); 3 d  P, q5 ~8 f8 x
  while (e != null) { % d: c( T2 j( j/ u' D7 X2 \
  level++; " U( K' l5 ~: l  u1 |
  text += line("--level " + level + "--------------------------------------");
+ R. B7 t" B5 V2 X0 n; J  text += line("Class/Method: " + e.classname + "/" + e.method);
# n& `* q. M5 V$ p  ?% {: Z  text += line("Id : " + e.id); - H! S, G+ S; S/ u
  text += line("Message : " + e.message); & Q4 S8 ~$ u. C! z$ j: ]
  e = e.previous;
5 s) f8 `+ u3 i, Q" N. H1 ]  } , t/ j& l3 N; n) c
  return text;
$ _+ K9 b/ }8 [' J7 K+ c; m  }
3 I! h: K7 m& A1 |  private String line(String s) {
$ r8 w9 `) M' O& B  return s + separator; ) }4 l- Q8 _  H0 P
  } . u0 R0 p6 S5 E3 E5 j
  }   我们来一个个看看这些工具:5 c( t& J& P' V$ z3 Q* [) s
  在这个担任了Exception类的自界说异常类中,我们界说了如下变量:- V& e' d: f4 C+ n
  id:自力标示符,这个是用来进行标示类中什么处所呈现了错误被捕捉到。
. z  ]* J/ z+ T4 m/ D  f# \" E+ O  classname:捕捉到这个错误的类的名字。
3 S' P4 V5 I4 q/ M: `) ^  method:捕捉到这个错误的体例的名字。
/ Y& {: F! r: U  K: X  message:用来描述整个事务的情形。6 Q$ `* W7 n) E8 J3 j) ]8 |
  previous:是MyException得一个实例,若在链表中它是第一个的话,那么它就是null。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-4-29 23:56 , Processed in 0.168669 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表