01 java断言assert初步使用:断言开启、断言使用
参考文件:http://blog.sina.com.cn/s/blog_59c9412d0100fd55.html
1 说明
java断言assert是jdk1.4引入的。
jvm断言默认是关闭的。
断言可以局部开启的,如:父类禁止断言,而子类开启断言,所以一般说“断言不具有继承性”。
断言只适用复杂的调式过程。
断言一般用于程序执行结构的判断,千万不要让断言处理业务流程。
2 判断eclipse是否开启了断言
代码如下:
public static void main(String args[]) {
boolean isOpen = false;
// 如果开启了断言,会将isOpen的值改为true
assert isOpen = true;
// 打印是否开启了断言,如果为false,则没有启用断言
System.out.println(isOpen);
}
3 eclipse 中开启和关闭断言
选择菜单:run --> run Configurations
打开断言:-ea
关闭断言:-da,或者删除-ea

3 断言使用
3.1 第一种使用方法
/**
* 断言的使用方法一
*/
public static void useAssertExt1() {
boolean isOk = 1 > 2;
assert isOk;
System.out.println("程序正常");
}
执行的结果如下:
Exception in thread "main" java.lang.AssertionError
at com.rollercoaster.codecomplete.AboutAssertion.useAssertExt1(AboutAssertion.java:43)
at com.rollercoaster.codecomplete.AboutAssertion.main(AboutAssertion.java:16)
说明:
显然isOk为false,所以抛出AssertionError
3.2 第二种使用方法
/**
* 断言的第一个例子
*/
public static void useAssertExt2() {
boolean isOk = 1 > 2;
try {
assert isOk : "程序错误";
System.out.println("程序正常");
} catch (AssertionError err) {
System.out.println(err.getMessage());
}
}
运行结果如下:
程序错误
说明
assert后面跟个冒号表达式。如果冒烟前为true,则冒号后面的被忽略,否则抛出AssertionError,错误内容为冒号后面的内容。
按F3查看源代码,如下,可以看到AssertionError是继承自Error,而不是Exception,所以catch部分用Exception是不能捕捉到AssertionError信息的。
// (version 1.7 : 51.0, super bit)
public class java.lang.AssertionError extends java.lang.Error {...
5 有关断言的更多参数(转帖一下):
-ea java -ea 打开所有用户类的assertion
-da java -da 关闭所有用户类的assertion
-ea:<classname> java -ea:MyClass1 打开MyClass1的assertion
-da:<classname> java -da: MyClass1 关闭MyClass1的assertion
-ea:<packagename> java -ea:pkg1 打开pkg1包的assertion
-da:<packagename> java -da:pkg1 关闭pkg1包的assertion
-ea:... java -ea:... 打开缺省包(无名包)的assertion
-da:... java -da:... 关闭缺省包(无名包)的assertion
-ea:<packagename>... java -ea:pkg1... 打开pkg1包和其子包的assertion
-da:<packagename>... java -da:pkg1... 关闭pkg1包和其子包的assertion
-esa java -esa 打开系统类的assertion
-dsa java -dsa 关闭系统类的assertion
综合使用 java -dsa:MyClass1:pkg1 关闭MyClass1和pkg1包的assertion
01 java断言assert初步使用:断言开启、断言使用的更多相关文章
- K:java 断言 assert 初步使用:断言开启、断言使用
@转自天地悠悠的个人博客 主要总结一下在eclipse中如何使用断言. (一)首先明确: java断言Assert是jdk1.4引入的. jvm 断言默认是关闭的. 断言是可以局部开启的,如:父类禁止 ...
- java断言assert初步使用:断言开启、断言使用
1 说明 java断言assert是jdk1.4引入的. jvm断言默认是关闭的. 断言可以局部开启的,如:父类禁止断言,而子类开启断言,所以一般说“断言不具有继承性”. 断言只适用复杂的调式过程. ...
- java 中的断言assert的使用
一.assertion的意义和用法 J2SE 1.4在语言上提供了一个新特性,就是assertion功能,它是该版本在Java语言方面最大的革新. 从理论上来说,通过 assertion方式可以证明程 ...
- Java断言assert
public class Welcome{ public static void main(String[] args){ assert false; System.out.println(" ...
- java的断言(assert)
概述 在C和C++语言中都有assert关键,表示断言.在Java中,同样也有assert关键字,表示断言,用法和含义都差不多.在Java中,assert关键字是从JAVA SE 1.4 引入的,为了 ...
- Java中的断言assert
Java陷阱之assert关键字 一.概述 在C和C++语言中都有assert关键,表示断言. 在Java中,同样也有assert关键字,表示断言,用法和含义都差不多. 二.语法 在J ...
- Eclipse中如何开启断言(Assert),方法有二
Eclipse中如何开启断言(Assert),方法有二:1.Run -> Run Configurations -> Arguments页签 -> VM arguments文本框中加 ...
- Java 之 assert (断言)
我们知道C/C++语言中有断言的功能(assert).在Java SE 1.4版本以后也增加了断言的特性. 断言是为了方便调试程序,并不是发布程序的组成部分.理解这一点是很关键的. 默认情况下,JVM ...
- Java中assert(断言)的使用
Java中assert(断言)的使用 1.Eclipse中默认assert(断言)是关闭,开启方式如下: 简单来说:就是设置一下jvm的参数,参数是-enableassertions或者-ea(推荐) ...
随机推荐
- Java基础学习-代码块
/*代码块: * 用{}修饰的代码 * 1.局部代码块:控制变量,存在方法中,控制变量的生命周期(作用域) * 2.构造代码块:提取构造方法中的共性,每次创建对象,都会执行,并且在构造方法执行之前执行 ...
- Report: Disappearing Wetlands Put Planet Life at Risk
A new report warns that wetlands are disappearing three times faster than the world’s forests, with ...
- openlayers自定义图层控制的实现
好久没写博文了,今天出来冒个泡. 最近一直在考虑一件事情,那就是openlayers中自定义wms的图层控制.用过openlayers的人都知道,在openlayers中有自带的图层控制的控件,调用方 ...
- Nodejs-cli 填坑记
真的是玩玩没想到,一个cli竟然坑了我这么久,想当年写Python命令行工具的时候,哪有这么麻烦?随随便便写几下,添加个批处理命令脚本就搞定了.怎么Nodejs写一个就这么不顺利呢? 吐槽归吐槽,当我 ...
- 你必须知道的495个C语言问题,学习体会一
C语言作为一门古老的语言,其灵活性和容易出错都让人 又爱又恨,书籍<你必须知道的495个C语言问题>,使用问答的形式,告诉读者 C语言使用的各个方面的知识,包括一些冷知识等.以下,我要摘录 ...
- 使用MS VS的命令来编译C++程序
以前,我是在linux下使用命令或者makefile来编译C++程序的,最近需要在windows上做点测试.于是使用ms VS来作为开发工具,这种大揽全包的IDE确实好用:点一下菜单,编译结果就出来了 ...
- SSH实现远程控制
SSH(Secure Shell)是一种能够提供安全远程登录会话的协议,使用ssh可以在远程linux中执行命令. sshd服务提供两种安全验证的方法: (1)基于口令的安全验证:经过验证帐号与密码即 ...
- HttpWebRequest传值
From:发送方 class Program { static void Main(string[] args) { string strId = "zhangsan"; &quo ...
- c语言中指针的一个小错误
在定义指针后需要给指针赋值然后才能使用*p赋值或被赋值,这是个基础问题,没有理解,导致出问题. 空指针 ,也称悬 游指 针 ,是使 用 未初 始化 的指 针 .指针变量未初始化时它的值不是没有 ,而是 ...
- Oracle终极数据恢复,孰弱孰强(DUL vs AUL)
这几天在帮朋友作数据恢复,由于已经到了无可救药的地步,只能使用终极手段进行恢复,直接从文件中读取数据进行恢复. 在恢复过程中反复对比了DUL和dcba的AUL,感觉到了两者的不同. DUL在处理文件损 ...