Java面向对象程序设计--异常处理机制

常见的集中程序出错情况:

   1) 用户输入出错:为防止因输入造成的程序异常,在使用之前应该对用户的输入进行有效性检查!

   2) 设备故障:在程序执行的过程中会出现各种各样的程序故障,不如所打印机运行的过程中纸张用尽。

   3) 物理限制:比如运行过程中磁盘写满了,内存溢出了...

   4) 程序出错:比如数组访问越界,访问哈希表中一个不存在的单元,或从空栈中弹出一个元素...

Java异常机制:

   如果一个方法抛出异常,那么调用这个方法的代码也会从这一点终止正常代码的执行而去寻找有没有相应的处理器。

如果有相应的处理器,则进入相应的处理器,如果没有处理器,则向更高一层的方法抛出异常。 

                                    

                                                 Java异常类继承层次 

   从RuntimeException类派生出来的异常类处理以下几个问题:

1).  A bad cast(错误的转型);

2).  数组的越界访问(an out-of-bounds array access);

3).  空引用访问(null pointer access);

   不从RuntimeExceotion类派生出来的异常处理包括以下几个问题:

1).  试图越过文件结束符来读取文件的内容;

2).  试图打开一个错误的URL地址;

3).  试图找到一个不存在的类的对象;

 

面对RuntimeException类的异常,应该通过设计来进行避免:

例如在访问数组的时候,检查下标是否在数组的合理范围之内;

在访问一个对象变量之前,应该检测这个对象变量是否是null;

 

Java 将所有Error类的错误和RuntimeException类的错误称为uncheked exception,而将其他类型的异常都称为checked exception.

对于checked 类型的 exception 需要我们自己提供相应的异常处理!

 

异常一般应该在以下几种情况下被抛出:

 

  1. 你的方法中调用了另外的抛出异常的方法;
  2. 你确实在方法中检测到了一个错误,然后throw出异常;
  3. 你的程序出现问题,比如数组访问越界;
  4. 虚拟机或运行时函数库内部出现错误;

 

1.如何抛出一个异常:

   如果一个异常类已经存在,那么只需要

   1)  找到一个合适的异常类!

   2)  建立一个该异常类的对象!

   3)  抛出这个对象!

 

Java 和 C++抛出异常机制的细微差别:Java抛出的异常对象只能是Throwable类子类的对象。而C++

可以抛出任何类型的对象。

   如果存在的异常类不适合你的需要,你可以自己创建一个异常类,这个异常类派生自某个已经存在的异常类。

 

2. 如何捕捉异常:

对异常的处理原则:通过catch处理能够在当前方法层面处理的异常,而抛出不能在当前方法层面处理的异常而由更高层的

方法来处理。

建议只是将必要的语句放入try中,这样越容易定位异常!

 

 

 

 

 

 

 0p

 

 

 

posted on 2014-05-28 17:13  Dream Catcher(DC)  阅读(421)  评论(0)    收藏  举报

导航