网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Java 安全性的演变和理念.
.EJB设计模式3.
.怎样用servletrunner来运行Servl.
.DiskSuite做raid 0的note.
.Java Swing入门基础.
.定时打开新窗口并关闭原窗口.
.RMI远程方法调用讲解教程.
.日期的显示格式化.
.JavaApplet编程技巧.
.java.util包.
.垃圾清理势在必行——Java垃圾收.
.Java标准单元测试库 JUnit 4 抢先.
.Struts入门经验(一).
.PNG文件结构分析之二(在手机上生.
.类的深入研究.
.编程必备经典:Java常见问题集锦(.
.Tomcat配置技巧精华详解分析.
.Struts Controller.
.使用布局管理器 呈现生动的JAVA程.
.JBuilder class文件的 .

创建自己的违例

发表日期:2008-1-5



  并不一定非要使用Java违例。这一点必须把握,因为经常都需要创建自己的违例,以便指出自己的库可能生成的一个非凡错误——但创建Java分级结构的时候,这个错误是无法预知的。
  为创建自己的违例类,必须从一个现有的违例类型继续——最好在含义上与新违例近似。继续一个违例相当简单:
  
  //: Inheriting.java
  // Inheriting your own exceptions
  
  class MyException extends Exception {
   public MyException() {}
   public MyException(String msg) {
    super(msg);
   }
  }
  
  public class Inheriting {
   public static void f() throws MyException {
    System.out.println(
     "Throwing MyException from f()");
    throw new MyException();
   }
   public static void g() throws MyException {
    System.out.println(
     "Throwing MyException from g()");
    throw new MyException("Originated in g()");
   }
   public static void main(String[] args) {
    try {
     f();
    } catch(MyException e) {
     e.printStackTrace();
    }
    try {
     g();
    } catch(MyException e) {
     e.printStackTrace();
    }
   }
  } ///:~
  
  继续在创建新类时发生:
  
  class MyException extends Exception {
   public MyException() {}
   public MyException(String msg) {
    super(msg);
   }
  }
  
  这里的要害是“extends Exception”,它的意思是:除包括一个Exception的全部含义以外,还有更多的含义。增加的代码数量非常少——实际只添加了两个构建器,对MyException的创建方式进行了定义。请记住,假如我们不明确调用一个基础类构建器,编译器会自动调用基础类默认构建器。在第二个构建器中,通过使用super要害字,明确调用了带有一个String参数的基础类构建器。
  该程序输出结果如下:
  
  Throwing MyException from f()
  MyException
      at Inheriting.f(Inheriting.java:16)
      at Inheriting.main(Inheriting.java:24)
  Throwing MyException from g()
  MyException: Originated in g()
      at Inheriting.g(Inheriting.java:20)
      at Inheriting.main(Inheriting.java:29)
  
  可以看到,在从f()“掷”出的MyException违例中,缺乏具体的消息。
  创建自己的违例时,还可以采取更多的操作。我们可添加额外的构建器及成员:
  
  //: Inheriting2.java
  // Inheriting your own exceptions
  
  class MyException2 extends Exception {
   public MyException2() {}
   public MyException2(String msg) {
    super(msg);
   }
   public MyException2(String msg, int x) {
    super(msg);
    i = x;
   }
   public int val() { return i; }
   private int i;
  }
  
  public class Inheriting2 {
   public static void f() throws MyException2 {
    System.out.println(
     "Throwing MyException2 from f()");
    throw new MyException2();
   }
   public static void g() throws MyException2 {
    System.out.println(
     "Throwing MyException2 from g()");
    throw new MyException2("Originated in g()");
   }
   public static void h() throws MyException2 {
    System.out.println(
     "Throwing MyException2 from h()");
    throw new MyException2(
     "Originated in h()", 47);
   }
   public static void main(String[] args) {
    try {
     f();
    } catch(MyException2 e) {
     e.printStackTrace();
    }
    try {
     g();
    } catch(MyException2 e) {
     e.printStackTrace();
    }
    try {
     h();
    } catch(MyException2 e) {
     e.printStackTrace();
     System.out.println("e.val() = " + e.val());
    }
   }
  } ///:~
  
  此时添加了一个数据成员i;同时添加了一个非凡的方法,用它读取那个值;也添加了一个额外的构建器,用它设置那个值。输出结果如下:
  
  Throwing MyException2 from f()
  MyException2
      at Inheriting2.f(Inheriting2.java:22)
      at Inheriting2.main(Inheriting2.java:34)
  Throwing MyException2 from g()
  MyException2: Originated in g()
      at Inheriting2.g(Inheriting2.java:26)
      at Inheriting2.main(Inheriting2.java:39)
  Throwing MyException2 from h()
  MyException2: Originated in h()
      at Inheriting2.h(Inheriting2.java:30)
      at Inheriting2.main(Inheriting2.java:44)
  e.val() = 47
  
  由于违例不过是另一种形式的对象,所以可以继续这个进程,进一步增强违例类的能力。但要注重,对使用自己这个包的客户程序员来说,他们可能错过所有这些增强。因为他们可能只是简单地寻找预备生成的违例,除此以外不做任何事情——这是大多数Java库违例的标准用法。若出现这种情况,有可能创建一个新违例类型,其中几乎不包含任何代码:
  //: SimpleException.java
  class SimpleException extends Exception {
  } ///:~
  它要依靠编译器来创建默认构建器(会自动调用基础类的默认构建器)。当然,在这种情况下,我们不会得到一个SimpleException(String)构建器,但它实际上也不会经常用到。
上一篇:RuntimeException的特殊情况 人气:751
下一篇:违例的限制 人气:559
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐