在javadoc中,标签@throws和@exception之间有什么区别?

jon*_*hua 31 java javadoc

以下面的基于数组的字符堆栈的实现为例:

public char peek() throws Underflow {
    if (!isEmpty()) {
        return stack[pos];
    } else {
        throw new Underflow("Peeking at an empty stack.");
    }
}
Run Code Online (Sandbox Code Playgroud)

回到我只使用文本编辑器时,我总是使用@exception标签,但现在我的IDE(Netbeans)在生成javadoc时使用了@throws.

所以我的问题是,两者之间的差异是什么时候应该优先于另一个(例如使用上面的代码)?

T.J*_*der 49

没有,他们是同义词.来自文档:

使用@throws标记记录例外
注 - 标签@throws和@exception是同义词.

  • @ jon2512chua:[`@ exception`排在第一位](http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html#@exception),但后来(这是完全猜测)我我觉得有人觉得这个问题太长了,并且与Java的`throws`关键字没有很好的联系,所以他们添加了`@ throws`.但是,它很早*,我认为它们在我1995年开始使用Java时都存在.我几乎从未见过在野外使用过的`@ exception`,似乎有一个明显的偏好``@throws `在社区. (7认同)
  • 嗯,既然如此,为什么 Sun 提供两种方法来记录异常呢? (2认同)
  • 我想知道为什么`@throws` 以“s”结尾,而`@return` 没有。 (2认同)

Har*_*hra 11

@throws 是因为它是关键字(方法声明中的"throws"子句),

而且,作为一个动词,阅读起来更自然.这读作一句话:

@throws NullPointerException
Run Code Online (Sandbox Code Playgroud)

虽然这似乎更多余:

@exception NullPointerException
Run Code Online (Sandbox Code Playgroud)

否则,两者都是同义词


小智 5

@exception如果您抛出一个代码,则不是100%正确Throwable.@throws更准确.(我意识到没有一个好的用例永远使用throw new Throwable(),但理论上它是允许的.)

  • `错误`也是'Throwable`s'不是'Exception`s.你通常不会手动抛出它们,但我已经编写了几个`throw new AssertionError()`. (2认同)