回答:
最初の形式はJavadocと呼ばれます。これは、javadoc
ツールによって生成されるコード用の正式なAPIを作成するときに使用します。たとえば、Java 7 APIページはJavadocを使用し、そのツールによって生成されました。
Javadocに表示される一般的な要素には、次のものがあります。
@param
:これは、メソッドに渡されるパラメーターと、パラメーターに期待される値を示すために使用されます
@return
:これは、メソッドが返す結果を示すために使用されます
@throws
:これは、特定の入力の場合にメソッドが例外またはエラーをスローすることを示すために使用されます
@since
:これは、このクラスまたは関数が使用可能だった最も古いJavaバージョンを示すために使用されます
例として、次のcompare
メソッドのJavadocを示しますInteger
。
/**
* 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);
}
2番目の形式は、ブロック(複数行)コメントです。コメントに複数の行を含める場合に使用します。
後者の形式は控えめに使用したいだけです。つまり、メソッド/複雑な関数がどのような振る舞いをするべきかを記述していないブロックコメントでコードに負担をかけたくないのです。
Javadocは2つのうちでより記述的であり、それを使用した結果として実際のドキュメントを生成できるため、単純なブロックコメントよりもJavadocを使用する方が望ましいでしょう。
Java プログラミング言語の場合、2つの間に違いはありません。Javaには、従来のコメント(/* ... */
)と行末コメント()の2種類のコメントがあります// ...
。Java言語仕様を参照してください。したがって、Javaプログラミング言語の場合、/* ... */
と/** ... */
はどちらも従来のコメントのインスタンスであり、Javaコンパイラではどちらもまったく同じように扱われます。つまり、無視されます(正確には、空白として扱われます)。
ただし、Javaプログラマーは、Javaコンパイラーだけを使用するわけではありません。コンパイラー、IDE、ビルドシステムなどを含むツールチェーン全体を使用します。これらのツールの一部は、Javaコンパイラーとは解釈が異なります。特に、/** ... */
コメントは、Java プラットフォームに含まれ、ドキュメントを生成するJavadocツールによって解釈されます。Javadocツールは、Javaソースファイルをスキャンし、その間の部分/** ... */
をドキュメントとして解釈します。
これはFIXME
andのようなタグに似ています。or やのTODO
ようなコメントを含めると、ほとんどのIDEはそのようなコメントを強調表示して、忘れないようにします。しかし、Javaの場合、これらは単なるコメントです。 // TODO: fix this
// FIXME: do that
javadoc
ツールが何かを解釈できないため、不満が出始めます。
JLSのセクション3.7を読むと、Javaのコメントについて知っておく必要があるすべてのことがわかります。
コメントには2種類あります。
- / *テキスト* /
従来のコメント:ASCII文字/ *からASCII文字* /までのすべてのテキストは無視されます(CおよびC ++の場合と同様)。
- //テキスト
行末コメント:ASCII文字//から行末までのすべてのテキストは無視されます(C ++の場合と同様)。
あなたの質問について、
最初の1つ
/**
*
*/
Javadoc Technologyを宣言するために使用されます。
Javadocは、一連のソースファイル内の宣言とドキュメントコメントを解析し、クラス、インターフェース、コンストラクター、メソッド、およびフィールドを説明する一連のHTMLページを生成するツールです。Javadocドックレットを使用して、Javadoc出力をカスタマイズできます。ドックレットは、ツールによって生成される出力の内容と形式を指定するドックレットAPIで記述されたプログラムです。ドックレットを作成して、HTML、SGML、XML、RTF、MIFなど、あらゆる種類のテキストファイル出力を生成できます。Oracleは、HTML形式のAPIドキュメントを生成するための標準ドックレットを提供しています。ドックレットは、APIドキュメントの作成に関連しない特別なタスクを実行するためにも使用できます。
詳細についてDoclet
は、APIを参照してください。
間で二番目に、などJLSに明確に説明し、すべてのテキストを無視する/*
と、*/
複数行のコメントを作成するために使用されるように。
Javaのコメントについて知りたいと思うその他の事項
/* and */
で始まるコメントには特別な意味はありません//
。//
で始まるコメントでは、特別な意味はありません/* or /**
。したがって、次のテキストは単一の完全なコメントです。
/* this comment /* // /** ends here: */
既存の回答が質問のこの部分に適切に対処したとは思いません:
いつ使うべきですか?
組織内で公開または再利用されるAPIを作成する場合は、すべてのpublic
クラス、メソッド、フィールド、protected
および非final
クラスのメソッドとフィールドに対して包括的なJavadocコメントを記述する必要があります。Javadocは、前提条件、事後条件、有効な引数、実行時例外、内部呼び出しなど、メソッドシグネチャでは伝達できないすべてをカバーする必要があります。
内部API(同じプログラムの異なる部分で使用されるもの)を作成している場合、Javadocはおそらくそれほど重要ではありません。ただし、保守プログラマーの利益のために、正しい使用法や意味がすぐに明らかではない任意のメソッドまたはフィールドのJavadocを作成する必要があります。
Javadocの「キラー機能」は、Eclipseや他のIDEと密接に統合されていることです。開発者は、マウスポインターを識別子の上に置くだけで、識別子について知る必要があるすべてのことを学ぶことができます。常にドキュメントを参照することは、経験豊富なJava開発者にとって第二の性質となり、独自のコードの品質を向上させます。APIがJavadocで文書化されていない場合、経験豊富な開発者はそれを使いたくないでしょう。
以下の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言語は3種類のコメントをサポートしています。
/* text */
コンパイラはから/*
までのすべてを無視します*/
。
/** documentation */
これは、ドキュメンテーションコメント(略してdocコメント)を示します。コンパイラは、/*
and を使用するコメントを無視するのと同じように、この種のコメントを無視します*/
。JDK javadocツールは、自動生成されたドキュメントを準備するときにドキュメントコメントを使用します。
// text
コンパイラーは//
、行の終わりまですべてを無視します。
次に、それらをいつ使用するべきかについて:
// text
コードの1行にコメントを付ける場合に使用します。
/* text */
複数行のコードにコメントを付ける場合に使用します。
/** documentation */
プログラムのドキュメントの自動生成に使用できるプログラムに関する情報を追加する場合に使用します。
1つ目は、クラス、インターフェース、メソッドなどの上に定義するJavadocです。Javadocを名前のとおりに使用して、クラスの機能やメソッドの機能などについてコードを文書化し、そのレポートを生成できます。
2つ目はコードブロックコメントです。たとえば、コンパイラに解釈させたくないコードブロックがあり、コードブロックコメントを使用するとします。
もう1つは//これをステートメントレベルで使用して、コードの前の行で実行することを指定します。
// TODOなどの他にもいくつかあります。これは、後でその場所で何かをしたいことを示します。
//一時的な解決策があるが、後でアクセスして改善したい場合に使用できるFIXME。
お役に立てれば
Javaは2種類のコメントをサポートしています。
/* multiline comment */
:コンパイラはから/*
までのすべてを無視します*/
。コメントは複数行にまたがることができます。
// single line
:コンパイラーは//
、行の終わりまですべてを無視します。
javadocなどの一部のツールは、その目的のために特別な複数行コメントを使用します。たとえば/** doc comment */
、自動生成されたドキュメントを準備するときにjavadocによって使用されるドキュメントコメントですが、Javaの場合は単純な複数行コメントです。
/** .. */
通常の複数行コメントであり、その中の最初の文字はたまたまアスタリスクです。