工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

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 を使用しました キーワード:


これをコンストラクターのオーバーロードで使用する

コンストラクターのオーバーロードを操作しているときに、あるコンストラクターを別のコンストラクターから呼び出す必要がある場合があります。このような場合、コンストラクターを明示的に呼び出すことはできません。代わりに 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 を使用しています。 キーワード、

行に注意してください、

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

  1. C# このキーワード
  2. Java オペレーター
  3. Java コメント
  4. Java for-each ループ
  5. Java コンストラクター
  6. Java 文字列
  7. Java このキーワード
  8. Java 最終キーワード
  9. Java インターフェイス
  10. Java カプセル化
  11. Java匿名クラス