A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 蒋珍珍 于 2014-3-17 09:12 编辑

assert(x=1):"x is "+x;
有关于这个assert的叙述哪一个正确?
A、若x等于1,则输出"x is 1"
B、程序编译错误
C、若x不等于1,则没有输出任何信息
这时关于断言的题目,在一个练习题里看到的,我感觉这里边没有正确答案,谁能帮我解答一下?

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

3 个回复

倒序浏览
没人回复啊,不过现在我已经明白了。给大家扩展一下哈:)
我在网上查了一下有关断言的知识,断言(assertion)是软件开发中常用的调试方式,它相当于Java中异常处理的一种高级形式。
语法格式有两种:
1、assert 表达式1;
2、assert 表达式1: 表达式2;
其中,表达式1的计算结果是一个boolean值,表达式2的计算结果是一个基本类型数据或是一个对象。
        对于第一种语法格式,当程序运行到这一条断言语句时,表达式1的值将被计算,如果它的值为false,
该语句将抛出一个AssertionError对象,这是一个错误(Error)的子类,程序将终止;如果表达式的结果
的值为true,表示这个断言是正确的,程序可以继续往下执行。
        对于第二种语法格式,如果表达式1的值为false,程序将表达式2的结果作为AssertionError构造器的
参数值创建一个AssertionError对象,并抛出该对象;如果表达式1的值为true,表达式2就不被计算,程序
继续往下执行。

运行时,要打开断言功能,javac -ea AssertTest。

所以选择题中的表达式1(x=1)不合法,应为(x==1)
我写了个程序测试了一下,
  1. /*断言使用测试*/
  2. public class AssertTest
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 int[] arr=creatIntArray(1);
  7.         }
  8.         public static int[] creatIntArray(int x)
  9.         {
  10.                 //assert(x=1):"x is "+x;//括号中的表达式应为布尔类型,所以编译失败
  11.                 assert(x==1):"x is "+x;//x为1时,不输出任何信息,x不为1时,传入值是3时,输出java.lang.AssertionError: x is 3;
  12.                 return new int[x];
  13.         }
  14. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
蒋珍珍 发表于 2014-3-15 10:17
没人回复啊,不过现在我已经明白了。给大家扩展一下哈
我在网上查了一下有关断言的知识,断言(assertion ...

学习了。谢谢楼主。
不过,感觉在以后工作中,直接在代码中调用断言的机会还是挺少的。
更多的时候,应该是在Junit中对程序某个模块进行单元测试的时候,使用的比较常见。
示例代码:
  1. import junit.framework.Assert;

  2. import org.junit.After;
  3. import org.junit.AfterClass;
  4. import org.junit.Before;
  5. import org.junit.BeforeClass;
  6. import org.junit.Test;

  7. public class ClassForJunit {
  8.        
  9.         @BeforeClass
  10.         public static void OnInitClass() {
  11.                 //类字节码被初始化的时候调用
  12.                 //该方法应该是静态的
  13.         }
  14.        
  15.         @Before
  16.         public void OnInitObject() {
  17.                 //对象被初始化的时候调用
  18.                 //也就是说,每个@Test修饰的方法执行之前,该方法,都会被执行一次
  19.         }
  20.        
  21.         @Test
  22.         public void getNameTest() {
  23.                 //这边算一个测试单元
  24.                 Assert.assertEquals(1, 1);
  25.         }
  26.        
  27.         @After
  28.         public void OnDestoryObject() {
  29.                 //对象被释放的时候调用
  30.                 //也就是说,每个@Test修饰的方法执行之后,该方法,都会被执行一次
  31.         }
  32.        
  33.         @AfterClass
  34.         public static void OnDestoryClass() {
  35.                 //程序结束 或者 类字节码被卸载的时候调用
  36.                 //该方法应该是静态的
  37.         }
  38. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
嗯,呵呵!互相分享,共同学习:):handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马