8

次のクラスを書くと:

public class Example {

      int j;
      int k;

      public Example(int j, int k) {
           j = j;
           k = k;
      }

      public static void main(String[] args) {
           Example exm = new Example(1,2);
           System.out.println(exm.j);
           System.out.println(exm.k);
      }

}

プログラムはコンパイルされますが、プログラムを実行すると、メイン メソッドが 2 つの 0 を出力します。コンストラクターでインスタンス変数を初期化したいと言うには、次のように記述しなければならないことを知っています。

this.j = j;
this.k = k;

しかし、私がそれを書かない場合、どの変数がコンストラクターで評価 (または考慮) されますか? (式の左側と書き込み側)? 引数ですか、それともインスタンス変数ですか? 違いはありますか?

thisの使用が義務付けられている他のケースはありますか?

4

13 に答える 13

6

これを記述しない場合は、引数をそれ自体に割り当てます。引数変数はインスタンス変数を隠します。

于 2009-02-05T15:16:15.657 に答える
1

この with method に関するフォローアップの質問に答えるために、Srikanth によって言及された内部クラスは、これを使用する有効な例です: (今回は method を使用)

public class OuterClass
{
    void f() {System.out.println("Outer f()");};
    class InnerClass {
        void f() {
            System.out.println("Inner f()");
            OuterClass.this.f();
        }
    }
}

匿名クラスでも同じ状況があります:

外部クラスのメソッドは、次の方法で参照できます。

  • MyOuterClass.this.yOuterInstanceMethod()
  • MyOuterClass.myOuterInstanceMethod()
  • または単にmyOuterInstanceMethod() あいまいさがない場合
于 2009-02-06T07:01:29.350 に答える
0

これはあなたの質問に完全には答えませんが、Eclipseを使用している場合は、「割り当ては効果がありません」設定が役立つ場合があります。これは他のIDEにもあると確信しています。

于 2009-02-06T07:29:20.077 に答える
0

これを回避するには、IDE (Eclipse など) を使用すると、この場合は警告が生成されます。

また、絶対にできない場合を除き、フィールドを final にします。そうする理由は(これ以外にも)いくつかあります。

于 2009-07-03T12:14:37.380 に答える
0

ポインターを明示的に必須にする利点は何this/selfですか? をご覧になることをお勧めします。
お気づきのように Java ではusingthisは必須ではありませんが、Java での using の主題にも光を当てると確信してthisいます。

于 2009-07-03T11:02:11.360 に答える