`
zhaohaolin
  • 浏览: 1012129 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java基础:Java中的 assert 关键字解析【转】

    博客分类:
  • JAVA
 
阅读更多

J2SE 1.4在语言上提供了一个新特性,就是assertion(断言)功能,它是该版本在Java语言方面最大的革新。在软件开发中,assertion是一种经典的调试、测试方式。

assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机 制,如C,C++和Eiffel等,但是支持的形式不尽相同,有的是通过语言本身、有的是通过库函数等。另外,从理论上来说,通过assertion方式 可以证明程序的正确性,但是这是一项相当复杂的工作,目前还没有太多的实践意义。

 

在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检 查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般 来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布 后,assertion检查通常是关闭的。下面简单介绍一下Java中assertion的实现。

 

1.1) 语法表示

 

在语法上,为了支持assertion,Java增加了一个关键字assert。它包括两种表达式,分别如下:

 

assert expression1;

assert expression1: expression2;

在两种表达式中,expression1表示一个boolean表达 式,expression2表示一个基本类型或者是一个对象(Object) ,基本类型包括boolean,char,double,float,int和long。由于所有类都为Object的子类,因此这个参数可以用于所有对 象。

 

1、assert

如果 为true,则程序继续执行。

如果为false,则程序抛出AssertionError,并终止执行。

 

2、assert : <错误信息表达式>

如果 为true,则程序继续执行。

如果为false,则程序抛出java.lang.AssertionError,并输出<错误信息表达式>。

 

1.2) 语义含义

 

在运行时,如果关闭了assertion功能,这些语句将不起任何作用。如果打开了 assertion功能,那么expression1的值将被计算,如果它的值为false,该语句强抛出一个AssertionError对象。如果 assertion语句包括expression2参数,程序将计算出expression2的结果,然后将这个结果作为AssertionError的 构造函数的参数,来创建AssertionError对象,并抛出该对象;如果expression1值为true,expression2将不被计算。

 

一种特殊情况是,如果在计算表达式时,表达式本身抛出Exception,那么assert将停止运行,而抛出这个Exception。

 

1.3) 一些assertion例子

 

下面是一些Assert的例子。

 

assert  0 < value;

assert  0 < value:"value="+value;

assert  ref != null:"ref doesn''t equal null";

assert  isBalanced();

 

1.4) 编译

 

由于assert是一个新关键字,使用老版本的JDK是无法编译带有assert的源程序。因 此,我们必须使用JDK1.4(或者更新)的Java编译器,在使用Javac命令时,我们必须加上-source 1.4作为参数。-source 1.4表示使用JDK 1.4版本的方式来编译源代码,否则编译就不能通过,因为缺省的Javac编译器使用JDK1.3的语法规则。

 

一个简单的例子如下:

 

javac -source 1.4 test.java

 

1.5) 运行

 

由于带有assert语句的程序运行时,使用了新的ClassLoader和Class类,因此,这种程序必须在JDK1.4(或者更高版本)的JRE下运行,而不能在老版本的JRE下运行。

 

由于我们可以选择开启assertion功能,或者不开启,另外我们还可以开启一部分类或包的assertion功能,所以运行选项变得有些复杂。通过这些选项,我们可以过滤所有我们不关心的类,只选择我们关心的类或包来观察。下面介绍两类参数:

 

参数 -esa和 -dsa:

它们含义为开启(关闭)系统类的assertion功能。由于新版本的Java的系统类中,也 使了assertion语句,因此如果用户需要观察它们的运行情况,就需要打开系统类的assertion功能 ,我们可使用-esa参数打开,使用 -dsa参数关闭。 -esa和-dsa的全名为-enablesystemassertions和-disenablesystemassertions,全名和缩写名有同 样的功能。

参数 -ea和 -ea:

它们含义为开启(关闭)用户类的assertion功能:通过这个参数,用户可以打开某些类或 包的assertion功能,同样用户也可以关闭某些类和包的assertion功能。打开assertion功能参数为-ea;如果不带任何参数,表示 打开所有用户类;如果带有包名称或者类名称,表示打开这些类或包;如果包名称后面跟有三个点,代表这个包及其子包;如果只有三个点,代表无名包。关闭 assertion功能参数为-da,使用方法与-ea类似。

-ea和-da的全名为-enableassertions和-disenableassertions,全名和缩写名有同样的功能。

下面表格表示了参数及其含义,并有例子说明如何使用。

参数 例子 说明

-ea java -ea 打开所有用户类的assertion

-da java -da 关闭所有用户类的assertion

-ea: java -ea:MyClass1 打开MyClass1的assertion

-da: java -da: MyClass1 关闭MyClass1的assertion

-ea: java -ea:pkg1 打开pkg1包的assertion

-da: java -da:pkg1 关闭pkg1包的assertion

-ea:... java -ea:... 打开缺省包(无名包)的assertion

-da:... java -da:... 关闭缺省包(无名包)的assertion

-ea: ... java -ea:pkg1... 打开pkg1包和其子包的assertion

-da: ... java -da:pkg1... 关闭pkg1包和其子包的assertion

-esa java -esa 打开系统类的assertion

-dsa java -dsa 关闭系统类的assertion

分享到:
评论

相关推荐

    Java的关键字与保留字

    在编程语言中,关键字是预定义的具有特殊含义的标识符,它们在编译时被解析器识别并执行特定的功能;而保留字则是语言设计者为未来版本预留的标识符,尽管当前版本未使用,但为了兼容性和一致性,程序员应避免将其...

    java中“53”个关键字(含2个保留字)

    在Java编程语言中,关键字是具有特殊含义的预定义标识符,它们被Java解析器用来识别语法结构。这些关键字不能用作变量名、类名或方法名。在Java中,一共有53个关键字,包括两个保留字。下面将详细阐述这些关键字的...

    Java基础笔试题(绝对最全的)

    总结来说,Java基础笔试题涵盖了从基本语法到高级特性的广泛内容,包括类和对象、多线程、Web开发、数据库操作、XML解析、企业级开发、设计模式以及系统层面的知识。理解并熟练掌握这些知识点对于Java程序员来说至关...

    经典JAVA基础.txt

    以下是对这些知识点的详细解析: ### 1. Java 的跨平台特性 Java 最为人所熟知的特点之一就是它的跨平台能力,即“一次编写,到处运行”(Write Once, Run Anywhere, WORA)。Java 的这一特性主要得益于 Java ...

    Java关键字总结珍藏版

    本篇文章将深入解析 Java 中的一些关键关键字,并提供相关的编程示例。 1. `abstract` 关键字: `abstract` 可以用于修饰类和方法。抽象类(abstract class)无法直接创建实例,但可以作为其他类的基类,提供继承...

    JAVA基础知识问答大全

    ### JAVA基础知识问答详解 ...以上是对给定文件中提到的Java基础知识问答的详细解析,涵盖了从关键字的使用、集合类的差异到垃圾收集机制的各个方面,旨在帮助初学者深入理解Java的核心概念和技术细节。

    JAVA面试基础题.txt

    ### JAVA面试基础题知识点解析 #### 一、final, finally, finalize - **final**:在Java中,关键字`final`可以用来修饰类、方法和变量。当一个类被声明为`final`时,它不能被继承;如果一个方法被声明为`final`,...

    JavaJava+EE软件工程师就业求职手册.doc

    - **6.3.1 使用断言**:介绍assert关键字的应用。 - **6.4 本章小结**:回顾本章学习内容。 ##### 第7章 深入理解面向对象的精髓 - **7.1 理解面向对象设计思想** - **7.1.1 面向对象的特征**:总结面向对象的...

    Java基础知识练习题

    ### Java基础知识练习题详解 #### 1. 无法读取xxx.java 文件 - **问题解析**:如果遇到“无法读取 xxx.java”这样的错误提示,通常意味着文件路径不正确、文件不存在或者没有权限访问该文件。 - **解决方法**: - ...

    java 变量 关键字

    Java 中的关键字包括 abstract、assert、boolean、break、byte、case、catch、char、class、const、continue、default、do、double、else、enum、extends、final、finally、float、for、goto、if、implements、...

    java经典面试试题(从数据结构到设计模式)

    - **关键字和标识符**:Java中有一些预定义的关键字,如`abstract`、`final`、`new`等,它们具有特殊的含义,并且不能用作标识符(例如变量名或类名)。标识符是用于标识类、变量、方法等的名字,遵循一定的命名规则...

    java笔试中的基础知识

    本文将深入解析《java笔试中的基础知识》所提及的关键知识点,旨在为准备参加Java相关技术评估的读者提供全面而深入的理解。 ### 1. Final关键字 `final`关键字是Java中的一个重要特性,它具有多重含义。当修饰类...

    Java 2 教程(第五版)(PDG)

    assert关键字则为单元测试提供了便利,帮助开发者确保代码的正确性。 下载《Java 2 教程(第五版)(PDG)》的源代码和源码资料,可以帮助读者更直观地学习和实践这些概念。通过阅读源码,你可以深入了解各种Java技术的...

    java基础语法讲解上集,适合初级人员入门学习

    关键字是指在Java语言中具有特殊含义的单词,它们在Java编程中扮演着至关重要的角色。关键字通常用来定义数据类型、流程控制、访问权限等。 - **数据类型关键字**: - `class`:用于定义类。 - `interface`:用于...

    JAVA面试大全 基础方面

    以下是一些常见的Java基础知识面试题及其解析: 1. **作用域的区别** - `public`:任何地方都能访问。 - `private`:只能在本类中访问。 - `protected`:在本类、同一包和子类中可访问。 - 无修饰符(friendly...

    Java常见面试50题(java+jsp)

    8. assert关键字:在JDK1.4后引入,用于断言某个条件在程序执行到该点时始终为真。默认情况下,断言是关闭的,需要启动参数-ea启用。 9. GC(Garbage Collection):垃圾收集器负责回收不再使用的对象,释放内存。...

Global site tag (gtag.js) - Google Analytics