我正在学习软件工程课程,在那里我看到了JML的用法。这是一段代码示例:
//@ requires f >= 0.0
public float sqrt(float f) {
return f/2;
}
它说正式的JML规范是可执行的!
我的问题是,当我们用f = -4调用这个sqrt函数时,这段代码会出错还是抛出异常或发出警告?我在我的电脑上试过它它运作良好并打印出-2。那么JML是可执行的是什么意思?为什么我们不使用评论来做到这一点?谁能解释一下?
由于
答案 0 :(得分:1)
你没有做平方根(Math.sqrt(f)
,见http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html#sqrt(double)
)但是除以2(f/2
)。所以没有错。你需要的是使用Math.sqrt(...)如果这是我认为你需要查看你的方法的名称。
答案 1 :(得分:1)
JML不是Java的一部分。它是由研究人员联盟设计的扩展,但没有官方认可。因此,Java编译器不会考虑JML注释,但您可以使用特殊编译器编译带有JML注释的Java程序,以便考虑可执行规范。例如,JML4C。
答案 2 :(得分:1)
嗯,此代码本身不会为您创建任何警告。存在各种利用JML规范的工具,例如:
除此之外,如果使用得当,JML规范可以向程序员的外国读者/维护者透露程序员的意图。