java异常、错误、断言的区别

异常和错误都是在程序运行中出现的破坏性事件。Java 采取的行动称为抛出异常或是抛出错误。Java 基本特性的系统方法抛出异常:

StackOverflowError、ArithmeticException、ArrayIndexOutOfBoundsException、OutOfMemoryError 和NullPointerException 都是典型的例子。

可以创建自己的异常,最简单的一种是RuntimeException,它会中断程序的执行并打印出一条出错信息:
throw new RuntimeException("Error message here.");
一种叫做快速出错的常规编程实践提倡,一旦出错就立刻抛出异常,使定位出错位置更容易(这和忽略错误并将异常推迟到以后处理的方式相反)。

断言是一条需要在程序的某处确认为true 的布尔表达式。如果表达式的值为false,程序将会终止并报告一条出错信息。我们使用断言来确定程序的正确性并记录我们的意图。例如,假设你计算得到一个值并可以将它作为索引访问一个数组。如果该值为负数,稍后它将会产生一条ArrayIndexOutOfBoundsException 异常。但如果代码中有一句assert index >= 0;,你就能找到出错的位置。还可以选择性地加上一条详细的消息来辅助定位bug,例如:
assert index >= 0 : "Negative index in method X";
默认设置没有启用断言,可以在命令行下使用-enableassertions标志(简写为-ea)启用断言。
断言的作用是调试:程序在正常操作中不应该依赖断言,因为它们可能会被禁用。系统编程课程会学习使用断言来保证代码永远不会被系统错误终止或是进入死循环。一种叫做契约式设计的编程模型采用的就是这种思想。数据类型的设计者需要说明前提条件(用例在调用某个方法前必须满足的条件)、后置条件(实现在方法返回时必须达到的要求)和副作用(方法可能对对象状态产生的任何其他变更)。在开发过程中,这些条件可以用断言进行测试。

 

你可能感兴趣的:(java异常、错误、断言的区别)