Java建模语言是可执行的吗?

Java建模语言是可执行的吗?,java,jml,Java,Jml,我正在学习软件工程课程,在那里我看到了JML的用法。下面是一段示例代码: //@ requires f >= 0.0 public float sqrt(float f) { return f/2; } 它说正式的JML规范是可执行的 我的问题是,当我们用f=-4调用这个sqrt函数时,这段代码是否会给出错误、抛出异常或警告?我在我的电脑上试过了,效果很好,打印出来了-2。那么JML是可执行的意味着什么呢?为什么我们不只用评论来做这件事呢?有人能解释一下吗 谢谢你没有做平方根(

我正在学习软件工程课程,在那里我看到了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,但我用参数调用它,哦,那么在这种情况下,我认为你错过了最后一个
位于行的末尾。