java语言在发展的时候,对于调试员来说,调试工作是很累人的,但是java里的发展却在一定程度上方便了他们,现在就有一个断言的功能,就是说,可以使用assert关键字来判断一个boolean的属性,到底是true还是false,不过一些编程用的软件eclipse和myeclipse默认情况下并没有开启这个功能,
Eclipse中如何开启断言(Assert),方法有二:1.Run -> Run Configurations -> Arguments页签 -> VM arguments文本框中加上断言开启的标志:-enableassertions 或者-ea 就可以了,就是在这里的方框里边直接输入就可以了,当然你也可以输入-da,这个是用来 关闭 这个功能的,当然一般情况下,我们都会把这里边的都开着,另外杠杠的-ea命令是打开用户定义的包,但是如果需要打开系统定义的包,还是需要输入-esa 在输入完-ea之后换行,然后再输入-esa,记住,这里没有任何的空格!!!输入完之后就点击run确认了就可以了。
2.在myEclipse中,Windows -> Preferences ->Java ->Installed JREs ->点击正使用的JDK ->Edit ->Default VM Arguments文本框中输入:-ea(本人采用了此方法,这个也只是一样的)
现在我们可以来测试下到底是不是成功了的,我们就在main函数里边调用下我给大家写的这个函数 public static String isAssertionOk(){
boolean ok=false;
assert ok=true;
return ok?"恭喜你,Assert功能已经开启成功":"抱歉,Assert功能还没有开启成功,"
+ "请重新查看上边的方法,谢谢";
}
</pre>运行结果是什么?<p></p><pre code_snippet_id="1973934" snippet_file_name="blog_20161108_3_5077345" name="code" class="plain">程序错误
-------------
程序正常
-------------
it is true!
null
s=null
检查字符串null是不是空串 true s=null
检查字符串null是不是空串 true
看完了这个,我想你应该有很多的感触吧!
这个功能可以判断一个boolean类型是不是true,如果是,那么对应于assert boolean :"程序错误";这样的语句,如果boolean是真的,那么冒号后边的就不会读取。如果是假的,那么冒号后边的就会被读取为错误信息,也就是会抛出一个错误,这个错误的类型是AssertionError,所以在这里就需要一个try...catch语句,
assert expression1;
assert expression1:expression2;
如果expression1为true,则不抛出错误,程序正常运行,expression2也不会执行。
如果expression1为false,则抛出异常,程序中断跳出,expression2执行。
一般来说,不要在expression1、expression2中使用函数的返回值;
不要将其使用在public函数中检查输入参数,但可以用于private函数中检测输入参数。
使用时,编译时需要用javac -source;执行时需要使用Java -ea。
个人的一点理解:使用assert只是为了帮助我们调试程序,因此使用assert所遵循的原则就是“不能因为有了assert的存在而使程序的结构发生任何的改变”,说白了就是“如果把assert部分删除了,程序依然不会有任何的问题,只不过不能帮助我们检查出一些错误来了”,因此使用assert的时候不应该在表达式中使用函数,因为一旦把这句assert语句删除后,程序的结构就改变了,这不符合上述提到的原则!
下面的例子将显示如果一个assert语句在父类,而当它的子类调用它时,该assert为false。我们看看在不同的情况下,该assertion是否被处理。
class Base {
public void baseMethod() {
try {
assert false:"Assertion failed:This is base";// 总是assertion失败
} catch (Throwable e) {
// TODO: handle exception
Cout.addLine(e.getMessage());
}
System.out.println("Base Method");
}
}
class Exercise extends Base {
public void derivedMethod() {
try {
assert false : "Assertion failed:This is derive";// 总是assertion失败
} catch (AssertionError e) {
// TODO: handle exception
Cout.addLine(e.getMessage());
}
System.out.println("Derived Method");
}
public static void f() {
try {
assert false : "111";
} catch (AssertionError e) {
// TODO: handle exception
Cout.addLine(e.getMessage());
}
}
public static void main(String[] args) {
Exercise derived=new Exercise();
derived.baseMethod();
derived.derivedMethod();
}
}
运行结果是:
Assertion failed:This is base
Base Method
Assertion failed:This is derive
Derived Method
现在应该懂了吧!!!
如果还是有疑问的,可以加我qq 2553627958