-1

私が呼び出すときSystem.out.println(new Date());、クラスでコンストラクターを呼び出していませんDateか? 間違っている場合は修正してください。その場合、どのように値を返しますか?

4

4 に答える 4

3

toString新しく構築されたオブジェクトのメソッドを暗黙的に呼び出しているため、値が出力されDateます。

これは次と同等です。

Date date = new Date();  
System.out.println(date);
于 2013-05-23T14:04:51.753 に答える
2

もちろん、Date コンストラクターを呼び出しています。「new」演算子を使用するたびに、コンストラクターが呼び出されます。新しく作成されたオブジェクトへの参照を保存していないだけなので、すぐにガベージコレクションされます。したがって、何が起こるかは次のとおりです。

  1. 日付コンストラクタが呼び出されます
  2. Date のインスタンスは、Object 引数を取る println メソッドに渡されます。
  3. println メソッドは、日付で toString() メソッドを呼び出し、文字列表現を取得します。それを印刷します
  4. メソッドが返され、日付のインスタンスがガベージ収集されます(最終的に)
于 2013-05-23T14:06:08.757 に答える
1

前述のように、実際にはDate()クラスのコンストラクターを呼び出しており、暗黙的にそのtoString()メソッドを呼び出しています。そのメソッド何をするかを知りたい場合は、ここを参照してください。

コンストラクターは、システム時間をミリ秒単位 (明らかに数十ミリ秒単位) として取得し、 で使用可能なメソッドを参照してそれlongtoString()解析し、sun.util.calendar.CalendarDate最終的に返される StringBuilder オブジェクトを生成します。

したがって、Date()オブジェクトのコンストラクターを呼び出している (そして暗黙的にそのtoString()メソッドを呼び出している) 間、内部ではさらに多くの処理が行われています。ここでの動機が独自の日付パーサーを作成することである場合は、関連するクラスのソースを参照して確認するか、単にこれらのクラスを呼び出して作業を任せることができます。

于 2013-05-23T14:35:27.170 に答える
0

new Date()コンストラクター呼び出しである式です。

このような式の結果は、新しく構築されたオブジェクトであることが保証されています。(または例外)

于 2013-05-23T14:04:10.287 に答える