java的断言(Assert)
1. 断言(Assert [ə'sɝt] vt. 维护,坚持;断言;主张;声称)
作用:其实就是用来调试程序的,不过目测使用的很少。
先来看两个例子,然后再来解释:
1.1. 先定义一个 TestAssert类
1 public class TestAssert{ 2 public static void main(String[] args){ 3 TestAssert ta = new TestAssert(); 4 ta.Test(-99); 5 } 6 7 public void Test(int age){ 8 //assert关键字,再加一个布尔表达式,但表达式结果为false时,程序就会退出 9 //并抛出一个AssertionError,所以断言是error级别的 10 assert age>=0;//满足条件则继续运行 11 System.out.println("继续执行,输入的年龄是:"+age); 12 } 13 }
首先编译 javac TestAssert.java
然后正常执行: java TestAssert,结果是:
启动断言, java -ea TestAssert ,结果是:
或者使用 java -enableassertions TestAssert,结果是一样的:
可以看到,抛出的类型是 java.lang.AssertionError
至于显式关闭断言的命令就不测试了,个人感觉那是脱裤子放屁的事,有兴趣的可以自己测试一下。
1.2. 断言 后面附带信息的例子:
还是使用上面的类 TestAssert,稍作修改:
1 public class TestAssert{ 2 public static void main(String[] args){ 3 TestAssert ta = new TestAssert(); 4 ta.Test(-99); 5 } 6 7 public void Test(int age){ 8 //assert关键字,再加一个布尔表达式,但表达式结果为false时,程序就会退出 9 //并抛出一个AssertionError,所以断言是error级别的 10 assert age>=0:"不能输入这种不合理的年龄啊";//满足条件则继续运行 11 System.out.println("继续执行,输入的年龄是:"+age); 12 } 13 }
首先编译 javac TestAssert.java
然后正常执行: java TestAssert,结果是:
因为默认没开启断言,所以结果还是跟上面一样,
启动断言, java -ea TestAssert ,结果是:
很明显,结果中输出了我们刚刚写的字符串,这样可以增强可读性
或者使用 java -enableassertions TestAssert,结果是一样的:
2. 使用方法,(需要使用命令行)
2.1. 开启断言功能(默认是关闭的)
java -ea TestAssert ----(ea就是enable和assertions的缩写)
或者:java -enableassertions TestAssert
2.2. 关闭(虽然默认是关闭的,但你也可以显示去关闭它,其实这个参数根本没有,哈哈)
java -da TestAssert
或者:java -disableassertions TestAssert
3. 断言的使用格式:
3.1. 普通格式 assert 布尔表达式;
eg: int a = 0;
assert a>100;
3.2. 增强格式 assert 布尔表达式:"字符串";