Java このキーワード
Java このキーワード
この記事では、Java でのこのキーワードについて、例を使ってどのように、どこで使用するかを学びます。
このキーワード
Java では、このキーワードは、メソッドまたはコンストラクター内の現在のオブジェクトを参照するために使用されます。たとえば、
class Main {
int instVar;
Main(int instVar){
this.instVar = instVar;
System.out.println("this reference = " + this);
}
public static void main(String[] args) {
Main obj = new Main(8);
System.out.println("object reference = " + obj);
}
}
出力 :
this reference = Main@23fc625e object reference = Main@23fc625e
上記の例では、obj という名前のオブジェクトを作成しました。 Main クラスの .次に、オブジェクト obj への参照を出力します と this
クラスのキーワード。
ここで、両方の obj の参照が と this
同じです。これは、現在のオブジェクトへの参照に過ぎないことを意味します。
このキーワードの使用
this
が発生する状況はさまざまです。 キーワードが一般的に使用されます。
あいまいな変数名にこれを使用する
Java では、スコープ (クラススコープまたはメソッドスコープ) 内で同じ名前の変数を 2 つ以上宣言することはできません。ただし、インスタンス変数とパラメーターは同じ名前を持つ場合があります。たとえば、
class MyClass {
// instance variable
int age;
// parameter
MyClass(int age){
age = age;
}
}
上記のプログラムでは、インスタンス変数とパラメーターの名前は同じ age です。ここで、Java コンパイラは名前のあいまいさのために混乱しています。
そんな時にこのキーワードを使います。たとえば、
まず this
を使わない例を見てみましょう キーワード:
class Main {
int age;
Main(int age){
age = age;
}
public static void main(String[] args) {
Main obj = new Main(8);
System.out.println("obj.age = " + obj.age);
}
}
出力 :
obj.age = 0
上記の例では、8
を渡しています。 コンストラクターへの値として。ただし、0
を取得しています 出力として。これは、インスタンス変数とパラメーターの間の名前があいまいなため、Java コンパイラーが混乱するためです。
では、上記のコードを this
を使用して書き直してみましょう。 キーワード。
class Main {
int age;
Main(int age){
this.age = age;
}
public static void main(String[] args) {
Main obj = new Main(8);
System.out.println("obj.age = " + obj.age);
}
}
出力 :
obj.age = 8
これで、期待される出力が得られました。コンストラクターが呼び出されると、 this
になるためです。 コンストラクター内はオブジェクト obj に置き換えられます コンストラクターを呼び出しました。したがって、年齢 変数に値 8 が割り当てられます .
また、パラメーターとインスタンス変数の名前が異なる場合、コンパイラーは自動的にこのキーワードを追加します。たとえば、コード:
class Main {
int age;
Main(int i) {
age = i;
}
}
と同等です:
class Main {
int age;
Main(int i) {
this.age = i;
}
}
ゲッターとセッターでこれ
this
のもう 1 つの一般的な使用法 キーワードは setter メソッドと getters メソッドにあります クラスの。例:
class Main {
String name;
// setter method
void setName( String name ) {
this.name = name;
}
// getter method
String getName(){
return this.name;
}
public static void main( String[] args ) {
Main obj = new Main();
// calling the setter and the getter method
obj.setName("Toshiba");
System.out.println("obj.name: "+obj.getName());
}
}
出力 :
obj.name: Toshiba
ここでは this
を使用しました キーワード:
- setter メソッド内で値を割り当てる
- getter メソッド内の値にアクセスする
これをコンストラクターのオーバーロードで使用する
コンストラクターのオーバーロードを操作しているときに、あるコンストラクターを別のコンストラクターから呼び出す必要がある場合があります。このような場合、コンストラクターを明示的に呼び出すことはできません。代わりに this
を使用する必要があります キーワード。
ここでは、このキーワードの別の形式を使用します。つまり、this()
.例を挙げましょう
class Complex {
private int a, b;
// constructor with 2 parameters
private Complex( int i, int j ){
this.a = i;
this.b = j;
}
// constructor with single parameter
private Complex(int i){
// invokes the constructor with 2 parameters
this(i, i);
}
// constructor with no parameter
private Complex(){
// invokes the constructor with single parameter
this(0);
}
@Override
public String toString(){
return this.a + " + " + this.b + "i";
}
public static void main( String[] args ) {
// creating object of Complex class
// calls the constructor with 2 parameters
Complex c1 = new Complex(2, 3);
// calls the constructor with a single parameter
Complex c2 = new Complex(3);
// calls the constructor with no parameters
Complex c3 = new Complex();
// print objects
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
}
}
出力 :
2 + 3i 3 + 3i 0 + 0i
上記の例では、this
を使用しています。 キーワード、
- コンストラクタ
Complex(int i, int j)
を呼び出す コンストラクタComplex(int i)
から - コンストラクタ
Complex(int i)
を呼び出す コンストラクタComplex()
から
行に注意してください、
System.out.println(c1);
ここで、オブジェクト c1 を出力すると 、オブジェクトは文字列に変換されます。このプロセスでは、toString()
と呼ばれます。 toString()
をオーバーライドするので クラス内のメソッドで、そのメソッドに従って出力を取得します。
this()
の大きな利点の 1 つ 重複コードの量を減らすことです。ただし、this()
を使用するときは常に注意が必要です。 .
これは、別のコンストラクターからコンストラクターを呼び出すとオーバーヘッドが追加され、プロセスが遅くなるためです。 this()
を使用するもう 1 つの大きな利点 重複コードの量を減らすことです。
注意 :あるコンストラクターから別のコンストラクターを呼び出すことは、明示的なコンストラクター呼び出しと呼ばれます。
これを引数として渡す
this
を使用できます キーワードを使用して、現在のオブジェクトを引数としてメソッドに渡します。たとえば、
class ThisExample {
// declare variables
int x;
int y;
ThisExample(int x, int y) {
// assign values of variables inside constructor
this.x = x;
this.y = y;
// value of x and y before calling add()
System.out.println("Before passing this to addTwo() method:");
System.out.println("x = " + this.x + ", y = " + this.y);
// call the add() method passing this as argument
add(this);
// value of x and y after calling add()
System.out.println("After passing this to addTwo() method:");
System.out.println("x = " + this.x + ", y = " + this.y);
}
void add(ThisExample o){
o.x += 2;
o.y += 2;
}
}
class Main {
public static void main( String[] args ) {
ThisExample obj = new ThisExample(1, -2);
}
}
出力 :
Before passing this to addTwo() method: x = 1, y = -2 After passing this to addTwo() method: x = 3, y = 0
上記の例では、コンストラクタ ThisExample()
内で 、行に注意してください、
add(this);
ここでは、add()
を呼び出しています。 メソッドにこれを引数として渡す。このキーワードにはオブジェクト obj への参照が含まれているため、 クラスの x の値を変更できます と y add()
の中 メソッド。
Java