异常、断言

一、异常分类

异常对象都是派生于Throwable类的一个实例。

。、

 

Error类层次结构描述了java运行时系统的内部错误和资源耗尽错误。这种情况很少出现。

需要关注的是Exception层次结构。下面又划分了两个层次。由程序错误导致的异常属Runtime Exception;剩下的属于其他异常。

   派生于RuntimeException的异常包含下面几种情况:

  •    错误的类型转换。
  •    数组访问越界。
  •    访问null指针。

   不是派生于RuntimeException的异常包括:

  •    试图在文件尾部后面读取数据。
  •    试图打开一个不存在的文件。
  •    试图根据给定的字符串查找Class对象,而这个字符串表示的类并不存在。

 

Java语言规范将派生于Error类或Runtime Exception类的所有异常成为非受查异常,所有其他的异常称为受查异常

二、抛出异常

 

需要记住在遇到下面4种情况下应该抛出异常;

(1)   调用一个抛出受查异常的方法

(2)   程序运行过程中发现错误,并且利用throw语句抛出一个受查异常

(3)   程序出现错误

(4)   Java虚拟机和运行时库出现的内部错误。

 

对于在程序中可能出现的受查异常,需要在方法的首部声明这个方法可能抛出的异常,如果一个方法有可能抛出多个受查异常类型,那么就必须在方法的首部列出所有的异常类。每个异常类之间用逗号隔开。不需要声明Java的内部错误,即从Error继承的错误也不声明从Runtime Exception继承的那些非受查异常

 

对于一个已经存在的异常类抛出异常的步骤:

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

(2)   创建这个类的一个对象。

(3)   将对象抛出

 

也可以自己创建一个异常类。

 

三、捕获异常

  想要捕获异常,必须设置try/catch语句块。通常,应该捕获那些知道如何处理的异常,而将那些不知道怎么处理的异常继续传递(在方法的首部添加一个throws说明符)。

  如果要捕获多个异常,可以编写多个catch语句,也可以在一个catch语句中捕获多个异常类型。

使用异常机制的技巧:

1、 异常处理不能代替简单的测试。

2、 不要过分的细化异常。

3、 利用异常层次结构。

4、 不要压制异常。

5、 在检测错误时,“苛刻”要比放任更好

6、 不要羞于传递异常。

 

四、断言

断言机制允许在测试期间向代码中插入一些检查语句。当代码发布时,这些插入语句将会被自动移走。

Java语言引入了关键字assert。这个关键字有两种形式;

  • assert 条件;
  • assert 条件:表达式;

如果检查的条件是false,则抛出一个AssertionError异常。在第二种形式中,表达式将被传入AssertionError的构造器,并转换成一个消息字符串。

在默认情况下,断言被禁用。可以在运行程序时用 –enableassertions或 –ea选项开启:java –enableassertions MyApp。也可以在某个类或整个包中使用断言:

例如 java –ea:MyClass –ea:com.mycompany.mylib…MyApp

也可以用选项 =disableassertions或 –da禁用某个特定类和包的断言。

 


 

posted on 2018-03-01 17:45  三分零一秒  阅读(207)  评论(0编辑  收藏  举报