黑马程序员技术交流社区
标题: 一条语句没弄明白,求解释 [打印本页]
作者: 张淼 时间: 2012-9-21 10:40
标题: 一条语句没弄明白,求解释
你尝试编译并运行以下代码,会发生什么? (假设代码编译和运行时启用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、以上都不对
作者: 彭润生 时间: 2012-9-21 10:41
本帖最后由 彭润生 于 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。
楼主明白了嘛?
作者: 张小龙 时间: 2012-9-21 10:57
i >= 0 : methodB();
应该是i>0为真 不执行后面的表达式吧
作者: 彭润生 时间: 2012-9-21 10:58
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。
楼主明白了嘛?
作者: 赵宇 时间: 2012-9-21 10:59
assert i >= 0 : methodB();
System.out.println(i);
这个部分写的不对
应该就是个三元表达式 写成assert i >= 0 ? 0 :mothod();
作者: 赵宇 时间: 2012-9-21 11:04
彭润生 发表于 2012-9-21 10:58
public class AssertTest{private void methodA(int i){assert i >= 0 : methodB(); //这个断言功能是要开 ...
没你说的那么复杂吧 他什么都没提到,不是断言那部分,就应该是个三元表达式,判断哪个执行。个人意见
作者: 彭润生 时间: 2012-9-21 11:16
疯子雨 发表于 2012-9-21 11:04
没你说的那么复杂吧 他什么都没提到,不是断言那部分,就应该是个三元表达式,判断哪个执行。个人意见 ...
assert就是一个关键字,好像是java1.4才出来的吧,记得不清楚了。
作者: 李健_8 时间: 2012-9-21 11:39
老兄 运行结果貌似是B吧
作者: 李健_8 时间: 2012-9-21 11:47
-10也屬於int型,assert i >= 0時為false,所以直接打印-10 前面讲错了
作者: 张淼 时间: 2012-9-21 12:33
本帖最后由 张淼 于 2012-9-21 12:35 编辑
彭润生 发表于 2012-9-21 10:41
public class AssertTest
{private void methodA(int i){assert i >= 0 : methodB(); //这个断言功能是要 ...
明白啦,多谢。
我是在EditPlus里面运行的,没有开启那个啊,但是也运行出来了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |