2011-01-06 16 views
0

StudentRegistrarクラスをインスタンス化するときに、以下のコードは何をしますか?Java初期化の質問

public class StudentRegistrar 
{ 
    public StudentRegistrar(); 
    { 
     new RecordManager().Initialize(); 
    } 
} 

答えて

4

にコンパイルされません。 Initialize()は、RecordManagerへの参照を保持できる新しいスレッドを生成することができます。新しいスレッドはガベージコレクションルートであるため、RecordManager参照はそのルートから到達可能であるため、クリーンアップされません。

これは実際にはInitializeの機能に依存します。

1

は、RecordManagerのインスタンスを作成Initialize()メソッドを呼び出し、次にRecordManagerのインスタンスを破壊します。

編集:実は、それはそれは必要なすぐにRecordManagerを破壊しないため、スプリアス;

+3

* RecordManagerのインスタンスを破棄する*を*に置き換える必要がありますRecordManagerのインスタンスをGarbage Collectionで使用できるようにします* –

+0

@Sean破棄という用語は間違っていますが、ガベージコレクションで利用できるようになっている初期化関数がRecordManagerインスタンスへの強い参照またはソフト参照を維持するオブジェクトを作成しない場合にのみ当てはまります。 sjrの応答は技術的に正確です。 – LINEMAN78

+0

@ LINEMAN78 sjrは多くの仮定をしています。どちらの答えが正しいかは、誰が正しいと仮定しているかによって異なります –