まず、単一の変数名を使用しないでください!これは悪い習慣であり、ファイルを読みにくくします。よりわかりやすい名前を使用すると、コードの可読性が向上します。
List j
が作成される方法は、コンストラクタのスコープ内にのみ存在します。コンストラクタの後にList j
にアクセスできなくなりました。コンストラクタの後でアクセスできるようにするには、オブジェクトのフィールドを用意します。たとえば:
public class Example {
private int specialNumber;
private List<Integer> numberList;
/**
* Constructs a new Example Object
*/
public Example(int exampleNum){
// specialNumber can be accessed from a Getter method (getSpecialNumber)
this.specialNumber = exampleNum;
this.numberList = new ArrayList<Integer>();
this.numberList.add(exampleNum);
// numberList is a field of this Example now
List<Integer> disappearingList = new ArrayList<Integer>();
disappearingList.add(exampleNum);
// After this method finishes, disappearingList will be gone
}
// disappearingList is no longer accessible
/**
* Gets this Example's specialNumber value
* @return int this.specialNumber
*/
public int getSpecialNumber(){
return this.specialNumber;
}
/**
* Gets this Example's numberList
* @return List<Integer> this.numberList
*/
public List<Integer> getNumberList(){
return this.numberList;
}
}
は、Javaの洗浄方法の一部にフックし、それを引き出すための方法は、おそらくありますが、それは少し厄介を取得します。別のオブジェクトの内部にオブジェクトを作成し、コンストラクタの後で使用できるようにするには、フィールドとして保存する必要があります。
オブジェクトの作成が終わるとすぐに 'j'への参照を失うので、それは問題ではないと私は思っています。 – Makoto
'ArrayList'は全く必要ありません。これらの3行のコードは単に 'this.nesto = 8;' – David
に置き換えることができます。実行が現在のスコープを終了すると( "中括弧"を参照)、そのスコープで参照されるすべての変数はGCに適格です。答えは:**保存されていない**(とにかく長くはない)。 –