Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么是;“断言错误”;以编程方式激活断言时不会导致AssertionError?_Java_Assertions - Fatal编程技术网

Java 为什么是;“断言错误”;以编程方式激活断言时不会导致AssertionError?

Java 为什么是;“断言错误”;以编程方式激活断言时不会导致AssertionError?,java,assertions,Java,Assertions,如果我在 在类richtercloud.java.assertion.ignored.NewMain的main方法中,我从打印的语句中看到,assert false不会导致AssertionError就像我将NewMain打包到一个JAR中,并使用java-ea-JAR java-assertion-ignored-1.0-SNAPSHOT-JAR-with-dependencies.JAR richtercloud.java.assertion.ignored.NewMain运行它一样 关于断

如果我在

在类
richtercloud.java.assertion.ignored.NewMain
main
方法中,我从打印的语句中看到,
assert false
不会导致
AssertionError
就像我将
NewMain
打包到一个JAR中,并使用
java-ea-JAR java-assertion-ignored-1.0-SNAPSHOT-JAR-with-dependencies.JAR richtercloud.java.assertion.ignored.NewMain
运行它一样

关于断言的编程启用的其他问题,这显然不是一个解决方案


MCVE at.

如果我正确理解了文档,则必须在加载类之前设置断言状态;在本例中,您已经加载了该类,因此您的
setDefaultAssertionStatus(true)
无效

(斜体):

每个类加载器维护一个默认断言状态,这是一个布尔值,用于确定在随后由类加载器初始化的新类中默认启用还是禁用断言

因此,设置默认断言状态只会影响随后加载的类,而不会影响当前正在执行的类

ClassLoader.getSystemClassLoader().setDefaultAssertionStatus(true);
ClassLoader.getSystemClassLoader().setPackageAssertionStatus("richtercloud.java.assertion.ignored", true);
System.out.println(String.format("desired assertion status: %b",
        NewMain.class.desiredAssertionStatus()));
assert false;
System.out.println("assertion has been ignored");