2

次の有効なJavaコードを理解しようとしています。コードにコメントされている2つの質問があります。

class C {
  C x;  //1.) why is something like x = new C(); not required here?  Does this 
        //mean x refers to this current class of C?
  int f;
  void run(boolean b, int x) {
    C y;
    y = new C(); 
    if (b) { this.bump(y,x); } //2.) Is "this" in this.bump necessary?  Likewise,
                               //this.bump(this.y,x) would be equivalent right?
    else { f = this.x.f + 1; }  
  }
  void bump(C z, int j) {
    z.f=j;
  }
  }

ありがとう、そのような基本的な質問をしてすみません

4

6 に答える 6

10

1.) why is something like x = new C(); not required here?

xは初期化されていない参照にすぎません。あなたがそれを使いたいのなら、あなたは確かにそれに何かを割り当てる必要があります。

2.) Is "this" in this.bump necessary?

No.thisは現在のオブジェクトを指し、は現在のオブジェクトxのメンバーであるため、この場合は必要ありません。

2a) Likewise, this.bump(this.y,x) would be equivalent right?

いいえ。yはローカル変数です。でアクセスすることはできませんthis.y

于 2012-12-11T20:54:51.750 に答える
3

これです:

 C x;

タイプのxクラス内で呼び出される単一のフィールドを宣言します。このステートメントは、フィールドの初期値を設定しません。そしてそれは基本的にと同じです;CCxC x = null

それです:

 this.bump(y,x);

thisここでは過剰です。あなたはただで同じになるでしょうbump(y,x);

this.yこの場合、yはローカル変数(メソッド内)であり、フィールドではないため、コンパイルされません。

于 2012-12-11T20:56:14.430 に答える
0

C x;xというタイプCの変数を宣言したことを意味します。を呼び出して作成するインスタンスをまだ作成していませんx = new C();

同じクラス内からメンバーメソッドを呼び出す場合は、thisキーワードを使用する必要はありません。

this.bump(this.y,x)yはローカル変数(runメソッドに対してローカル)であり、クラスメンバーではないため、実際にはコンパイルエラーが発生します。

于 2012-12-11T20:56:18.967 に答える
0

1.) C xここでは何も参照していません。ただし、割り当てると、タイプのクラスを参照しCます。これは現在のクラスである可能性がありますが、参照されている別のクラスが存在する可能性もあります。たとえば、Cがクラスの場合Person、xはこの人の母親、父親、友人などを参照できます...
2.)いいえ、同じ名前のローカル変数がないため、ここでは必要ありません。それに相当します。

于 2012-12-11T20:56:22.180 に答える
0

1)newスタックではなくヒープにメモリを割り当てます

2)thisではthis.bump必要ありません。と呼ばれるメンバー変数がないthis.bump(this.y,x)ため、同等ではありませんclass Cy

于 2012-12-11T20:56:26.590 に答える
0

1.)なぜx = new C();ここで必要とされないようなものがあるのですか?

デフォルトでは、参照はnullです。あるオブジェクトを指すように参照を初期化する必要があるかどうかを判断するのは、プログラマー次第です。

これは、xがこの現在のクラスのCを参照していることを意味しますか?

ここに、xクラスのインスタンスへの参照がありますC。参照はすることができます(そしてそうです)null

2.)必要ですかthisthis.bump

いいえ。

同様に、this.bump(this.y,x)同等の権利でしょうか?

はい。

于 2012-12-11T20:56:31.823 に答える