/ **和/ *在Java注释中
有什么区别
/** * comment * * */
和
/* * * comment * */
在Java中? 我应该什么时候使用它们?
第一种forms叫做Javadoc 。 当您为您的代码编写正式的API时使用它,这是由javadoc
工具生成的。 例如, Java 7 API页面使用Javadoc,并由该工具生成。
您在Javadoc中看到的一些常见元素包括:
-
@param
:这是用来表示什么参数被传递给一个方法,以及他们期望什么值 -
@return
:这是用来表示该方法将返回的结果 -
@throws
:这是用来表示一个方法在某些input的情况下抛出一个exception或错误 -
@since
:这是用来表示这个类或函数可用的最早的Java版本
作为一个例子,这里是Integer
的compare
方法的Javadoc:
/** * Compares two {@code int} values numerically. * The value returned is identical to what would be returned by: * <pre> * Integer.valueOf(x).compareTo(Integer.valueOf(y)) * </pre> * * @param x the first {@code int} to compare * @param y the second {@code int} to compare * @return the value {@code 0} if {@code x == y}; * a value less than {@code 0} if {@code x < y}; and * a value greater than {@code 0} if {@code x > y} * @since 1.7 */ public static int compare(int x, int y) { return (x < y) ? -1 : ((x == y) ? 0 : 1); }
第二种forms是块(多行)注释。 如果你想在评论中有多行,你可以使用它。
我会说,你只是希望less用一些后者; 也就是说,你不想用块注释来覆盖你的代码,这些注释不能描述方法/复杂函数应该具有的行为。
由于Javadoc是对这两者的更多描述,并且可以使用它来生成实际的文档,所以对于简单的块注释,使用Javadoc将更可取。
对于Java 编程语言来说 ,两者没有什么区别 。 Java有两种types的评论:传统评论( /* ... */
)和行尾评论( // ...
)。 请参阅Java语言规范 。 因此,对于Java编程语言, /* ... */
和/** ... */
是传统注释的实例,它们在Java编译器中的处理方式完全相同,也就是说它们被忽略或更正确的:他们被视为白色空间)。
但是,作为Java程序员,您不仅使用Java编译器。 您使用了一个完整的工具链,其中包括编译器,IDE,构build系统等。这些工具中的一些工具与Java编译器不同。 特别是, /** ... */
注释由Javadoc工具解释,该工具包含在Java 平台中并生成文档。 Javadoc工具将扫描Java源文件,并将/** ... */
之间的部分解释为文档。
这类似于FIXME
和TODO
这样的标签:如果包含像// TODO: fix this
这样的// TODO: fix this
或者// FIXME: do that
大多数IDE会突出显示这样的注释,这样你就不会忘记它们。 但是对于Java而言,它们只是评论。
首先是Javadoc的评论。 它们可以通过javadoc
工具进行处理,为您的类生成API文档。 第二个是正常的块注释。
阅读JLS的第3.7节,解释一下你需要了解Java中的注释。
有两种评论:
- / *文字* /
传统的评论:从ASCII字符/ *到ASCII字符* /的所有文本都被忽略(如在C和C ++中)。
- //文本
行结束注释:从ASCII字符到结尾的所有文本都被忽略(如在C ++中)。
关于你的问题,
第一个
/** * */
用于声明Javadoc技术 。
Javadoc是一个工具,它parsing一组源文件中的声明和文档注释,并生成一组描述类,接口,构造函数,方法和字段的HTML页面。 您可以使用Javadoc doclet来自定义Javadoc输出。 doclet是一个用Doclet API编写的程序,用于指定由该工具生成的输出的内容和格式。 您可以编写一个doclet来生成任何types的文本文件输出,如HTML,SGML,XML,RTF和MIF。 Oracle提供了一个用于生成HTML格式API文档的标准doclet。 Doclet也可用于执行与生成API文档无关的特殊任务。
有关Doclet
更多信息,请参阅API 。
第二个,如JLS中清楚地解释,将忽略/*
和*/
之间的所有文本,因此用于创build多行注释。
在Java中您可能想了解一些关于注释的其他内容
- 评论不要嵌套。
-
/* and */
在以//
开头的注释中没有特殊含义。 -
//
在以/* or /**
开头的注释中没有特殊含义。 - 词法语法意味着注释不会出现在字符文字( §3.10.4 )或string文字( §3.10.5 )中。
因此,以下文字是一个完整的评论:
/* this comment /* // /** ends here: */
我不认为现有的答案能够充分解决这部分问题:
我应该什么时候使用它们?
如果您正在编写将在您的组织中发布或重用的API,则应该为每个public
类,方法和字段以及非final
类的protected
方法和字段编写全面的Javadoc注释。 Javadoc应涵盖方法签名无法传达的所有内容,例如前置条件,后置条件,有效参数,运行时exception,内部调用等。
如果你正在编写一个内部的API(一个被同一个程序的不同部分使用的API),那么Javadoc可能就不那么重要了。 但是为了维护程序员的利益,你仍然应该把Javadoc写成任何正确的用法或含义并不明显的方法或者字段。
Javadoc的“杀手级function”是它与Eclipse和其他IDE紧密集成。 开发人员只需将鼠标指针hover在标识符上即可了解他们需要了解的所有信息。 不断提及文档成为经验丰富的Java开发人员的第二天性,从而提高了自己的代码质量。 如果您的API没有用Javadoclogging,那么有经验的开发人员不会希望使用它。
首先是你在类,接口,方法等顶部定义的Javadoc。你可以使用Javadoc作为名字的build议来logging你的代码是什么类或什么方法等,并生成报告。
第二个是代码块评论。 比如说你有一些你不想编译器解释的代码块,然后使用代码块注释。
另一个是//你在语句级别上用来指定正在执行的代码行应该做什么。
还有一些其他的也像// TODO,这标志着你想要在那个地方做点什么
//当你有一些临时的解决scheme时,你可以使用FIXME,但是你想稍后再访问并使其更好。
希望这可以帮助
以下Java代码清单中的注释是灰色字符:
/** * The HelloWorldApp class implements an application that * simply displays "Hello World!" to the standard output. */ class HelloWorldApp { public static void main(String[] args) { System.out.println("Hello World!"); //Display the string. } }
Java语言支持三种评论:
/* text */
编译器会忽略从/*
到*/
。
/** documentation */
这表示文档评论(简称文档评论)。 编译器会忽略这种注释,就像忽略使用/*
和*/
的注释一样。 在准备自动生成的文档时,JDK javadoc工具使用doc注释。
// text
编译器会忽略从//
到行尾的所有内容。
现在关于何时应该使用它们:
当你想评论一行代码时,使用// text
。
使用/* text */
当你想注释多行代码。
使用/** documentation */
当您想添加一些关于程序的信息时,可以使用它来自动生成程序文档。
Java支持两种types的注释:
-
/* multiline comment */
:编译器忽略从/*
到*/
。 评论可以跨越多行。 -
// single line
:编译器忽略从//
到行尾的所有内容。
某些工具(如javadoc)为其目的使用特殊的多行注释。 例如/** doc comment */
是在准备自动生成的文档时由javadoc使用的文档注释,但是对于Java,这是一个简单的多行注释。