java核心技术10阅读(五)-异常和断言

异常

异常分类

throwable是所有异常类的父类,Error和IOException是非受查类,由系统错误、IO读取读取错误引起,而RuntimeException是受查类,由程序本身错误引起,需要提供异常处理器,例如数组访问越界等问题。
对于一个已经存在的异常类,将其抛出非常容易,在这种情况下:
1 ) 找到一个合适的异常类。 2 ) 创建这个类的一个对象。 3 ) 将对象抛出。
捕获异常
try {}catch{}
对捕获异常和throws异常,通常,应该捕获那些知道如何处理的异常,而将那些不知道怎样处理 的异常继续进行传递。
捕获异常可以在catch中重新包装异常或者抛出新异常。
finally 子句
不管是否有异常被捕获,finally 子句中的代码都被执行。
在对资源进行回收或者关闭时,用finally 是不错的选择。

内层的 try语句块只有一个职责,就是确保关闭输入流。外层的 try语句块也只有一个职 责,就是确保报告出现的错误。这种设计较清晰。

try
{
	try
	{
	....
	}
	finally
	{
	//close resource
	}
}
catch(IOException e)
{
//handle error message
}

如果 try块抛出一个异常,而且 close方法也抛出一个异常,这就会带
来一个难题.,带资源的 try语句可以很好地处理这种情况。原来的异常会重新抛出,而 close 方法抛出的异常会“ 被抑制% 这些异常将自动捕获。假设资源属于一个实现了 AutoCloseable接口的类。
try (Resource res = . . .)
{
work with res
}
分析堆栈轨迹
调用 Throwable 类的getStackTrace方法,等到这个对象数组

Throwable t = new Throwable();
StackTraceElement[] frames = t.getStackTrace();
  for (StackTraceElement f : frames)
         System.out.println(f);    

使用异常的技巧
只在异常情况下使用异常机制,因为异常机制所耗费的时间较长。
将正常处理与错误处理分开。
利用异常层次结构,寻找更加适当的子类或创建自己的异常类。
.在检测错误时,“ 苛刻” 要比放任更好
传递异常要比捕获这些异常更好

断言

断言机制允许在测试期间向代码中插入一些检査语句。当代码发布时,这些插人的检测 语句将会被自动地移走。
断言的两种形式,这两种形式都会对条件进行检测,如果结果为 false, 则抛出一个 AssertionError 异常。 在第二种形式中,表达式将被传人 AssertionError 的构造器,并转换成一个消息字符串。

assert condition;
assert condition: value;

启用和禁用断言
启用或禁用断言是类加载器( class loader ) 的功能。当断言被禁用时,类加载器将跳过断言代码,因此,不会降低程序运行的速度。
java -enableassertions MyApp

使用断言完成参数检查
•断言失败是致命的、不可恢复的错误。
•断言检查只用于开发和测阶段
断言只应该用于在测试阶段确定程序内部的错误位置。
断言对参数的检测取决于这个方法对参数的约束条件。

为文档假设使用断言

发布了15 篇原创文章 · 获赞 1 · 访问量 131

猜你喜欢

转载自blog.csdn.net/qq_17236715/article/details/104875140