1

this.field と field を次のように単独で使用して、クラス フィールドを参照することの違いをよりよく理解したいと思います。

this.integerField = 5;

integerField = 5;
4

6 に答える 6

7

thisキーワードは、現在の を参照しobjectます。通常this.memberVariable、メンバー変数とローカル変数を区別するために使用します

private int x=10;

     public void m1(int x) {
      sysout(this.x)//would print 10 member variable
      sysout(x); //would print 5; local variable
      } 

   public static void main(String..args) {
      new classInst().m1(5);

   }

具体的な質問から離れて、thisInの使用Overloaded constructors:

これを使用して、以下のようにオーバーロードされたコンストラクターを呼び出すことができます。

public class ABC {
     public ABC() {
      this("example");to call overloadedconstructor
      sysout("no args cons");
     }
      public ABC(String x){
         sysout("one argscons")
        }

 }
于 2012-10-30T00:03:52.333 に答える
4

キーワードを使用thisすると、関数パラメーターなどのメンバー変数とローカル変数の間のあいまいさを解消できます。

public MyClass(int integerField) {
    this.integerField = integerField;
}

上記のコード スニペットは、ローカル変数の値をintegerField同じ名前のクラスのメンバー変数に割り当てます。

一部のショップでは、すべてのメンバー アクセスを .xml で修飾する必要があるコーディング標準を採用していthisます。これは有効ですが、不要です。衝突が存在しない場合、削除thisしてもプログラムの意味は変わりません。

于 2012-10-30T00:07:11.340 に答える
2

インスタンス メソッドを使用している場合、変数を参照するスコープを指定する必要がある場合があります。例えば ​​:

private int x;

public void method(int x) {
    System.out.println("Method x   : " + x);
    System.out.println("Instance x : " + this.x);
}

この例では、2 つの変数がありますがx、1 つはローカル メソッド変数で、もう 1 つはクラス変数です。で 2 つを区別しthisて指定できます。

thisクラス変数を使用する前に常に使用する人もいます。必須ではありませんが、コードの可読性が向上する場合があります。

ポリモーフィズムに関しては、親クラスを として参照できますsuper。例えば ​​:

class A {
    public int getValue() { return 1; }
}
class B extends A {
    // override A.getValue()
    public int getValue() { return 2; }

    // return 1 from A.getValue()
    // have we not used super, the method would have returned the same as this.getValue()
    public int getParentValue() { return super.getValue(); }   
}

thisキーワードとキーワードはどちらもsuper、使用しているスコープに依存します。実行時に使用するインスタンス (オブジェクト) によって異なります。

于 2012-10-30T00:07:51.723 に答える
1

まったく同じです。入力することが多いためthis.xyz、その名前のフィールドがあり、それをシャドウするローカル変数がない場合、同じことを意味するショートカットです。

于 2012-10-30T00:03:43.907 に答える
0

Javaチュートリアルから:

インスタンスメソッドまたはコンストラクター内では、これは現在のオブジェクト(メソッドまたはコンストラクターが呼び出されているオブジェクト)への参照です。これを使用して、インスタンスメソッドまたはコンストラクター内から現在のオブジェクトの任意のメンバーを参照できます。

したがって、オブジェクト内でメソッドを呼び出すと、呼び出しは次のようになります。

public class MyClass{

    private int field;

    public MyClass(){
        this(10); // Will call the constructor with a int argument
    }

    public MyClass(int value){
    }

    //And within a object, the methods look like this
    public void myMethod(MyClass this){ //A reference of a object of MyClass
        this.field = 10; // The current object field
    }

}
于 2012-10-30T00:14:11.943 に答える
0

見た目も動作も同じですが、フィールドとメソッド引数の間で同じ名前が共有されている場合は違いがあります。次に例を示します。

private String name;

public void setName(String name){

    this.name = name;

}

nameは渡されたパラメータでありthis.name、適切なクラス フィールドです。this.... と入力すると、多くの IDE ですべてのクラス フィールド [およびメソッド] のリストが表示されることに注意してください。

于 2012-10-30T00:09:49.370 に答える