Java 之 assert (断言)
我们知道C/C++语言中有断言的功能(assert)。在Java SE 1.4版本以后也增加了断言的特性。
断言是为了方便调试程序,并不是发布程序的组成部分。理解这一点是很关键的。
默认情况下,JVM是关闭断言的。因此如果想使用断言调试程序,需要手动打开断言功能。在命令行模式下运行Java程序时可增加参数-enableassertions或者-ea打开断言。可通过-disableassertions或者-da关闭断言(默认情况,可有可无)。
断言的使用:
断言是通过关键字assert来定义的,一般的,它有两种形式。
1. assert <bool expression>; 比如 boolean isStudent = false; assert isStudent;
2. assert <bool expression> : <message>; 比如 boolean isSafe = false; assert isSafe : "Not Safe at all";
光说无用,举几个简单的例子:
第一种形式:
-
public class AssertionTest {
-
-
public static void main(String[] args) {
-
-
boolean isSafe = false;
-
assert isSafe;
-
System.out.println("断言通过!");
-
}
-
}
如果是在命令行模式下运行,需要指明开启断言功能。如
java -ea AssertionTest
如果是在IDE下,比如Eclipse,可这样设置: Run as -> Run Configurations -> Arguments -> VM arguments:敲入-ea即可。
输出结果:
Exception in thread "main" java.lang.AssertionError
at AssertionTest.main(AssertionTest.java:8)
第二种形式:
-
public class AssertionTest {
-
-
public static void main(String[] args) {
-
-
boolean isSafe = false;
-
assert isSafe : "Not safe at all";
-
System.out.println("断言通过!");
-
}
-
}
输出结果:
Exception in thread "main" java.lang.AssertionError: Not safe at all
at AssertionTest.main(AssertionTest.java:7)
第二种形式和第一种的区别在于后者可以指定错误信息。
陷阱:
断言只是为了用来调试程序,切勿将断言写入业务逻辑中。比如考虑下面这个简单的例子:
-
public class AssertionTest {
-
-
public static void main(String[] args) {
-
-
assert ( args.length > 0);
-
System.out.println(args[1]);
-
}
-
}
该句assert (args.length >0)和if(args.length >0)意思相近,但是如果在发布程序的时候(一般都不会开启断言),所以该句会被忽视,因此会导致以下
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at AssertionTest.main(AssertionTest.java:7)
更好的替代品:
JUnit。
Java 之 assert (断言)的更多相关文章
- Java中assert(断言)的使用
Java中assert(断言)的使用 1.Eclipse中默认assert(断言)是关闭,开启方式如下: 简单来说:就是设置一下jvm的参数,参数是-enableassertions或者-ea(推荐) ...
- 关于java中assert(断言)的使用讲解
说明:写的不是很全面,有任何问题请留言,多交流,谢谢! 1.eclipse.myeclipse开启assert(断言),默认是关闭,如下: 说白了就是设置一下jvm的参数,参数是-ea或者-enabl ...
- Java使用assert断言
Java1.4后新增assert关键字 Idea中开启assert断言 使用 assert boolean表达式 assert boolean表达式 : 错误提示信息 例子 public static ...
- java 中的断言assert的使用
一.assertion的意义和用法 J2SE 1.4在语言上提供了一个新特性,就是assertion功能,它是该版本在Java语言方面最大的革新. 从理论上来说,通过 assertion方式可以证明程 ...
- Java中的断言assert
Java陷阱之assert关键字 一.概述 在C和C++语言中都有assert关键,表示断言. 在Java中,同样也有assert关键字,表示断言,用法和含义都差不多. 二.语法 在J ...
- Java中的断言assert的用法
Java陷阱之assert关键字 一.概述 在C和C++语言中都有assert关键,表示断言. 在Java中,同样也有assert关键字,表示断言,用法和含义都差不多. 二.语法 在Java中,ass ...
- Spring Assert 断言
Assert(断言)的初步理解构思 Web 应用在接受表单提交的数据后都需要对其进行合法性检查,如果表单数据不合法,请求将被驳回.类似的,当我们在编写类的方法时,也常常需要对方法入参进行合 法性检查, ...
- Spring Framework 的 Assert断言
知识共享才能传播,博采众家之长,才能推陈出新!-- 参考 https://www.cnblogs.com/hwaggLee/p/4778101.html 一.什么是 Assert(断言)? Web 应 ...
- C++ ASSERT() 断言机制
C++ ASSERT() 断言机制 ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行.如果表达式不为0,则继 ...
- 两张图解读Java异常与断言
两张图解读Java异常与断言 --转载请注明出处:coder-pig 本节引言: 前天公布的"七张图解析Java多线程&quo ...
随机推荐
- 1.3 Quick Start中 Step 1: Download the code官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ 不要局限于,这个版本,我只是以最新的版本,来做个引子,让大家对官网的各个kafka版 ...
- java poi 向excel写入图片
import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; impo ...
- UML学习之用例图
在UML的整个学习过程中,9种图(用例图.活动图.状态图.顺序图.类图.对象图.协作图.组件图.部署图)的学习以及常用开发.建模工具的使用是最为重要的一个阶段,它是进行UML建模的基础.在本篇文章中首 ...
- PHP中 “ . ” 和 “ ,”的区别
在PHP中,“ . ”可以串接两个变量.而“ , ”却没什么用处.
- programming+windows+MFC
1)CMyApp declares no data members 2)CWinApp::InitInstance run after application build but before the ...
- [TypeScript@2.5] Omit catch error block if not needed
From TypeScript@2.5, you can omit catch error block. Before: try { throw new Error('whatever'); } ca ...
- Android 最简洁的获取联系人头像的代码
ContentResolver cr = view.getContext().getContentResolver(); Uri uri = ContentUris.withAppendedId(Co ...
- set_fix_multiple_port_nets
set_fix_multiple_port_nets -all -buffer_constants 加上这个命令之后 综合之后的网表就不会出现assign语句 否则会出现
- android 消息系统Handler、MessageQueue、Looper源代码学习
android消息系统 总体框架如图所看到的 在安卓的消息系统中,每一个线程有一个Looper,Looper中有一个MessageQueue,Handler向这个队列中投递Message,Looper ...
- UWP 新手教程1——UWP的前世今生
文件夹 引言 设备族群 UI 和通用输入模式 通用控件和布局面板 工具 自适应扩展 通用输入处理 引言 在本篇文章中,可以掌握下面知识: 设备族群,怎样决定目标设备 新的UI控件和新面板帮助你适应不同 ...