Di JavaRush, siswa diperkenalkan dengan kata kunci secara harfiah sejak perkuliahan pertama
dan ternyata Anda cukup memberikan nilai ke variabel
Artinya,
Dan dibawah ini adalah kode program dengan kata kunci
this
. Dan seiring berjalannya waktu, menjadi jelas apa artinya. Tetapi banyak orang, jika melihat ke belakang, mungkin dengan jujur berkata pada diri mereka sendiri bahwa untuk waktu yang lama mereka tidak dapat menyadari inti dari kata kunci ini. Pada artikel ini kami membuka tabir rahasia penggunaan kata kunci this
bagi mereka yang masih belum bisa memahaminya... Selamat datang! Jika Anda mengambil buku referensi Java Schildt , di halaman 171 Anda akan membaca bahwa kata kunci this
diperlukan agar suatu metode dapat mereferensikan objek yang memanggilnya. Ini sebenarnya bisa menjadi akhir dari semuanya. Namun kami memerlukan hal yang spesifik. Sebagai aturan, this
ini harus digunakan dalam dua kasus:
- Ketika variabel instan kelas dan variabel metode/konstruktor memiliki nama yang sama;
- Saat Anda perlu memanggil konstruktor dari satu tipe (misalnya, konstruktor default atau berparameter) dari tipe lain. Ini juga disebut panggilan konstruktor eksplisit.
Contoh satu - variabel instan dan variabel metode memiliki nama yang sama
Katakanlah kita mempunyai kelasHuman
yang bidang "namanya" didefinisikan: Mari kita name
buat penyetel untuk variabel (penyetelnya cukup berfungsi dan tidak ada trik di sini): Perlu diingat bahwa kita meneruskan variabel ke metode (penyetel ) . Kita memperkenalkan variabel baru dan (secara umum) dapat menamainya sesuai keinginan kita karena variabel tersebut hanya akan terlihat di dalam {kurung kurawal} metode . Perhatikan bahwa ada satu baris di setter: setName
String newName
setName
name = newName;
Faktanya, kita memperkenalkan variabel baru newName
dan menugaskannya ke variabel yang sudah ada di kelas name
. Banyak programmer yang menganggap aneh memperkenalkan variabel dengan nama baru jika pada akhirnya kita membicarakan hal yang sama. Tentang nama di kelas Human
. Oleh karena itu, pengembang bahasa berpikir untuk mempermudah penggunaan satu nama variabel. Dengan kata lain, mengapa memiliki dua nama untuk suatu variabel yang artinya sama. Artinya, saya ingin melakukan sesuatu seperti ini: Namun dalam kasus ini timbul masalah . Kami sekarang memiliki dua variabel yang diberi nama sama. Satu String name
milik kelas Human
, dan yang lainnya String name
milik metodenya setName
. Oleh karena itu, mesin Java tidak mengetahui variabel mana yang Anda maksud saat Anda menulis string di penyetel:
name = name;
Java mengambil yang terdekat - name
dari metode setName
:
name
dari metode ini, ke variabel tersebut. Yang tentu saja tidak masuk akal. Oleh karena itu, diperlukan suatu cara untuk membedakan variabel name
dari kelas Human
dari variabel name
dari suatu metode.Untuk setName
mengatasi masalah ini, kata kunci diperkenalkan this
, yang dalam hal ini akan menunjukkan bahwa perlu untuk memanggil variabel bukan dari suatu metode, tetapi dari sebuah kelas Human
:
this
akan merujuk pada objek pemanggil, seperti yang disebutkan di awal artikel. Akibatnya, nama orang tersebut setName
akan diatur melalui setter ke objek yang dibuat. Di bawah ini adalah kode tanpa menggunakan kata kunci this
. Kode tersebut membuat objek kelas Human
dan memberinya nama:
this
:
public class Solution{
public static void main(String[] args) {
Human human1 = new Human();
human1.setName("Volodya");
human1.print();
}
}
class Human{
String name;
public String getName() {
return name;
}
public void setName(String name){
this.name = name;
}
void print(){
System.out.println(name);
}
}
Oleh karena itu, hal ini this
menghindari pengenalan variabel baru untuk menunjukkan hal yang sama, yang membuat kode tidak terlalu “kelebihan beban” dengan variabel tambahan.
Contoh Dua - Menggunakan ini untuk memanggil konstruktor secara eksplisit
Memanggil satu konstruktor dari konstruktor lain dapat berguna ketika Anda (anehnya) memiliki beberapa konstruktor dan Anda tidak ingin menulis ulang kode inisialisasi yang diberikan sebelumnya di konstruktor di konstruktor baru. Bingung? Semuanya tidak seseram kelihatannya. Lihatlah kode di bawah ini, ia memiliki dua konstruktor kelasHuman
:
class Human{
int age;
int weight;
int height;
Human(int age, int weight){
this.age = age;
this.weight = weight;
}
Human(int age, int weight, int height){
//you call the constructor with two parameters
this(age, weight);
//and add the missing variable
this.height = height;
}
}
Di sini pertama-tama kita memiliki konstruktor dua parameter yang menerima int age
dan int weight
. Katakanlah kita menulis dua baris kode di dalamnya:
this.age = age;
this.weight = weight;
dan kemudian mereka memutuskan untuk menambahkan konstruktor lain, dengan tiga parameter, yang selain usia dan berat, juga membutuhkan tinggi badan. Di konstruktor baru Anda dapat menulis ini:
this.age = age;
this.weight = weight;
this.height = height;
Namun alih-alih mengulangi kode yang telah Anda tulis di konstruktor ini, Anda dapat menggunakan kata kunci untuk this
memanggil konstruktor secara eksplisit dengan dua parameter:
this(age, weight);
// and add the missing variable:
this.height = height;
Jadi, Anda memberi tahu konstruktor dengan tiga parameter:
- panggil konstruktor ini, yang memiliki dua parameter.
- dan tambahkan variabel yang hilang.
this
diteruskan ke semua metode kecuali metode statis (karena itulah this
sering disebut parameter implisit) dan dapat digunakan untuk merujuk ke objek yang memanggil metode tersebut. Tidak perlu takut dengan kata kunci ini, karena This
tidak menakutkan.
GO TO FULL VERSION