当前位置: 首页 > 知识库问答 >
问题:

如何启用断言语句执行?

倪培
2023-03-14

我写了以下代码:

class Cl
{
    public static void main (String[] args) throws java.lang.Exception
    {
        assert true; //1
        Bar.foo();
    }

    static class Bar{
        public static void foo(){
            boolean enabled = false;
            assert enabled = true;
            System.out.println("Asserts " + 
               (enabled ? "enabled" : "disabled"));
        }
    }
}

演示

JLS 14.10说:

当且仅当主机系统已确定词汇上包含assert语句的顶级类启用断言时,才会启用在其类完成初始化后执行的assert语句。

我以为我在Cl类中通过assert true启用了断言,但它仍然不起作用。我如何才能启用关于JLS所说内容的断言?

共有3个答案

史绍晖
2023-03-14

其他答案解释了如何启用断言。(请注意,您可以为所有类、给定包中的类或单个类启用或禁用它们。)

我只想解释一下断言什么是真的 实际上是这样。

它不启用或禁用断言。这不是assert语句的“意思”。事实上,当您执行该语句时,启用或禁用C1的断言已经太晚了,很可能还会启用或禁用Bar的断言。只能在初始化类之前为类启用或禁用断言。对于任何给定的类,这种情况(最多)发生一次。

它的实际功能(如果启用了断言…)用于计算表达式true,并测试它是否为true。永远都是这样。简言之,这是一个禁止的行动。

戴瑞
2023-03-14

像这样运行你的程序,

java -ea YourClass

-ea意味着启用断言,这样运行后,断言将在运行时执行,否则它只是跳过断言语句。

如果您使用的是eclipse,请转到运行配置并在VM Arguments和Run中写入-ea

如果您试图以编程方式启用断言,可以尝试以下操作:,

     boolean enabled = false;
     ClassLoader.getSystemClassLoader().setDefaultAssertionStatus(true);
     assert enabled = true;
     System.out.println("Asserts " + 
        (enabled ? "enabled" : "disabled"));
习华灿
2023-03-14

运行程序时,将-ea选项添加到java命令行

 类似资料:
  • 主要内容:多个延迟执行语句的处理顺序,使用延迟执行语句在函数退出时释放资源Go语言的 defer 语句会将其后面跟随的语句进行延迟处理,在 defer 归属的函数即将返回时,将延迟处理的语句按 defer 的逆序进行执行,也就是说,先被 defer 的语句最后被执行,最后被 defer 的语句,最先被执行。 关键字 defer 的用法类似于面向对象编程语言 Java 和 C# 的 finally 语句块,它一般用于释放某些已分配的资源,典型的例子就是对一个互斥解锁,或者

  • 问题内容: 如何以编程方式为特定类启用断言,而不是指定命令行参数“ -ea”? 问题答案: 这是对@bala好的答案的评论,但时间太长。 如果仅启用断言,则调用您的主类-您的主类将在启用断言之前加载,因此您可能需要一个不直接引用代码中其他内容的加载器。它可以设置断言,然后通过反射加载其余代码。 如果在加载类时未启用断言,则应立即将其“编译出”,这样您就无法打开和关闭它们。如果要切换它们,则根本不需

  • 我在谷歌分析的实施说明中遇到了这个问题: 我从没想过在 else 子句中有一个断言是可能的,而不返回。这对我来说没有意义,因为断言只会在测试方案中进行评估。那么,为什么编译器不警告它不会返回(在发布版本的情况下)。 编辑:这是在函数

  • 我试着 我在调试时获得和是。 如何在使用时断言大于条件

  • 问题内容: 我正在通过Java与Eclipse和TestNG框架一起使用Selenium RC。我有以下代码片段: 第一个断言失败,执行被停止。但我想继续进一步的代码片段。 问题答案: Selenium IDE使用验证执行软断言,这意味着即使检查失败,测试仍将继续,并且可以在测试结束时或在发生硬断言时报告失败。 使用TestNG,可以通过使用自定义测试侦听器来拥有这些软断言。我已经在博客上记录了如

  • 下面是TestNG框架中的一个示例断言方法。 下面是fail方法。 在TestNG中是否有一个内置的方法来执行软断言。如果没有,实现这一点的理想方式是什么。