私はJavaクラスの学生で、今日のJavaについて何かを学び、私の歯車を回しました。私は教師にどのように、そしてなぜそれを聞いたのか、彼はその行動について確信が持てませんでした。誰も次の例がなぜ機能するのか説明できますか?Javaスコープ:メソッド内でインスタンス化されたオブジェクトを返す - それは危険ですか?
class Example {
public int ex_val;
public Example (int a) {
this.ex_val = a;
}
public int getExVal() {
return this.ex_val;
}
}
私は別のクラスと「リターン」オブジェクトのメソッド内で「例」のインスタンスを作成した場合、それは成功し、それのうちのジャンプは、元の範囲だし、その後使用することができます。
class ParentObject {
// Instance Variables
public Example a;
public ParentObject (int number) {
// Initialize instance variable object from out-of-scope instantiation
this.a = genExample(number);
// Verify scope creep
System.out.println(this.a.getExVal());
}
public Example genExample (int a) {
return new Example(a);
}
}
これは機能しますが、この動作は安定していますか?これに数えることはできますか?ガベージコレクタは、あるメソッドのreturn文と呼び出し関数の代入文の間にジャンプできますか?私のOSのバージョンのJVMに基づいて、障害の危険性を実行していますか?それが信頼できるなら、これは便利な機能のように思えます。
あなたがここで何を求めているのか分かりません。 「元の範囲から飛び降りる」とはどういう意味ですか?あなたはC++プログラマーですか? –
あなたはライフタイムとスコープを混同しています。スコープは変数に、ライフタイムはオブジェクトに関係すると考えてください。 –