this.field と field を次のように単独で使用して、クラス フィールドを参照することの違いをよりよく理解したいと思います。
this.integerField = 5;
と
integerField = 5;
this.field と field を次のように単独で使用して、クラス フィールドを参照することの違いをよりよく理解したいと思います。
this.integerField = 5;
と
integerField = 5;
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);
}
具体的な質問から離れて、this
Inの使用Overloaded constructors
:
これを使用して、以下のようにオーバーロードされたコンストラクターを呼び出すことができます。
public class ABC {
public ABC() {
this("example");to call overloadedconstructor
sysout("no args cons");
}
public ABC(String x){
sysout("one argscons")
}
}
キーワードを使用this
すると、関数パラメーターなどのメンバー変数とローカル変数の間のあいまいさを解消できます。
public MyClass(int integerField) {
this.integerField = integerField;
}
上記のコード スニペットは、ローカル変数の値をintegerField
同じ名前のクラスのメンバー変数に割り当てます。
一部のショップでは、すべてのメンバー アクセスを .xml で修飾する必要があるコーディング標準を採用していthis
ます。これは有効ですが、不要です。衝突が存在しない場合、削除this
してもプログラムの意味は変わりません。
インスタンス メソッドを使用している場合、変数を参照するスコープを指定する必要がある場合があります。例えば :
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
、使用しているスコープに依存します。実行時に使用するインスタンス (オブジェクト) によって異なります。
まったく同じです。入力することが多いためthis.xyz
、その名前のフィールドがあり、それをシャドウするローカル変数がない場合、同じことを意味するショートカットです。
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
}
}
見た目も動作も同じですが、フィールドとメソッド引数の間で同じ名前が共有されている場合は違いがあります。次に例を示します。
private String name;
public void setName(String name){
this.name = name;
}
name
は渡されたパラメータでありthis.name
、適切なクラス フィールドです。this.
... と入力すると、多くの IDE ですべてのクラス フィールド [およびメソッド] のリストが表示されることに注意してください。