`
shinelith
  • 浏览: 8932 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java那点儿事6——断言

阅读更多
没几天,这一系列的文章已经写到6了。如果有些Java基础并且度过了前5篇的话,相信一定受益匪浅了。
这回要说的并不什么原则之类的问题了。而是粗略的讲一下在Java1.4中加入的一个新功能—断言。

断言使用关键字assert,在Java1.3时assert并不是关键字且可以为标识符,而在1.4之后是不能使用assert作为标识符的。
简单的说明一下assert的作用,假如要编写一个函数f,其中f只可以接受一个1-10的整形数据,如果数据大于10那么程序会错误。这段代码可能会是下面这个样子。
private void f(int data){
	if(data>0 && data<=10){
		// 某些处理工作
	}else{
		// 提示错误
	}
}

如果说data是合法的1-10之间的整数,这个程序在调试的时候自然没有问题。如果data非法,也就是说data不是1-10中的整数,那么f这个方法是没有意义的,换句话说f这个方法只负责1-10之间的整数,他不负责其他的整数,而且他也只可能被传进1-10的整数。代码中的第2行的这个if字句是与功能无关的,这个验证只是为了读错(debug),如果调试完成,在最终发布的时候这些读错的代码应该确保删除以提高性能。这件事也会耗费大量的时间也有可能产生新的错误。而适当的使用断言就可以简化这个工作。

使用断言完成上述功能的
private void f(int data){
	assert(data > 0 && data <= 10);
	// 某些处理工作
}

断言是可以开启和关闭的,在开启断言之后,这段代码就会验证data是否"合法",如果不合法则会抛出AssertionError,从而停止程序的运行。而关闭断言之后,assert字句就像消失一样不会被执行也不会抛出任何东西。

语法解析:   断言有两种语法,非常简单和简单两种,其判断方式类似if、while。如果后面的逻辑表达式值为假,则抛出AssertionError。

非常简单 - 只提示假设不成立
assert (布尔表达式);
下列使用都是合法的:
assert true;
assert (x==1);


简单 - 提供更多的辅助信息
assert (布尔表达式) : 返回信息 ;
下列使用都是合法的:
assert false : "Data is Error";
assert (x>0 && x<=10) : new Object();
assert (x > y) : "x = "+x+" y = "+ y;

下列使用都是不合法的:
assert (x > y) : ;
assert false : String s = "error";


如何启动断言 在默认的状态下断言是被禁用的。在运行是需要使用命令行来启用断言。
启动 使用如下的参数运行
java -ea
java -enableassertions
禁用 使用如下的参数运行
java -da
java -disableassertions

注意抛出的AssertionError是可以被catch捕获的,但是并不推荐这样做,一旦捕获处理不当有可能会掩盖错误的发生。

关于如何合适的使用断言,Sun在断言文档里有一定的描述,下面简单说一下,具体的回头自己查一下就好了。
1. 不要使用断言验证公有方法的参数
2. 使用断言验证验证私有方法的参数
3. 不要使用断言验证命令行参数
4. 即使在公有方法内,可以使用断言检查从不会发生的情况
5. 不要使用可能产生副作用的断言表达式

分享到:
评论

相关推荐

    JAVA程序设计——异常和断言

    JAVA程序设计中的异常和断言是程序开发过程中的重要概念,它们帮助开发者处理程序运行时可能出现的问题,确保程序的稳定性和可靠性。 异常处理是JAVA语言中的一个关键特性,用于处理程序执行过程中出现的非正常情况...

    Java测试与与设计——从单元测试到Web测试

    《Java测试与设计——从单元测试到Web测试》这一主题深入探讨了软件开发中的关键环节:测试。在软件工程中,测试是确保软件质量、功能完整性和用户满意度的重要步骤。本文将围绕“单元测试”和“Web测试”两个核心...

    Java断言(assert)

    Java断言是一种 debugging 机制,允许开发者在Java程序中添加检查点,以确保程序的正确性。断言可以在开发和测试阶段使用,以确保程序的正确性和可靠性。 Java断言的历史 Java断言是从 JDK 1.4 引入的,默认情况下...

    初级java程序员练习项目3——收入、储蓄、支出管理系统

    在本项目中,你会遇到以下几个重要的Java编程知识点: 1. **面向对象编程(OOP)**:项目的核心是通过类来构建模型,如`User`、`Income`、`Savings`和`Expense`等。你需要定义这些类的属性(如金额、日期等)和方法...

    JAVA断言技术详解

    JAVA断言技术详解,1、What will happen when you attempt to compile and run the following code? (Assume that the code is compiled and run with assertions enabled) 1. public class AssertTest 2. { 3. ...

    正则表达式之——先行断言(lookahead)和后行断言(lookbehind).rar

    在编程语言中,如JavaScript、Python或Java,对正则表达式的支持程度不同,有些可能不完全支持后行断言,尤其是当后行断言的模式长度不确定时。因此,在实际使用中需要注意所选语言的限制。 总结来说,先行断言和后...

    java程序员面试题——863面试集

    ### Java程序员面试题详解 #### 一、Java基础知识 1. **作用域public, private, protected, 以及不写时的区别** - **public**: 可以被任何类访问。 - **protected**: 可以被同一包内及不同包内的子类访问。 - ...

    软件测试——java——ISTC2022

    下面我们将详细探讨Java软件测试的相关知识点,并结合提供的两个压缩包文件名——Calculator.zip和MoreTriangle.zip进行分析。 1. **单元测试**:在Java开发中,单元测试是验证代码模块功能是否按预期运行的基本...

    java——1.rar_Java实习报告_java实习_java实习记录

    6. **Swing或JavaFX**:在图形用户界面(GUI)的开发中,Java提供了Swing或JavaFX库。实习生可能会构建简单的窗口应用,学习组件布局、事件处理等。 7. **数据库操作**:熟悉JDBC(Java Database Connectivity)API...

    java异常处理机制示例(java抛出异常、捕获、断言)

    断言(Assertion)是Java中的一个功能,用于在开发阶段检查程序状态。在`AssertTest`中,使用`assert`语句来确保除数不为零。如果条件不满足,断言失败,程序会抛出`AssertionError`异常。在生产环境中,断言通常是...

    Selenium-java断言(90)【2021-02-02】.docx

    本文将主要围绕Selenium在Java环境下的断言操作进行详细阐述,并结合其他相关知识点进行扩展。 断言在软件测试中扮演着至关重要的角色,它是验证预期结果与实际结果是否一致的关键步骤。在Selenium中,我们可以通过...

    truth,java单元测试的断言/命题框架.zip

    当我们谈论"truth,java单元测试的断言/命题框架"时,这里涉及到的是一个名为Truth的开源项目,它旨在提升Java单元测试中断言的清晰度和可读性。Truth不仅是一个强大的工具,也是一个优秀的实践,帮助开发者编写更加...

    python:playwright 自动等待和断言(csdn)————程序.pdf

    6. **取消选中复选框**:`page.uncheck(xpath)`,取消匹配XPath表达式元素的选中状态,通常用于复选框和单选框。 7. **输入参数**:`page.fill(input_field, text)`,在指定的输入框中填充文本,`page.clear(input_...

    JUnit——Java测试框架

    JUnit,作为Java编程语言的事实上的标准测试框架,其在软件开发中的重要性不容忽视。由著名程序员Kent Beck和Erich Gamma发起,JUnit以其简洁而强大的功能,极大地推动了Java开发中的自动化测试实践。Martin Fowler...

    java接口自动化测试框架及断言详解

    "java接口自动化测试框架及断言详解" 本篇文章主要介绍了Java接口自动化测试框架及断言详解,通过示例代码详细地...通过本篇文章,读者可以了解Java接口自动化测试框架及断言详解的知识点,并且可以应用于实际项目中。

    Java中断言使用案例

    在Java编程语言中,"断言"是一种强大的调试工具,它允许程序员在代码中插入条件检查,以确保程序在特定点的行为符合预期。这个概念在【标题】"Java中断言使用案例"中被强调,而【描述】进一步指出文档会探讨使用断言...

    诊断 Java 代码: Java 编程中的断言和时态逻辑 另有翻译

    断言是一种编程实践,它允许开发者在代码中插入检查点,确保特定条件在特定时刻总是为真。这有助于在开发和测试阶段发现潜在的错误。然而,传统断言存在局限性,无法涵盖所有可能的检查情况,尤其是在多线程环境中。...

    Java正则表达式——知识积累

    在JdkApi_regix.docx文档中,可能包含了更多关于Java正则表达式API的详细使用示例和深入解析,包括高级用法如反向引用、零宽度断言等。建议查阅文档以获取更全面的信息。 总结来说,Java正则表达式是强大的文本处理...

    单元测试之道Java版——使用Junit

    6. **运行测试**:使用IDE(如Eclipse、IntelliJ IDEA)内置的Junit支持,或者通过命令行运行Junit测试套件。 7. **查看测试结果**:测试失败时,Junit会显示失败的测试用例及具体的失败信息,帮助我们定位问题。 ...

Global site tag (gtag.js) - Google Analytics