11.1 处理异常

当程序出现异常时,应当次啊去一些异常处理措施:

·返回到一种安全状态,并能够让用户执行一些其他命令;

·允许用户保存所有操作结果,并以合适的方式终止程序。


需要关注的异常问题:

1、用户输入错误

2、设备错误

3、物理限制

4、代码错误


异常具有自己的语法和特定的继承结构,下面开始介绍:

11.1.1异常分类

所有已成都由Throwable继承而来,Throwable分为Error和Exception;Exception又分为RuntimeException和IOException。

Error类描述Java运行是系统的内部错误和资源耗尽错误。这种情况很少出现

RuntimeException是由程序本身导致的异常;IOException是由其他问题如I/O问题导致的异常。


RuntimeException的异常有以下几种情况:

·错误的类型转换

·数组访问越界(通过检查数组下标是否越界来避免ArrayIndexOutOfBoundsException异常)

·访问空指针(在使用变量之前检测是否为空来避免NullPointerException异常)

如果出现RuntimeException表明一定是你的问题!!!


IOException的异常包括:

·试图在文件尾部读取数据

·试图打开一个错误格式的URL

·试图根据给定的字符串查找class文件,而这个字符串代表的类不存在


Java规定将派生于Error类和RuntimeException类的异常称为未检查异常,IOException称为已检查异常。


11.1.2声明已检查异常

方法应在首部声明有可能出现的异常。例如,下面是标准类库中提供的FileInputStream类的一个构造器的声明:

  1. public FileInputStream(String name) throws FileNotFoundException  

表示该构造器将根据给定的参数String创建一个FileInputStream对象,也有可能抛出一个FileNotFoundException异常。


遇到以下状况时要抛出异常:

1、调用一个已检查异常的方法

2、程序运行时发现错误,利用throw语句抛出一个已检查异常

3、程序错误

4、JVM和运行时库出现的内部异常


11.1.3如何抛出异常

抛出存在的异常类:

1、找到一个合适的异常类

2、创建这个类的对象

3、将对象抛出。

方法一旦被抛出,这个方法就不能返回到调用者。


11.1.4创建异常类

当遇到任何标准异常类都无法准确描述的问题时,就可以自己创建异常类。要做的是定义一个派生于Exception的类,或派生于Exception的子类。例如:

定义一个派生于IOException的类,定义的类应该包含两个构造器,一个实默认构造器,一个实带有详细描述信息的构造器(超类Throwable的toStrring方法会打印出这些详细信息,这样便于调试)

  1. class FileFormatException extends IOException {  
  2.     public FileFormatException() {}  
  3.     public FileFormatException(String gripe) {  
  4.         super(gripe);  
  5.     }  
  6. }  
  7.   
  8. //现在就可以自定义异常类型了  
  9. String readData(BufferedReader in) throws FileFormatException {  
  10.     ....  
  11.     while(...) {  
  12.         if (ch == 1) {  
  13.             if (n < len)  
  14.                 throw new FileFormatException();  
  15.         }  
  16.         ....  
  17.     }  
  18.     return s;  
  19. }  

API:java.lang.Throwable 1.0

·Throwable()

构造一个新的Throwable对象,该对象没有详细的描述信息

·Throwable(String message)

构造一个新的throwable对象,该对象有详细的描述信息

·String getMessage()

获取Throwable对象的详细描述信息


你可能感兴趣的:(java)