`
Tonyguxu
  • 浏览: 279557 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【core java】java assert的用法

阅读更多

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

1 不要再 public 的方法里面检查参数是不是为 null 之类的操作

例如 public int get(String s)

   {

       assert s != null;

   }

如果需要检查也最好通过 if s = null 抛出 NullPointerException 来检查

2 不要用 assert 来检查方法操作的返回值来判断方法操作的结果   

例如 assert list.removeAll(); 这样看起来好像没有问题 但是想想如果 assert  disable 呢,那样他就不会被执行了 所以 removeAll() 操作就没有被执行   可以这样代替
boolean boo = list.removeAl();

assert boo;

 

分享到:
评论

相关推荐

    电子版corejava

    Java的关键字包括但不限于`abstract`、`continue`、`for`、`new`、`switch`、`assert`、`default`、`goto`(未使用)、`package`、`synchronized`、`boolean`、`do`、`if`、`private`、`this`、`break`、`double`、`...

    Core Java 知识点汇总

    ### Core Java 知识点汇总 #### Java 关键字 Java 是一种强大的面向对象编程语言,广泛应用于企业级应用开发、移动应用(尤其是 Android 应用)、Web 开发等领域。理解 Java 的关键字对于掌握该语言至关重要。 - ...

    java单元测试包junit4.jar和hamcrest.core.jar

    在Java中,JUnit是广泛使用的单元测试框架,而Hamcrest则是一个匹配库,提供了丰富的断言方法,使得测试表达更加清晰。下面我们将深入探讨这两个库以及如何在Java项目中使用它们。 **JUnit4.jar**: JUnit4是JUnit...

    hamcrest-core-1.3.ORC2.jar:hamcrest的核心包,使用hamcrest框架必须引入的包

    这个jar包的引入是使用hamcrest框架的基础,无论是使用Eclipse、IDEA或其他Java开发工具,都需要包含这个库才能充分发挥hamcrest的功能。 hamcrest框架的核心理念是提供一种声明式的匹配器(Matcher)模式,使得...

    hamcrest-core-1.3的压缩包,hamcrest-core-1.3.jar包 是一款hamcrest的核心包

    JUnit是Java领域广泛使用的单元测试框架,其默认集成了hamcrest-core,使得开发者能够方便地使用hamcrest的匹配器进行断言。在JUnit测试中,hamcrest的API可以替代传统的assert语句,如`assertThat()`方法,使得测试...

    Java单元测试所需要的hamcrest包

    本文将深入探讨Hamcrest包在Java单元测试中的作用和使用方法。 首先,我们来看两个核心的Hamcrest库文件:`hamcrest-core-1.3.jar`和`hamcrest-library-1.3.jar`。`hamcrest-core`是基础库,提供了基本的匹配器和...

    junit-4.12和hamcrest-core-1.3的jar包

    JUnit 4.12 和 Hamcrest Core 1.3 是两个在Java开发中广泛使用的单元测试框架的重要组件。本文将详细介绍这两个库的功能、用途以及如何在Eclipse集成开发环境中使用它们进行单元测试。 JUnit是Java编程语言的一个...

    java面试宝典

    coreJava部分 8 1、面向对象的特征有哪些方面? 8 2、作用域public,private,protected,以及不写时的区别? 8 3、String 是最基本的数据类型吗? 8 4、float 型float f=3.4是否正确? 8 5、语句float f=1.3;编译能否...

    java语言基本语法.docx

    `native`表示方法由非Java代码实现,`assert`用于断言,`transient`和`volatile`则与序列化和内存可见性相关。 Java的注释有三种形式:单行注释`//`,多行注释`/* ... */`,以及Javadoc注释`/** ... */`,它们用于...

    Java-Selenium:PeopleNTech的Selenium和Core Java项目

    **Java-Selenium: PeopleNTech的Selenium和Core Java项目** 该项目主要涵盖了使用Java和Selenium进行自动化测试的实践。Selenium是一个强大的开源自动化测试工具,广泛用于Web应用程序的跨浏览器测试。它允许开发者...

    JSON解析转html.zip_java json转html_json转html java_json转html格式_测试

    本教程将介绍如何使用Java将JSON数据转换为HTML格式,以及相关的测试方法。 一、Jackson库的使用 Jackson是Java最常用的JSON处理库之一,它提供了解析JSON、生成JSON以及将Java对象映射到JSON的功能。要将JSON转换...

    整理后java开发全套达内学习笔记(含练习)

    assert (关键字) 断言 [ә'sә:t] ' (java 1.4 之后成为关键字) associate n.关联(同伴,伙伴) [ә'sәuʃieit] attribute n.属性(品质,特征) [ә'tribju:t] boolean (关键字) 逻辑的, 布尔型 call n.v.调用; 呼叫...

    Java+Maven+TestNG参考案例

    在`src/test/java`目录下创建一个测试类,例如`ApiTest.java`,编写测试方法: ```java import org.testng.Assert; import org.testng.annotations.Test; import okhttp3.OkHttpClient; import okhttp3.Request; ...

    groboutils-core-5

    本文将深入探讨`groboutils-core-5`的主要特性和使用方法,以及其如何支持多线程测试。 首先,`groboutils-core-5`的核心在于其对Java单元测试的全面支持。单元测试是验证软件最小可独立运行单元的过程,如方法或类...

    JAVA程序员面试32问

    - **interface**:所有的方法默认都是抽象的,从 Java 8 开始支持默认方法和静态方法;并且接口只能包含静态常量。 #### 19. abstract method 是否可以同时是 static, native, synchronized? - 抽象方法不可以...

    junit-4.12.jar + hamcrest-core-1.3.jar

    《Junit 4.12 和 Hamcrest Core 1.3:Java单元测试的重要伙伴》 在Java开发中,单元测试是确保代码质量的关键环节,它可以帮助开发者在早期发现并修复错误,避免了后期集成阶段可能出现的问题。在这里,我们要探讨...

    hamcrest-core-1.3.jar

    本文将深入探讨hamcrest-core-1.3.jar这个核心库以及其源码文件hamcrest-core-1.3-sources.jar,帮助读者更好地理解和使用Hamcrest。 1. **Hamcrest简介** Hamcrest是Java中用于断言和匹配的库,它的主要设计理念...

    junit-4.11.jar hamcrest-core-1.3.jar

    本文将深入探讨这两个库的使用方法、核心功能以及它们在实际开发中的价值。 首先,我们来看Junit。Junit是Java编程语言中最流行的单元测试框架之一,由Erich Gamma和Kent Beck共同创建。Junit 4.11版本引入了许多...

    hamcrest-1.3.zip

    1. 支持Java 5和6:尽管此版本较早,但它仍然兼容当时广泛使用的Java版本。 2. 完善的API:提供了一系列内置的Matcher,涵盖了基本数据类型和集合的常见匹配需求。 3. 链式调用:通过方法链可以方便地组合多个...

    利用PowerMock模拟静态方法和私有方法的示例

    下面是一段使用PowerMock模拟静态方法和私有方法的示例代码: ```java import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org....

Global site tag (gtag.js) - Google Analytics