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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张淼 中级黑马   /  2012-9-21 10:40  /  1893 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

你尝试编译并运行以下代码,会发生什么?     (假设代码编译和运行时启用assertions.)1
       public class AssertTest
       {
              private void methodA(int i)
              {
                     assert i >= 0 : methodB();    \\这条语句时什么意思?在i大于0的时候执行methodB()语句么?
                     System.out.println(i);
              }
      
              private String methodB()
              {
                     return "The value must not be negative";
              }
              public static void main(String args[])
              {
                     AssertTest test = new AssertTest();
                     test.methodA(-10);
              }     
       }
A、输出: -10.    //答案A为正确答案。
B、显示AssertionError 信息 "不能为负数".
C、 编译未能通过
D、以上都不对

点评

自己百度查下,百度说编译要带上javac -source 1.4 ,如果不带无论是10还是-10结果运行的都是打印i的值。  发表于 2012-9-21 12:54

评分

参与人数 2技术分 +1 黑马币 +30 收起 理由
唐志兵 + 1 赞一个!
王德升 + 30 赞一个!

查看全部评分

9 个回复

正序浏览
本帖最后由 张淼 于 2012-9-21 12:35 编辑
彭润生 发表于 2012-9-21 10:41
public class AssertTest
{private void methodA(int i){assert i >= 0 : methodB(); //这个断言功能是要 ...


明白啦,多谢。
我是在EditPlus里面运行的,没有开启那个啊,但是也运行出来了。
回复 使用道具 举报
-10也屬於int型,assert i >= 0時為false,所以直接打印-10     前面讲错了

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
老兄  运行结果貌似是B吧
回复 使用道具 举报
疯子雨 发表于 2012-9-21 11:04
没你说的那么复杂吧  他什么都没提到,不是断言那部分,就应该是个三元表达式,判断哪个执行。个人意见 ...

assert就是一个关键字,好像是java1.4才出来的吧,记得不清楚了。
回复 使用道具 举报
彭润生 发表于 2012-9-21 10:58
public class AssertTest{private void methodA(int i){assert i >= 0 : methodB(); //这个断言功能是要开 ...

没你说的那么复杂吧  他什么都没提到,不是断言那部分,就应该是个三元表达式,判断哪个执行。个人意见
回复 使用道具 举报
assert i >= 0 : methodB();  
System.out.println(i);
这个部分写的不对

应该就是个三元表达式 写成assert i >= 0 ? 0 :mothod();
回复 使用道具 举报
public class AssertTest
{
private void methodA(int i)
{
assert i >= 0 : methodB(); //这个断言功能是要开启的,执行这个class文件时需要这样输入java -ea AssertTest才能看到效果
System.out.println(i);
}
private String methodB()
{
return "The value must not be negative";
}
public static void main(String args[])
{
AssertTest test = new AssertTest();
test.methodA(-10);
}
}


assert i >= 0 : methodB();
            |             |-----这个前面条件如果为假了,那么就执行这一语句。
            |------这个是判断,也就是boolean类型的,如果为真了,就向下执行而不执行methodB。
楼主明白了嘛?

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
i >= 0 : methodB();   

应该是i>0为真 不执行后面的表达式吧

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 彭润生 于 2012-9-21 11:00 编辑

public class AssertTest
{
private void methodA(int i)
{
assert i >= 0 : methodB(); //这个断言功能是要开启的,执行这个class文件时需要这样输入java -ea AssertTest才能看到效果这个语句为假时,一般抛出异常
System.out.println(i);
}
private String methodB()
{
return "The value must not be negative";
}
public static void main(String args[])
{
AssertTest test = new AssertTest();
test.methodA(-10);
}
}


assert i >= 0 : methodB();
               |                  |-----这个前面条件如果为假了,那么就执行这一语句。
               |------这个是判断,也就是boolean类型的,如果为真了,就向下执行而不执行methodB。
楼主明白了嘛?

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马