assert是在J2SE1.4中引入的新特性,assertion就是在代码中包括的布尔型状态,程序员认为这个状态是true。一般来说assert在开发的时候是检查程序的安全性的,在发布的时候通常都不使用assert。在1.4中添加了assert关键字和java.lang.AssertError类的支持。
首先,我们有必要从一个例子说起assert
public class AssertTest
{
public static void main(String[] args)
{
AssertTest at = new AssertTest();
at.assertMe(true);
at.assertMe(false);
}
private void assertMe(boolean boo)
{
assert boo?true:false;
System.out.println("true condition");
}
}
程序中包含了assert的话,你要用javac -source 1.4 xxx.java来编译,否则编译器会报错的。要想让assert得部分运行的话,要使用java -ea xxx来运行,否则包含assert得行会被忽略。下面我们运行
javac -source 1.4 AssertTest.java
java -ea AssertTest
看看结果的输出是:
true condition
Exception in thread "main" java.lang.AssertionError
at AssertTest.assertMe(AssertTest.java:13)
at AssertTest.main(AssertTest.java:7)
当我们运行at.assertMe(true)得时候,由于assert boo?true:false相当于 assert true;因此没有任何问题,程序往下执行打印出true condition,但是执行at.assertMe(false)的时候相当于assert false,这个时候解释器就会抛出AssertionError了,程序就终止了。大家必须清楚AssertionError是继承自Error得,因此你可以不再程序中catch它的,当然你也可以在程序中catch它然后程序可以继续执行。例如:
public class AssertTest
{
public static void main(String[] args)
{
AssertTest at = new AssertTest();
try
{
at.assertMe(true);
at.assertMe(false);
}
catch(AssertionError ae)
{
System.out.println("AsseriontError catched");
}
System.out.println("go on");
}
private void assertMe(boolean boo)
{
assert boo?true:false;
System.out.println("true condition");
}
}
assert还有另外一种表达的方式,就是assert exp1:exp2;其中exp1是个boolean返回值得表达式,而exp2可以是原始的数据类型或者对象都可以例如:
boolean boo = true;
String str = null;
assert boo = false:str="error";
我们刚开始讲得assert exp1得形式,当exp1是false得时候,AssertionError得默认构造器会被调用,但是assert exp1:exp2这样的形式,当exp1为true的时候后面exp2被或略,如果false的话,后面的表达式的结果会被计算出来并作为AssertionError得构造器参数。看下面的例子:
public class AssertTest
{
public static void main(String[] args)
{
AssertTest at = new AssertTest();
at.assertMe(true);
at.assertMe(false);
}
private void assertMe(boolean boo)
{
String s = null;
assert boo?true:false:s = "hello world";
System.out.println("true condition");
}
}运行的时候会得到这样的结果
true condition
Exception in thread "main" java.lang.AssertionError: hello world
at AssertTest.assertMe(AssertTest.java:14)
at AssertTest.main(AssertTest.java:7)
Assert最好不要滥用,原因是assert并不一定都是enable的,下面两种情况就不应该用assert
- 不要再public的方法里面检查参数是不是为null之类的操作
例如public int get(String s)
{
assert s != null;
}
如果需要检查也最好通过if s = null 抛出NullPointerException来检查
- 不要用assert来检查方法操作的返回值来判断方法操作的结果
例如 assert list.removeAll();这样看起来好像没有问题 但是想想如果assert 被disable呢,那样他就不会被执行了 所以removeAll()操作就没有被执行 可以这样代替
boolean boo = list.removeAl();
assert boo;
就说这么多吧,assert是scjp1.4的考试内容 所以还是有必要了解的
分享到:
相关推荐
在标题“Assert使用”中,我们可以理解为这篇文档或博客将详细介绍如何在代码中有效地运用断言(Assert)。 `Assert` 通常在 C++、Java、C# 和 Python 等多种编程语言中被使用,它的主要功能是检查程序中的条件是否...
标题“QtApplets-Q-ASSERT使用”主要探讨的是如何在Qt应用程序中有效地利用`Q_ASSERT`和`Q_ASSERT_X`进行调试。下面将详细解释这两个宏的工作原理、用法以及它们在实际项目中的应用。 1. **Q_ASSERT**: `Q_ASSERT...
STM32 assert_param使用详解 assert_param是一个宏定义,在STM32的固件库和示例程序中广泛使用。它的主要作用是检测传递给函数的参数是否是有效的参数。如果参数无效,assert_param将报告错误,使程序员可以及时...
3. 在开发阶段,合理使用assert来辅助检查程序逻辑,但也不应过度依赖assert,应结合其他调试技术共同使用; 4. assert不是错误处理机制,它不是用来处理那些能够预期到并且能够妥善处理的情况,而是用来快速发现和...
在本篇文章中,我们将深入探讨如何在VC中使用`assert`断言,以及它在软件开发中的作用。 `assert`宏定义在`<assert.h>`头文件中,主要用于测试假设条件。当程序运行到含有`assert`的语句时,如果表达式的值为零(即...
C语言头文件 ASSERTC语言头文件 ASSERTC语言头文件 ASSERTC语言头文件 ASSERTC语言头文件 ASSERTC语言头文件 ASSERTC语言头文件 ASSERTC语言头文件 ASSERTC语言头文件 ASSERTC语言头文件 ASSERTC语言头文件 ASSERTC...
使用assert断言是学习python一个非常好的习惯,python assert 断言句语格式及用法很简单。在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件时就崩溃,这时候就需要...
assert.h头文件下载
以下是关于C语言中使用 ASSERT 进行调试的八个技巧。 1. 理解 ASSERT 的定义:在程序的某个特定点,断言会检查一个布尔表达式是否为真。如果该表达式为假,就意味着程序中存在缺陷。因此,断言是对程序状态的假设,...
在这个“systemverilog设计:assert应用的例子(ncverilog测试过的)代码”中,我们可以期待看到一些使用`assert`的示例,这些示例已经通过了ncverilog仿真器的验证。ncverilog是由Cadence公司开发的一种流行的...
在IT行业中,异常处理是系统稳定性和健壮性的重要组成部分,尤其是在使用Spring Boot进行Web开发时。本项目“业务异常提示处理 springboot+Assert(自定义断言)”着重于利用Spring Boot的特性来构建高效、易维护的...
Visual Assert is a Visual Studio® AddIn that allows you to easily write, manage, run, and debug your C/C++ unit tests – without ever leaving the Visual Studio® IDE. No fiddling with command line ...
对于开始学vc的人,对于assert,assert_valid,verify,trace的宏感到很奇怪,总是觉得很难掌握似的,其实这些主要是没有理清楚他们各自宏之间深层次的意义。
在 STM32 开发过程中,为了确保程序的稳定性和可靠性,经常需要使用到断言(assert)来验证函数参数的有效性。`assert_param` 是一个用于参数验证的宏,在 STM32 的开发库中被广泛使用。 #### 二、assert_param 的...
在断言失败的情况下,console.assert使用util.format方法来格式化错误信息,并将这个信息作为参数传递给assert.ok函数。assert模块的ok函数本质上是一个检查值是否为真值的方法,如果检查失败,会抛出一个...
Java断言(assert) Java断言是一种 debugging 机制,允许开发者在Java程序中添加检查点,以确保程序的正确性。断言可以在开发和测试阶段使用,以确保程序的正确性和可靠性。 Java断言的历史 Java断言是从 JDK 1.4 ...
assert()宏是用于保证满足某个特定条件。 用法是: assert(表达式); 如果表达式的值为假,整个程序将退出,并输出一条错误信息。如果表达式的值为真则继续执行后面的语句...使用这个宏前需要包含头文件assert.h 例如
适用于Java大部分非空判断,有效的减少空指针问题,直接调用Assert 里面的方法就行,非常方便,你值得拥有