2011-04-07 7 views
-1
class Forest {  

    void lion(){ 
     System.out.println("king of the jungle"); 
    } 

    public static void main (String a[]){ 
     Forest f = new Forest(); 
     f.lion(); //call 1 
     Forest j = f; 
     j.lion(); // call 2 
    } 
} 

コール1との違いは何ですか。&コール2?
オブジェクトfが削除された場合、コール2ではどうなりますか?オブジェクトリファレンス

+1

どのように削除されましたか? j = fを入れた後に単にf = nullにすると、何も起こりません。 – Heisenbug

+3

Java命名規則(http://www.oracle.com/technetwork/java/codeconv-138413.html) – RoflcoptrException

+0

@Roflcoptr:参照リンクを与えるためのok.thanksに従うようにしてください。 –

答えて

3
  1. オブジェクトが削除されません(参照がまだアクティブであるように、GarbageCollectorはそれを破壊しないであろう)
  2. コールは同じである(これらは両方とも実際森林
  3. の同じインスタンスの同じメソッドを呼び出します、f = null、j.lion()の前に明白な結果はありません。

さらに、Javaの命名規則に従わないと警告を出すEclipseのようなツールを入手してください。最初は慣れていた。

+1

私はそれを推測していますIDEの「学習」は、オブジェクト、インスタンス、クラスの概念を理解する上で、より役立つかもしれません。 Eclipseはそれのためにはあまりにも多くのジャンプです。代わりにBlueJを試してみることをお勧めします。後で命名規則について心配します。 – Grundlefleck

+0

public static void main(String a []){ フォレストf =新しいフォレスト(); f.lion(); ; // 1を呼び出します フォレストj = f; j.lion(); //を –

+1

@Grundlefleck私はEclipseは本当に良いスタートではないことに同意することができます。まずIDEなしで簡単なプログラムを書くべきだと思います。しかし、命名規則の心配が延期されるとは思っていません。それはすぐにそれを得ることは困難である間違ってそれを学ぶ場合は、インポートのものです。チームで作業する場合、多くの問題が命名規則に従わない人々によって引き起こされます。 – RoflcoptrException

0
  1. 何もありません。
  2. 何もありません。

電話番号のような参考情報を考えてください。電話機には複数の番号を割り当てることができますが、電話機を削除するとその電話機は存在し、他の番号でも電話がかかります。すべての番号を削除すると、誰もあなたに電話をかけることができません。

(しかし、そこにあなたの携帯電話を破壊するために次の日の朝までになります何のたくましいガベージコレクタは、いないアナロジーが故障した場合、これはある。)

0

両方の呼び出しがfjの両方を参照するための基礎となる森にlion()を呼び出します。 fが基本フォレストを参照しなくなったのに、jが依然として実行する場合、j.lion()は引き続き期待どおりに動作します。

ここで気に留めておくべき点は、fjはフォレストへの参照で、実際にそれらが参照するフォレストはメモリのどこかに存在することです。実際の基礎となるフォレストへの参照がなくなった時点で、そのフォレストはガベージコレクションの候補になります(注:すぐにガベージコレクションされない可能性があります)。しかし、基本的なフォレストへの少なくとも1つの参照が残っている限り、そのフォレストは依然として存在します。ここで、fが基本フォレストを参照しなくなると、それでもjが参照されます。そのため、基本フォレストは依然として存在し、j.lion()コールが成功します。

1

呼び出し1と呼び出し2の間に違いはありません。new forest()が呼び出されると、新しいforestオブジェクトがヒープ上に割り当てられ、初期化されます。そのオブジェクトへの参照は、宣言した変数fに格納されます。変数jfの値に初期化するときは、同じforestオブジェクトへの参照をjに保存するだけです。 fをnullに設定しても、forestオブジェクトはガベージコレクション(削除)されません。 forestオブジェクトは、そのオブジェクトへのすべての参照が無効になるか、ここでは発生しない範囲外になるまでガベージコレクションされません。

0

メソッドlion()は、同じ基本オブジェクトインスタンスで呼び出されます。 f = nullに設定できますが、jの参照はインスタンスに残ります。

乾杯、

0

fが、それはjがFのライオンメソッドを呼び出して独自のライオンの方法、です呼び出します。

fがnullに設定されている場合、コール2は例外をスローします。

関連する問題