このプログラムは正常に実行されます。暗黙的にこれを返すことがわかっているので、コンストラクタでの空白の戻りの使用とは何ですか。 Java=のバグですか、それとも何らかの用途がありますか?.
class Demo
{
int salary;
Demo()
{
salary =11500;
//return this;(implicitly)
return;
}
public static void main(String... s)
{
System.out.println(new Demo().salary);
}
}
Void関数の戻り値は、関数の自然な終わりの前に制御フローをエスケープするために使用されます。そのため、有効なステートメントである必要があります。
関数の最後のステートメントが既存のコードを壊す以外に役立たないので、それを明示的に禁止するために邪魔になることはありません。
あなたはそれを糸くずしたいかもしれませんが、それをエラーにしたり、不正な形式にすることはできません。
コンストラクタの最後に単一のリターンを置いても何も変わりませんが、害はなく、voidメソッドの最後にリターンを置くことと同じです。ただし、 ガード条件 のように、コンストラクタの別の場所にリターンを配置すると、違いが生じます。これは許容されるので、戻りの使用を冗長でない状況のみに制限することの価値は、実際に努力する価値はありません。それは理由もなく言語を複雑にします。
呼び出し元にとって、コンストラクターはインスタンスを返すstaticメソッドと同様に動作します。しかし、内部からコンストラクターはvoid
がinstanceメソッドを返すように動作するため、return
ステートメントで値を指定できないのは一貫性があるだけです。
これをnew XYZ()
として精神的にモデル化し、通常のインスタンスメソッドと同様に、最初にコンパイラ生成コードでゼロに初期化されたインスタンスを作成してから、そのインスタンスでユーザー作成コンストラクタを呼び出すことができます。
何かのようなもの:
public static T create() // Compiler generated
{
T instance = AllocateZeroed<T>();
instance.field1 = ABC; // field initializers
instance.field2 = DEF; // field initializers
...
instance.constructor(); // user-written constructor chain
return instance;
}