`

assert断言的陷阱

 
阅读更多
assert关键字用法简单,但是使用assert往往会让你陷入越来越深的陷阱中。应避免使用。笔者经过研究,总结了以下原因:
 
1、assert关键字需要在运行时候显式开启才能生效,否则你的断言就没有任何意义。而现在主流的Java IDE工具默认都没有开启-ea断言检查功能。这就意味着你如果使用IDE工具编码,调试运行时候会有一定的麻烦。并且,对于Java Web应用,程序代码都是部署在容器里面,你没法直接去控制程序的运行,如果一定要开启-ea的开关,则需要更改Web容器的运行配置参数。这对程序的移植和部署都带来很大的不便。
 
2、用assert代替if是陷阱之二。assert的判断和if语句差不多,但两者的作用有着本质的区别:assert关键字本意上是为测试调试程序时使用的,但如果不小心用assert来控制了程序的业务流程,那在测试调试结束后去掉assert关键字就意味着修改了程序的正常的逻辑。
 
3、assert断言失败将面临程序的退出。这在一个生产环境下的应用是绝不能容忍的。一般都是通过异常处理来解决程序中潜在的错误。但是使用断言就很危险,一旦失败系统就挂了。
 
对assert的思考
 
assert既然是为了调试测试程序用,不在正式生产环境下用,那应该考虑更好的测试JUint来代替其做用,JUint相对assert关键的所提供的功能是有过之而无不及。当然完全可以通过IDE debug来进行调试测试。在此看来,assert的前途一片昏暗。
 
因此,应当避免在Java中使用assert关键字,除非哪一天Java默认支持开启-ea的开关,这时候可以考虑。对比一下,assert能给你带来多少好处,多少麻烦,这是我们选择是否使用的的原则。
分享到:
评论

相关推荐

    Java陷阱之assert关键字

     在Java中,assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默认是不启动断言检查的(这个时候,所有的断言语句都将忽略!),如果要开启断言...

    Java陷阱之assert关键字详解

    描述中“详细介绍了Java陷阱之assert关键字”表明了文章将系统性地讲解assert关键字的各个方面,而“有需要的朋友可以参考一下”则意味着这篇文章为那些需要深入了解Java断言功能的开发者提供了参考。 在标签中,...

    java面试中的陷阱java面试中的陷阱

    #### 四、断言(assert)的使用 - 断言是一种程序调试工具,用于验证程序中的假设条件是否成立。如果断言表达式的值为false,则会抛出AssertionError异常。 - 断言的基本语法如下: ``` assert expression1; ...

    Java面试中的陷阱

    至于断言(assert),它主要用于调试,帮助检测程序中的错误。断言表达式在开发阶段被启用,用于检查假设条件是否满足。在生产环境中,断言通常是关闭的,以避免影响性能。 面试中回答这些问题时,不仅要理解每个...

    JAVA面试陷阱(网摘)

    - `assert`语句用于调试,如果断言表达式计算结果为`false`,会抛出AssertionError。默认情况下,断言是关闭的,可以通过编译或运行时标志启用。 7. **Collection 和 Collections的区别** - Collection是所有集合...

    Java 面试中的陷阱

    7. **assert关键字**:用于断言,用于调试目的,只有在编译时开启断言(-ea)才会生效。 8. **GC(Garbage Collection)**:Java的自动内存管理机制,负责回收不再使用的对象所占用的内存,避免内存泄漏。 9. **...

    Java程序员面试可能遭遇的30个技术陷阱解析.doc

    Java程序员在面试中可能会遇到各种技术陷阱,这些陷阱涵盖了语言特性和常见的编程概念。以下是针对提供的部分内容进行的详细解析: 1. **final, finally, finalize的区别** - `final` 关键字用于声明不可变的类、...

    Java程序员面试陷阱大全.doc

    Java 程序员在面试过程中经常会遇到一些陷阱性的问题,这些问题旨在考察候选人的基础知识、理解深度以及问题解决能力。以下是一些重要的知识点解析: 1. **final, finally, finalize的区别** - `final`:这是一个...

    java面试陷阱集合

    7. **assert**:assert用于断言,用于在开发阶段检查程序的正确性,生产环境中通常关闭。 8. **Garbage Collection (GC)**:GC是Java自动内存管理机制,回收不再使用的对象占用的内存。需要GC以防止内存泄漏。 9. ...

    Java程序员面试可能遭遇的30个技术陷阱解析.pdf,这是一份不错的文件

    Java编程语言在面试中常常涉及众多技术...以上就是Java面试中常见的技术陷阱和解析,理解并掌握这些概念对于成为一名合格的Java程序员至关重要。在面试中,能够深入解释这些知识点将展示出扎实的理论基础和技术实力。

    Java程序员应聘100例技术陷阱解析.doc

    Java程序员在面试中可能会遇到各种技术陷阱,这些陷阱主要涵盖了语言特性和常用库的理解。以下是对这些知识点的详细解析: 1. **final, finally, finalize的区别**: - `final`:用来修饰类、方法和变量,表示不可...

    Java陷阱一箩筐

    Java语言在设计上有着丰富的特性和机制,但同时也存在一些陷阱和细节问题,这使得面试时经常出现一些挑战性的题目。下面将详细解释标题和描述中提到的一些关键知识点。 1. **final, finally, finalize的区别**: -...

    java陷阱一箩筐 面试笔试试题

    - `assert` 用于断言,帮助调试,只有在启动 Java 时开启 `-ea` 参数,断言才会生效。 8. **GC(Garbage Collection)**: - GC 是垃圾收集器,自动回收不再使用的对象,释放内存。 - 之所以需要 GC,是因为 ...

    java面试陷阱

    - `assert`关键字主要用于调试目的,可以在程序中插入断言来验证假设条件是否成立。 - 使用`assert`时,如果表达式为false,则会抛出`AssertionError`异常。 - 断言默认是禁用的,可以通过编译器选项或运行时参数来...

    Java陷阱一箩筐.doc

    7. **assert**:用于断言,用于测试和调试,只有在启动 Java 虚拟机时启用 `-ea` 参数才会生效。 8. **GC (Garbage Collector)**:Java 的垃圾回收机制,自动回收不再使用的对象,以避免内存泄漏。 9. **String s ...

    1994-1999年二级C真题

    此外,错误处理和调试技巧也成为了考察的内容,考生需要学会利用assert断言和调试工具来定位程序问题。 附带的答案部分,不仅给出了每个题目的正确解答,还可能包含了解题思路和常见陷阱的分析,这对于自我检测和...

Global site tag (gtag.js) - Google Analytics