1

質問: BufferedReaderを使用して新しいスキャナークラスをインスタンス化し、スキャナークラス自体を返すメソッドがあります。私が理解している限り、JavaはScannerクラスを返します-C ++で参照またはポインターと呼ぶものとは対照的に、オブジェクトの「コピー」(値渡し)として。ロジックが正しい場合、つまり、呼び出したメソッドでインスタンス化されたスキャナーは引き続きOPENのままであり、ガベージコレクションは行われませんか?

例:(裸の骨)

private Scanner getDataFromWebService(String url)
{
    URLConnection sc = null;
    URL test = null;
    Scanner scanner = null;

    test = new URL(url);
    sc = test.openConnection();
    in = new BufferedReader(new InputStreamReader(sc.getInputStream());

    scanner = new Scanner(in);

    return scanner;
}

// Sample Call

Scanner newScanner = getDataFromWebService(url);

第二に、あなたがとても親切に義務付けられるなら; 次に、URLConnectionとBufferedReaderはどうなりますか。これは、getDataFromWebServiceメソッドでスキャナーを返す前にこれらを閉じると、返されたスキャナーが「無効化」されるためです。おそらく、これに対する答えは最初の質問にあります。

ここでのベストプラクティスは、複雑なオブジェクトを返さないことです。

4

1 に答える 1

4

参照のコピーを取得します。したがって、同じオブジェクト インスタンスを引き続き使用します。

于 2012-10-17T06:46:36.250 に答える