/ **和/ *在Java注释中

有什么区别

/** * comment * * */ 

 /* * * comment * */ 

在Java中? 我应该什么时候使用它们?

第一种forms叫做Javadoc 。 当您为您的代码编写正式的API时使用它,这是由javadoc工具生成的。 例如, Java 7 API页面使用Javadoc,并由该工具生成。

您在Javadoc中看到的一些常见元素包括:

  • @param :这是用来表示什么参数被传递给一个方法,以及他们期望什么值

  • @return :这是用来表示该方法将返回的结果

  • @throws :这是用来表示一个方法在某些input的情况下抛出一个exception或错误

  • @since :这是用来表示这个类或函数可用的最早的Java版本

作为一个例子,这里是Integercompare方法的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源文件,并将/** ... */之间的部分解释为文档。

这类似于FIXMETODO这样的标签:如果包含像// 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,这是一个简单的多行注释。