异常和断言的区别

转载 2012年03月22日 14:06:43

异常被捕获后可以不作处理,程序从捕获位置继续执行。而断言是完全无法忽略的,程序在断言失败处立即终止。因此断言通常用于调试版本,用来发现程序中的逻辑错误。虽然异常也能起到这样的作用,但是不应该用异常代替断言:
1) 如果发现了逻辑错误,必须修改程序,而不可能在程序中进行处理和恢复,所以不需要向外传送,没有必要使用异常。
2) 使用断言的开销比异常小得多,而且断言可以从发布版中完全去除。
 

异常用于处理正确程序中的运行期问题(比如内存分配失败,窗口创建失败,线程创建失败,打开文件失败),以尽可能恢复,而不是终止程序。对于运行异常,使用断言是非常不合适的,理由很显然:
1) 断言在发布版不起作用;
2) 断言的处理方式不够友好;
3) 运行异常不是程序错误,没有必要报告源代码出错位置;


断言(Assert)与异常(Exception)

## 断言和异常 断言是用来检查非法情况而不是错误情况的,用来帮开发者快速定位问题的位置。异常处理用于对程序发生异常情况的处理,增强程序的健壮性和容错性。 ## 断言的使用 在防御式编程中经常会用断言...
  • zhaofuxiang
  • zhaofuxiang
  • 2016年11月28日 16:17
  • 1221

C/C++学习笔记八(断言与异常处理)

断言断言是什么?简单而言,断言是对某种假设条件进行检查。 C语言中,在assert.h中,断言被定义为宏的形式(assert(expression)),而不是函数。 assert将通过检查表达式的...
  • u013230511
  • u013230511
  • 2017年08月13日 18:36
  • 232

什么时候用异常,什么时候用断言?

assert用在那些你知道绝对不会发生的事情上,但是因为人总是会犯错误,保不准你写出来的东西跟你想的不一样。所以assert用来捕捉的是程序员自己的错误。 同理,exception捕捉的是用户或者环...
  • seasons1225
  • seasons1225
  • 2016年11月17日 11:56
  • 112

assert与if的区别

assert还是if         在刚开始学习代码的时候,对于程序中检查程序有效性时有时用到assert,有时用if,感到非常困惑。比如,在多数的malloc函数后面对指针进行的操作都是用ass...
  • Silence723
  • Silence723
  • 2016年05月28日 16:21
  • 795

两张图解读Java异常与断言

两张图解读Java异常与断言 分类: J2SE归纳图2015-03-18 10:39 408人阅读 评论(1) 收藏 举报 Java异常断言Exception多图 目录(?)...
  • LLYJ666666
  • LLYJ666666
  • 2015年03月19日 14:27
  • 799

抛出异常和捕获异常的区别

抛出异常:如果程序中出现了异常,没有办法将具体的异常打印出来,不做任何处理   捕获异常:如果程序出现了异常,就能够详细的打印是什么原因导致了异常并且能够做出相应的处理,能够显示详细的Log   如果...
  • hbiao68
  • hbiao68
  • 2013年12月04日 10:14
  • 3883

Java中的异常、断言、日志【草稿中】

(本章主要讲解Java里面比较核心的一块内容——异常处理,Java异常处理机制,一致都是比较复杂的一块,而很多时候如果写程序的时候能够适当地注意对应的一些异常处理情况,那么就会在开发过程节省一大部分时...
  • u011303467
  • u011303467
  • 2013年07月06日 08:17
  • 1036

java 异常 断言

异常 导致异常的原因 1.用户输入错误 2.设备错误 3.物理限制 4.代码错误 异常的分类  所有的异常均有Throwable继承而来,但是在下一层立即分解为两个分支,Erro...
  • seacean2000
  • seacean2000
  • 2013年04月06日 18:45
  • 1712

可捕获异常与不可捕获异常的区别?

先明确概念:抛出指的是不处理,捕获则处理 捕获异常是指发生异常时,最相应处理,避免程序崩溃 抛出异常大概就是让程序知道哪里可能会存在异常,发生异常后,回滚处理...
  • wuruijiang
  • wuruijiang
  • 2018年01月04日 15:41
  • 67

正则表达式的先行断言(lookahead)和后行断言(lookbehind)

正则表达式的先行断言和后行断言一共有4种形式: (?=pattern) 零宽正向先行断言(zero-width positive lookahead assertion) (?!pattern...
  • u012047933
  • u012047933
  • 2014年08月04日 09:52
  • 2650
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:异常和断言的区别
举报原因:
原因补充:

(最多只允许输入30个字)