所以我注意到,在调试Netbeans Java应用程序时,当在断言函数中使用函数调用时,您无法在该函数中找到断点或进入该函数。
起初,我认为这与使用重写函数和不调用我的重写函数有关,但我确认这不是事实。它仍然被调用,但无法介入。
以下是我尝试过的片段:
public class Example
{
public static boolean blah()
{
System.out.println("Executing"); //**Breakpoint here
return true;
}
public static void main(String[] args)
{
assert(blah()); //Cannot step into or hit breakpoint on this line.
blah(); //Can here.
}
}
有人知道为什么这不起作用吗?
默认情况下,断言在运行时被禁用。
也许您的调试JVM没有启用断言。
要启用断言,请为NetBeans调试JVM参数指定-enableassertions
(或-ea
)开关。即使断言被编译到字节码中,如果没有这个开关,它们也不会执行。
请参阅此链接了解更多
也许,只是也许,每个assert
语句都在这个构建中得到了优化?你确定你的打印对账单执行了两次吗?
assert
的全部意义在于,当您想要优化代码时,您可以告诉编译器忽略里面的内容。