java中的断言行为?

java中的断言行为?,java,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.p

我在第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);
    }
}
很清楚:

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

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

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

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

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

很清楚:

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

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

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

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

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

断言语句的第二种形式是:

assert Expression1 : Expression2 ; 
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.)** 
表达式1是一个布尔表达式。表达式2是一个 有价值。(它不能是对已声明方法的调用 无效。)

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

断言语句的第二种形式是:

assert Expression1 : Expression2 ; 
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.)** 
表达式1是一个布尔表达式。表达式2是一个 有价值。(它不能是对已声明方法的调用 无效。)


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

您的方法应该有一个返回类型

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

断言语句的第二种形式是:

assert Expression1 : Expression2 ; 
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.)** 

您的方法应该有一个返回类型

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

断言语句的第二种形式是:

assert Expression1 : Expression2 ; 
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.)** 

只需将错误消息直接放在
assert
语句中,就更简单,可读性也更高:

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

Java系统将在assert启动时显示消息。

只需将错误消息直接放在
assert
语句中,就更简单、可读性更强了:

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

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

@Carlos极好的建议。@Carlos极好的建议。