转载自:http://lavasoft.blog.51cto.com/62575/43735/          第11楼的说法

assert 有很大的用处

首先可以用在单元测试代码中。junit侵入性是很强的,如果整个工程大量的代码都使用了junit,就难以去掉或者是选择另外一个框架。如果单元测试代码很多,并且想复用这些单元测试案例,应该选择assert而不是junit,便于使用别的单元测试框架,比如TestNG。同理正式的功能代码根本就不应该出现Junit,应该使用assert.

assert主要适合在基类,框架类,接口类,核心代码类,工具类中。换言之,当你的代码的调用者是另外一个程序员写得业务代码,或者是另外一个子系统时,就很有必要使用它。比如你做了一个快速排序的算法

public static List quickSort(List list){

assert list != null;

// 申请临时空间

//开始排序

for(int i : list){

//

}

}

这种情况下,如果不检查传入参数的正确性,会抛出一个莫名其妙的空指针错误。你的调用者可能并不清楚你代码的细节,在一个系统的深处调试一个空指针错误是很浪费时间的。就应该直接明确的告诉你的调用者是传入的参数有问题。否则他会怀疑你的代码有BUG。使用assert可以避免两个程序员之间互相指责对方写的代码有问题。

assert适用那些你知道具体是什么错误,你和你的调用者已经约定应该由你的调用者去排除或检查的错误。你通过一个断言告诉你的调用者。assert不适用那些外部系统造成的错误,比如用户输入数据的错误,某个外部文件格式错误。这些错误不是你的调用者而是用户造成的,甚至于不属于异常,因为出现输入错误和文件格式错误是经常的,这些错误应该由业务代码去检查。

assert比较适合于被频繁调用的 基类,框架代码,工具类,核心代码,接口代码中,这正是它在运行时被去掉的原因。测试代码应该在测试阶段开启-ea参数,便于对系统深处的核心代码做仔细的测试。

Java较少使用assert的原因是Java有很完整的OO体系,强制类型转换出现得较少,所以不需要类似c那样需要频繁的检查指针的类型是否正确,指针是否为空。同时Java也很少直接管理内存或缓冲区,所以不需要频繁的检查传入的缓冲区是否为空或者是已经越界。

但使用好assert有助于提高框架代码的正确性和减少框架代码的使用者的调试时间。

java assert int_java中的assert(转载)2相关推荐

  1. junit4 assert类中的assert方法总结

    junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类. 1.assertTrue/False([String message,]boolean cond ...

  2. java integer == int_Java中int和Integer的区别详解

    1.Java 中的数据类型分为基本数据类型和复杂数据类型 int是前者>>integer 是后者(也就是一个类) 2.初始化时>> int i =1; Integer i= n ...

  3. java static int_Java中static关键字概述

    例如一个学生类中,我们需要统计下学生类中学生对象的数量,此时数量要定义为静态变量: 示例代码: package com.java1995; public class Student { int id= ...

  4. java中的assert

    Java陷阱之assert关键字 一.概述 在C和C++语言中都有assert关键,表示断言. 在Java中,同样也有assert关键字,表示断言,用法和含义都差不多. 二.语法 在Java中,ass ...

  5. Java基础の乱弹琴一:assert关键字

    一.概述 assert:表示断言 二.语法 在Java中,assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默 ...

  6. assert文件夹 设置android_android使用build.xml配置assert文件中不压缩的类型文件

    问题: 在做文本文件读取时,从assert文件中获取文件 getResources().getAssets().openFd("test.txt").getFileDescript ...

  7. java assert false_Java陷阱之assert关键字

    Java陷阱之assert关键字 一.概述 在C和C++语言中都有assert关键,表示断言. 在Java中,同样也有assert关键字,表示断言,用法和含义都差不多. 二.语法 在Java中,ass ...

  8. Python中的assert用法

    Python中的assert用法 本文转载自Python中不尽如人意的断言Assertion,如有侵权,立马删除! 使用assert断言是学习Python一个非常好的习惯,Python assert ...

  9. C++中#error/assert/static_assert的区别及使用

    C++ 语言支持可帮助您调试应用程序的三个错误处理机制:#error 指令.static_assert 关键字和 assert (CRT) 宏.所有的三种机制都会发出错误消息. #error可看做预编 ...

最新文章

  1. boost::geometry::partition用法的测试程序
  2. 1035 插入与归并 (25 分)(c++)
  3. 前端学习 -- 内联框架iframe
  4. Python3 嵌套函数
  5. [译] 单元测试,精益创业,以及两者之间的关系
  6. SAP云平台对Kubernetes的支持
  7. CodeSmith--SchemaExplorer类结构详细介绍
  8. linux 定时备份mysql数据库
  9. 可变参数(不定项参数)
  10. Linux关闭开启防火墙命令
  11. 从零开始学前端:形变(小游戏:3D翻滚盒子) --- 今天你学习了吗?(CSS:Day21)
  12. 17.电话号码的字母组合(力扣leetcode) 博主可答疑该问题
  13. 推荐几个很好的资源下载网站
  14. hadoopsnappy解压_Hadoop安装配置snappy压缩
  15. 由frankmocap得到的.pkl文件转为.bvh或者.fbx
  16. 如何用计算机算p,‎App Store 上的“计算器++P”
  17. 基于Matlab的火灾预警系统
  18. mpp文件能转换成PDF
  19. table vue 背景图片_table中background背景图片自动拉伸
  20. dockers 的简单使用

热门文章

  1. 3D建模要学多久才能接外包私活?
  2. 机器学习之监督学习:分类
  3. 微信聊天记录删除了怎么恢复?最简单快捷的恢复方式看这里
  4. 使用HbuilderX 的UNIapp开发app, 打包后定位不能使用的解决方式
  5. 网易云接口手机号验证码验证登录
  6. 信源剩余度的计算java_冗余度计算公式
  7. 禾匠二开系列之兑换码禁用以后启用功能
  8. 网上的打印店能打印图书吗?
  9. draggrid简单用法
  10. 微信小程序之设置所有页面背景颜色