Kata this
kunci terutama digunakan dalam tiga situasi. Yang pertama dan paling umum adalah dalam metode setter untuk mendisambiguasi referensi variabel. Yang kedua adalah ketika ada kebutuhan untuk melewatkan instance kelas saat ini sebagai argumen ke metode objek lain. Yang ketiga adalah sebagai cara untuk memanggil konstruktor alternatif dari dalam konstruktor.
Kasus 1: Menggunakan this
untuk mendamaikan referensi variabel. Dalam metode Java setter, kita biasanya meneruskan argumen dengan nama yang sama dengan variabel anggota pribadi yang kita coba atur. Kami kemudian menetapkan argumen x
untuk this.x
. Ini memperjelas bahwa Anda menetapkan nilai parameter "nama" ke variabel "nama" contoh.
public class Foo
{
private String name;
public void setName(String name) {
this.name = name;
}
}
Kasus 2: Menggunakan this
sebagai argumen yang diteruskan ke objek lain.
public class Foo
{
public String useBarMethod() {
Bar theBar = new Bar();
return theBar.barMethod(this);
}
public String getName() {
return "Foo";
}
}
public class Bar
{
public void barMethod(Foo obj) {
obj.getName();
}
}
Kasus 3: Menggunakan this
untuk memanggil konstruktor alternatif. Dalam komentar, trinithis dengan benar menunjukkan penggunaan umum lain dari this
. Ketika Anda memiliki beberapa konstruktor untuk satu kelas, Anda dapat menggunakan this(arg0, arg1, ...)
untuk memanggil konstruktor lain yang Anda pilih, asalkan Anda melakukannya di baris pertama konstruktor Anda.
class Foo
{
public Foo() {
this("Some default value for bar");
//optional other lines
}
public Foo(String bar) {
// Do something with bar
}
}
Saya juga telah melihat this
digunakan untuk menekankan fakta bahwa variabel instance sedang direferensikan (tanpa perlunya disambiguasi), tetapi itu adalah kasus yang jarang menurut saya.
this(arg1, arg2, ...)
di dalam konstruktor.this
yang saya lupa, jadi saya menambahkannya ke jawaban saya. Saya tidak melihat ada yang salah dengan ini karena hasil akhirnya adalah jawaban yang lebih baik secara keseluruhan, yang merupakan tujuan dari SO. Saya juga mencoba memberikan kredit sedapat mungkin, seperti yang saya lakukan dalam kasus trinithis.this
gunakan selama bertahun-tahun, hanya digunakan jika disambiguasi benar-benar diperlukan, seperti pada contoh setter saya di atas. Gaya pengkodean dan "praktik terbaik" dapat sangat bervariasi tergantung pada siapa yang Anda tanyakan, tentu saja, tetapi secara umum, saya sarankan memilih pola yang masuk akal dan berpegang teguh pada mereka. Konsistensi, bahkan hanya secara internal dalam basis kode tunggal, berjalan jauh menuju keterbacaan dan pemeliharaan.Penggunaan penting kedua
this
(selain bersembunyi dengan variabel lokal seperti yang sudah dijawab oleh banyak jawaban) adalah ketika mengakses instance luar dari kelas non-statis bersarang:sumber
Anda hanya perlu menggunakan
this
- dan kebanyakan orang hanya menggunakannya - ketika ada variabel lokal yang tumpang tindih dengan nama yang sama. (Metode penyetel, misalnya.)Tentu saja, alasan lain yang baik untuk digunakan
this
adalah bahwa hal itu menyebabkan intellisense untuk muncul di IDE :)sumber
Satu-satunya kebutuhan untuk menggunakan
this.
kualifikasi adalah ketika variabel lain dalam lingkup saat ini berbagi nama yang sama dan Anda ingin merujuk ke anggota contoh (seperti yang dijelaskan William). Selain itu, tidak ada perbedaan perilaku antarax
danthis.x
.sumber
this.x
untuk membuat kode Anda membaca sedikit lebih jelas juga, pemeliharaan / keterbacaan kode juga merupakan faktor yang harus Anda pertimbangkan ..."ini" juga berguna saat memanggil satu konstruktor dari yang lain:
sumber
this
berguna dalam pola pembangun.sumber
Ada banyak jawaban bagus, tetapi ada alasan lain yang sangat kecil untuk diletakkan di
this
mana - mana. Jika Anda telah mencoba membuka kode sumber Anda dari editor teks biasa (mis. Notepad dll), menggunakanthis
akan membuatnya jauh lebih jelas untuk dibaca.Bayangkan ini:
Ini sangat jelas untuk dibaca dengan IDE modern, tetapi ini akan menjadi mimpi buruk total untuk dibaca dengan editor teks biasa.
Anda akan berjuang untuk mencari tahu di mana
foo
berada, sampai Anda menggunakan fungsi "menemukan" editor. Maka Anda akan berteriakgetStringFromSomewhere()
karena alasan yang sama. Terakhir, setelah Anda lupa apa yangs
ada, itubar = s
akan memberi Anda pukulan terakhir.Bandingkan dengan ini:
foo
adalah variabel yang dideklarasikan di kelas luarHello
.getStringFromSomewhere()
adalah metode yang dideklarasikan di kelas luar juga.bar
milikWorld
kelas, dans
merupakan variabel lokal yang dideklarasikan dalam metode itu.Tentu saja, setiap kali Anda mendesain sesuatu, Anda membuat aturan. Jadi saat merancang API atau proyek Anda, jika aturan Anda termasuk "jika seseorang membuka semua kode sumber ini dengan notepad, ia harus menembak dirinya sendiri di kepala," maka Anda benar-benar baik-baik saja untuk tidak melakukan ini .
sumber
Kecuali Anda memiliki nama variabel yang tumpang tindih, itu hanya untuk kejelasan ketika Anda membaca kode.
sumber
this
kata kunci terus-menerus ketika itu tidak perlu itu hanya kode boilerplate membuat kode lebih sulit untuk dibaca.this
TIDAK membuat kode lebih sulit untuk dibaca lmao.@William Brendel menjawab dengan tiga kasus penggunaan yang berbeda dengan cara yang baik.
Gunakan case 1:
Halaman dokumentasi java resmi pada ini menyediakan kasus penggunaan yang sama.
Ini mencakup dua contoh:
Menggunakan ini dengan Field dan Menggunakan ini dengan Konstruktor
Gunakan case 2:
Use case lain yang belum dikutip dalam posting ini:
this
dapat digunakan untuk menyinkronkan objek saat ini dalam aplikasi multi-threaded untuk menjaga bagian penting dari data & metode.Gunakan case 3:
Implementasi pola Builder tergantung pada penggunaan
this
untuk mengembalikan objek yang dimodifikasi.Lihat posting ini
Menjaga pembangun di kelas terpisah (antarmuka lancar)
sumber
Google membuka halaman di situs Sun yang membahas ini sedikit.
Anda benar tentang variabel;
this
memang bisa digunakan untuk membedakan variabel metode dari bidang kelas.Namun, saya sangat membenci konvensi itu. Memberi dua variabel berbeda nama yang sama persis adalah resep untuk bug. Saya lebih suka sesuatu seperti:
Hasil yang sama, tetapi tanpa kemungkinan bug di mana Anda secara tidak sengaja merujuk
x
ketika Anda benar-benar dimaksudkan untuk merujukx
.Untuk menggunakannya dengan metode, Anda benar tentang efeknya; Anda akan mendapatkan hasil yang sama dengan atau tanpa itu. Bisakah kamu menggunakannya? Tentu. Haruskah Anda menggunakannya? Terserah Anda, tetapi mengingat bahwa saya secara pribadi berpikir itu verbositas yang tidak berarti yang tidak menambah kejelasan (kecuali kode dijejali pernyataan impor statis), saya tidak cenderung menggunakannya sendiri.
sumber
Berikut ini adalah cara untuk menggunakan kata kunci 'ini' di java:
this
kata kunci untuk merujuk variabel instan kelas saat inithis()
untuk memanggil konstruktor kelas saat inithis
kata kunci untuk mengembalikan instance kelas saat inithis
kata kunci sebagai parameter metodehttps://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html
sumber
ketika ada dua variabel satu variabel instan dan variabel lokal lainnya dari nama yang sama maka kita menggunakan ini. untuk merujuk objek yang sedang dieksekusi saat ini untuk menghindari konflik antara nama.
sumber
this
adalah referensi ke objek saat ini. Ini digunakan dalam konstruktor untuk membedakan antara variabel kelas lokal dan saat ini yang memiliki nama yang sama. misalnya:this
juga dapat digunakan untuk memanggil satu konstruktor dari konstruktor lain. misalnya:sumber
Akankah ada perbedaan jika saya menggunakan "x" alih-alih "this.x" dalam beberapa metode?
Biasanya tidak. Tapi kadang-kadang ada bedanya:
Jika saya hanya menggunakan "metode ()", apakah itu tidak akan, secara default, diterapkan ke objek saat ini?
Iya. Tetapi jika perlu,
this.method()
jelaskan bahwa panggilan itu dilakukan oleh objek ini.sumber
this
tidak mempengaruhi kode yang dihasilkan - ini adalah waktu kompilasi operator dan kode yang dihasilkan dengan atau tanpa itu akan sama. Ketika Anda harus menggunakannya, tergantung pada konteksnya. Misalnya Anda harus menggunakannya, seperti yang Anda katakan, ketika Anda memiliki variabel lokal yang membayangi variabel kelas dan Anda ingin merujuk ke variabel kelas dan bukan variabel lokal.sunting: dengan "kode yang dihasilkan akan sama" Maksud saya tentu saja, ketika beberapa variabel dalam lingkup lokal tidak menyembunyikan yang milik kelas. Jadi
kode yang dihasilkan dari kedua metode akan sama. Perbedaannya adalah jika beberapa metode mendeklarasikan variabel lokal dengan nama yang sama
sumber
Sehubungan dengan posting William Brendel dan pertanyaan dbconfessions , mengenai kasus 2 . Berikut ini sebuah contoh:
Saya pernah melihat ini digunakan, ketika membangun hubungan orangtua-anak dengan objek. Namun, harap dicatat bahwa ini disederhanakan demi singkatnya.
sumber
Kata kunci "Ini" dalam java digunakan untuk merujuk objek kelas saat ini.
Ada 6 penggunaan kata kunci "ini" di java
ref: https://stacktraceguru.com/java/this-keyword-in-java
sumber
Untuk memastikan bahwa anggota objek saat ini digunakan. Kasus di mana keselamatan ulir menjadi perhatian, beberapa aplikasi dapat mengubah nilai anggota objek yang salah, untuk alasan ini ini harus diterapkan pada anggota sehingga nilai anggota objek yang benar digunakan.
Jika objek Anda tidak mementingkan keamanan utas, maka tidak ada alasan untuk menentukan nilai anggota objek mana yang digunakan.
sumber