参考书籍:Java面向对象程序设计(第二版)--耿祥义 张跃平编著
使用关键字assert声明一条断言语句,断言语句有以下两种格式:
assert booleanExpression;
assert booleanExpression:messageException;
其中,booleanExpression必须是指为boolean型的表达式
messageException可以是值为字符串的表达式
如果使用assert booleanExpression;形式的断言语句,当booleanExpression的值是false时,程序从断言语句处停止执行;当是true时,程序继续执行。
如果使用assert booleanExpression:messageException;形式的断言语句,当booleanExpression的值是false时,程序从断言语句处停止执行,还要输出messageException表达式的值,提示用户出现了什么问题;当是true时,程序继续执行。
注意:
当使用java解释器直接运行应用程序时,默认关闭断言语句,在调试程序时候可以使用-ea启用断言语句,例如:
java -ea mainClass(这个是项目名字)(这个是用在cmd里面玩的)
例子:
package p4;
import java.util.Scanner;
public class P4 {
public static void main(String args[]){
System.out.println("请输入正数确认");
Scanner scan = new Scanner(System.in);
double m=scan.nextDouble(); //输入一个数赋值给m
assert m>0:"负数不能计算平方根"; //如果m>0,则执行下面的语句,如果是false,停止执行
//并把"负数不能计算平方根"打印出来
System.out.println(m+"的平方根是:"+Math.sqrt(m));
}
}
如果我输入-9,输出结果:
请输入正数确认
-9
Exception in thread "main" java.lang.AssertionError: 负数不能计算平方根
at p4.P4.main(P4.java:10)
断言语句在调试代码阶段非常有用,一般用于程序不准备通过捕获异常来处理的错误
在调式时候打开,正式运行时候关闭,但依然把断言语句保留,留待以后调试要用的时候开启断言即可
断言的其他知识:
- 断言可以局部开启,比如:父类禁止断言,而子类开启断言,所以一般说“断言不具有继承性”。
- 如果输入 -da 表示禁止断言
- 有关断言的更多参数(参考别人的)
-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