Java建模语言是可执行的吗?
我正在学习软件工程课程,在那里我看到了JML的用法。下面是一段示例代码:Java建模语言是可执行的吗?,java,jml,Java,Jml,我正在学习软件工程课程,在那里我看到了JML的用法。下面是一段示例代码: //@ requires f >= 0.0 public float sqrt(float f) { return f/2; } 它说正式的JML规范是可执行的 我的问题是,当我们用f=-4调用这个sqrt函数时,这段代码是否会给出错误、抛出异常或警告?我在我的电脑上试过了,效果很好,打印出来了-2。那么JML是可执行的意味着什么呢?为什么我们不只用评论来做这件事呢?有人能解释一下吗 谢谢你没有做平方根(
//@ requires f >= 0.0
public float sqrt(float f) {
return f/2;
}
它说正式的JML规范是可执行的
我的问题是,当我们用f=-4调用这个sqrt函数时,这段代码是否会给出错误、抛出异常或警告?我在我的电脑上试过了,效果很好,打印出来了-2。那么JML是可执行的意味着什么呢?为什么我们不只用评论来做这件事呢?有人能解释一下吗
谢谢你没有做平方根(
Math.sqrt(f)
,请参阅http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html#sqrt(双精度)
)但除以2(f/2
)。所以这没什么错。如果我假设您需要查看方法的名称,那么您需要使用Math.sqrt(…)。JML不是Java的一部分。这是一个由研究人员联盟设计的扩展,但没有得到官方认可。因此,Java编译器不考虑JML注释,但是您可以使用特殊的编译器编译带有JML注释的Java程序,以便考虑可执行规范。例如,.这个代码本身不会为您创建任何警告。存在多种使用JML规范的工具,例如:
- jmlrac:测试执行期间是否违反断言
- ESC/Java2:静态验证;编译时证明合同从未被违反
- jmldoc:javadoc风格的文档
- jmlc:断言检查编译器
- jmlunit:单元测试工具
除此之外,如果使用得当,JML规范会向代码的外国读者/维护者揭示程序员的意图。好吧,这是代码,我想问一些关于代码的问题。我不明白否决票!其实这在这里并不重要。我只是想知道:我给了函数一个先决条件,说参数必须>=0,但我用参数调用它,哦,那么在这种情况下,我认为你错过了最后一个
代码>位于行的末尾。