断言java中的行为?

时间:2011-08-15 16:35:09

标签: java

我在第3行遇到编译错误,java中的断言是否有特殊情况?我不确定为什么它会从methodB()中获得一些返回类型,有人可以帮助我吗?感谢

public class AssertTest {
    public void methodA(int i) {
        assert i >= 0 : methodB();
        System.out.println(i);
    }

    public void methodB() {
        System.out.println("The value must not be negative");
    }

    public static void main(String args[]) {
        AssertTest test = new AssertTest();
        test.methodA(-10);
    }
}

4 个答案:

答案 0 :(得分:9)

The docs很清楚:

  

Expression2是具有值的表达式。 (它不能是对声明为void的方法的调用。)

     

使用此版本的assert语句为AssertionError提供详细消息。系统将Expression2的值传递给相应的AssertionError构造函数,该构造函数使用值的字符串表示形式作为错误的详细消息。

因此,该方法的返回值用作错误消息。在您的情况下,不要打印到系统,只需返回字符串。

请注意,即使您编译此代码,也会打印-10。默认情况下不启用断言,因此您必须enable them

下次有疑问时,请先查阅文档。

答案 1 :(得分:4)

仅将错误消息直接放在assert语句中更简单,更易读:

assert (i >= 0) : "AssertTest: The value must not be negative.";

当断言触发时,Java系统将显示消息。

答案 2 :(得分:2)

  

断言陈述的第二种形式是:

assert Expression1 : Expression2 ; 
     

其中:

     

Expression1是一个布尔表达式。 Expression2是一个表达式   有价值。 (它不能是对声明的方法的调用   空隙。)

http://download.oracle.com/javase/1.4.2/docs/guide/lang/assert.html

基本上,Expression2必须返回一个值,而不是void

答案 3 :(得分:0)

您的方法应该有返回类型。

http://download.oracle.com/javase/1.4.2/docs/guide/lang/assert.html

以下是该链接的相关信息:

断言陈述的第二种形式是:

assert Expression1 : Expression2 ;

其中:

* Expression1 is a boolean expression.
* Expression2 is an expression that has a value. **(It cannot be an invocation of a method that is declared void.)**