Java ini: Di ​​mana dan Bagaimana menggunakannya?

Dalam artikel ini, kita akan belajar mengenai kata kunci ini di Java, bagaimana dan di mana menggunakannya dengan bantuan contoh.

Kata kunci ini

Di Java, kata kunci ini digunakan untuk merujuk pada objek semasa dalam kaedah atau konstruktor. Sebagai contoh,

 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); ) )

Keluaran :

 rujukan ini = Rujukan objek Utama @ 23fc625e = Utama @ 23fc625e

Dalam contoh di atas, kami membuat objek bernama obj dari kelas Utama. Kami kemudian mencetak rujukan ke objek obj dan thiskata kunci kelas.

Di sini, kita dapat melihat bahawa rujukan kedua-dua obj dan thissama. Ini bermaksud ini hanyalah rujukan kepada objek semasa.

Penggunaan Kata Kunci ini

Terdapat pelbagai situasi di mana thiskata kunci biasa digunakan.

Menggunakan ini untuk Ambiguity Variable Names

Di Jawa, tidak diizinkan untuk menyatakan dua atau lebih pemboleh ubah yang memiliki nama yang sama di dalam ruang lingkup (ruang lingkup kelas atau ruang lingkup kaedah). Walau bagaimanapun, pemboleh ubah dan parameter contoh mungkin mempunyai nama yang sama. Sebagai contoh,

 class MyClass ( // instance variable int age; // parameter MyClass(int age)( age = age; ) )

Dalam program di atas, pemboleh ubah contoh dan parameter memiliki nama yang sama: usia. Di sini, penyusun Java keliru kerana kesamaran nama.

Dalam keadaan sedemikian, kami menggunakan kata kunci ini. Sebagai contoh,

Pertama, mari kita lihat contoh tanpa menggunakan thiskata kunci:

 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); ) )

Keluaran :

 mc.age = 0

Dalam contoh di atas, kami telah 8memberikan nilai kepada pembina. Namun, kami mendapat 0hasil. Ini kerana penyusun Java menjadi bingung kerana kesamaran dalam nama antara contoh pemboleh ubah dan parameter.

Sekarang, mari tulis semula kod di atas menggunakan thiskata kunci.

 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); ) )

Keluaran :

 obj.age = 8

Sekarang, kami mendapat hasil yang diharapkan. Ini kerana apabila konstruktor dipanggil, thisdi dalam konstruktor digantikan oleh objek obj yang telah memanggil konstruktor. Oleh itu pemboleh ubah umur diberikan nilai 8.

Juga, jika nama parameter dan pemboleh ubah instance berbeza, penyusun akan menambahkan kata kunci ini secara automatik. Contohnya, kod:

 class Main ( int age; Main(int i) ( age = i; ) )

bersamaan dengan:

 class Main ( int age; Main(int i) ( this.age = i; ) )

ini dengan Getter dan Setter

Penggunaan thiskata kunci lain yang biasa digunakan adalah kaedah setter dan getter dalam kelas. Sebagai contoh:

 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()); ) )

Keluaran :

 obj.name: Toshiba

Di sini, kami telah menggunakan thiskata kunci:

  • untuk memberikan nilai di dalam kaedah setter
  • untuk mengakses nilai dalam kaedah mendapatkan

Menggunakan ini dalam Overloading Konstruktor

Semasa bekerja dengan beban konstruktor, kita mungkin perlu memanggil satu pembina dari pembina yang lain. Dalam kes seperti itu, kita tidak dapat memanggil konstruktor secara eksplisit. Sebaliknya, kita harus menggunakan thiskata kunci.

Di sini, kami menggunakan bentuk kata kunci yang berbeza. Iaitu , this(). Mari kita ambil contoh,

 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); ) )

Keluaran :

 2 + 3i 3 + 3i 0 + 0i

Dalam contoh di atas, kami telah menggunakan thiskata kunci,

  • untuk memanggil pembina Complex(int i, int j)dari pembinaComplex(int i)
  • untuk memanggil pembina Complex(int i)dari pembinaComplex()

Perhatikan garis,

 System.out.println(c1);

Here, when we print the object c1, the object is converted into a string. In this process, the toString() is called. Since we override the toString() method inside our class, we get the output according to that method.

One of the huge advantages of this() is to reduce the amount of duplicate code. However, we should be always careful while using this().

This is because calling constructor from another constructor adds overhead and it is a slow process. Another huge advantage of using this() is to reduce the amount of duplicate code.

Note: Invoking one constructor from another constructor is called explicit constructor invocation.

Passing this as an Argument

We can use this keyword to pass the current object as an argument to a method. For example,

 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); ) )

Keluaran :

 Sebelum meneruskan kaedah ini untuk addTwo (): x = 1, y = -2 Setelah meneruskan kaedah ini untuk addTwo (): x = 3, y = 0

Dalam contoh di atas, di dalam konstruktor ThisExample(), perhatikan garis,

 add(this);

Di sini, kita memanggil add()kaedah dengan menyampaikannya sebagai hujah. Oleh kerana kata kunci ini mengandungi rujukan ke objek obj kelas, kita dapat mengubah nilai x dan y di dalam add()kaedah.

Artikel menarik...