java中的新增的assert断言方法

本文介绍了Java中的assert断言功能,用于简化调试过程。通过在Run Configurations或 Installed JREs设置中启用-ea标志来开启断言。assert关键字用于判断boolean表达式,如果为false则抛出AssertionError。建议在private函数中使用assert检查输入参数,避免在expression1、expression2中使用函数返回值。使用assert时,需确保删除后不影响程序结构。文章提供了一个示例函数和错误处理说明,并提醒读者,若在父类中的assert在子类中为false,会抛出错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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语句删除后,程序的结构就改变了,这不符合上述提到的原则!

   在本节,我们将考虑assertion与继承的关系,研究assert是如何定位的。如果开启一个子类的assertion,那么它的父类的assertion是否执行?

 下面的例子将显示如果一个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







评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值