CodeGym /Java Blog /Acak /Jawa kata kunci ini
John Squirrels
Level 41
San Francisco

Jawa kata kunci ini

Dipublikasikan di grup Acak
Di CodeGym, siswa diperkenalkan dengan kata kunci Java this secara harfiah sejak pelajaran pertama. Seiring waktu, maknanya menjadi jelas. Namun melihat ke belakang, banyak orang mungkin mengakui pada diri mereka sendiri bahwa untuk waktu yang lama mereka tidak dapat memahami Zen dari kata kunci ini. Artikel ini akan membuka tabir yang menutupi rahasia kata kunci this untuk siapa saja yang belum dapat melakukannya... Saya memiliki referensi Java Schildt , lalu di halaman 171 Anda dapat melihat bahwa kata kunci this diperlukan untuk metode untuk mereferensikan objek yang memanggilnya. Kita bisa mengakhiri pelajaran dengan itu. Tapi kita perlu spesifik. Sebagai aturan, Anda perlu menggunakan ini dalam dua kasus:
  1. Ketika variabel instan dan variabel metode/konstruktor memiliki nama yang sama;
  2. Saat Anda perlu memanggil tipe konstruktor tertentu (misalnya, konstruktor default atau konstruktor berparameter) dari tipe konstruktor lain. Ini juga disebut panggilan konstruktor eksplisit.
Dan itu saja — hanya ada dua kasus di mana kata kunci yang menakutkan ini digunakan. Sekarang mari kita lihat dua kasus ini sebagai contoh.

Contoh 1: Variabel instan dan variabel metode memiliki nama yang sama.

Misalkan kita memiliki kelas Manusia yang mendefinisikan bidang nama: Mari kita buat penyetel untuk variabel nama (penyetel berfungsi penuh — tidak ada tangkapan di sini):

class Human {
    String name;


    public void setName(String newName) {
        name = newName;
    }
}
Perhatikan, kita meneruskan String newName ke metode penyetel setName . Kita mendeklarasikan variabel baru dan bisa menamainya sesuka kita karena itu hanya akan terlihat di dalam kurung kurawal ({}) yang menyertakan metode setName . Perhatikan bahwa setter memiliki satu baris:

name = newName;
Di sini kami telah memperkenalkan variabel baru bernama newName dan menugaskannya ke variabel nama objek yang sudah ada . Banyak programmer mungkin merasa aneh untuk memperkenalkan variabel dengan nama baru ketika pada akhirnya kita berbicara tentang hal yang sama. Artinya, kita berbicara tentang bidang nama di kelas Manusia . Itu sebabnya pencipta Java memikirkan cara mudah menggunakan nama variabel yang sama. Dengan kata lain, mengapa ada dua nama untuk variabel yang menunjukkan hal yang sama. Dengan kata lain, kami ingin melakukan sesuatu seperti ini:

class Human {
    String name;


    public void setName(String name) {
        name = name;
    }
}
Tapi di sini kita menemui masalah . Kami sekarang memiliki dua variabel dengan nama yang sama. Satu nama String milik kelas Manusia , sedangkan nama String lainnya milik metode setName -nya . Akibatnya, JVM tidak akan mengetahui variabel mana yang Anda rujuk saat Anda menulis baris berikut di setter:

name = name;
Java menganggap yang Anda maksud adalah variabel nama terdekat , yaitu variabel dari metode setName : Kata kunci ini (dengan contoh) - 3Jadi ternyata Anda hanya menetapkan variabel nama metode itu sendiri. Yang tentu saja tidak masuk akal. Oleh karena itu, bahasa memerlukan beberapa cara untuk membedakan variabel nama kelas Manusia dari variabel nama dalam metode setName . Masalah ini diselesaikan dengan memperkenalkan kata kunci this , yang dalam hal ini menunjukkan bahwa Anda bermaksud merujuk variabel yang terkait dengan instance kelas Manusia , bukan variabel dalam metode: Dengan kata lain, iniKata kunci ini (dengan contoh) - 4mengacu pada objek panggilan, seperti yang kami sebutkan di awal artikel. Akibatnya, metode setName menyetel nama orang tersebut pada objek yang dibuat. Berikut adalah kode program tanpa menggunakan kata kunci ini . Kode membuat objek Manusia dan memberinya nama: Kata kunci ini (dengan contoh) - 5Dan ini kode dengan kata kunci ini :

public class Solution {
    public static void main(String[] args) {
        Human human1 = new Human();
        human1.setName("Vinny");
        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);
    }
}
Dengan demikian, ini memungkinkan kita menghindari pengenalan variabel baru untuk menunjukkan hal yang sama, membuat kode lebih bersih dan tidak berantakan dengan variabel tambahan.

Contoh 2: Menggunakan ini untuk panggilan konstruktor eksplisit

Memanggil satu konstruktor dari yang lain dapat berguna ketika Anda memiliki (anehnya) beberapa konstruktor dan Anda tidak ingin konstruktor baru menduplikasi kode inisialisasi yang sebelumnya ditulis dalam konstruktor yang berbeda. Bingung? Ini tidak begitu menakutkan seperti kelihatannya. Lihatlah kode di bawah ini. Ini memiliki dua konstruktor untuk kelas Manusia :

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) {
        // Call the constructor with two parameters
        this(age, weight);
        // and then initialize the missing variable
        this.height = height;
    }
}
Di sini pertama-tama kita menyediakan konstruktor dengan dua parameter: int age dan int weight . Misalkan memiliki dua baris kode:

this.age = age;
this.weight = weight;
Kemudian kami memutuskan untuk menambahkan konstruktor lain dengan tiga parameter, menambahkan tinggi ke parameter usia dan berat yang ada. Anda dapat menulis konstruktor baru seperti ini:

this.age = age;
this.weight = weight;
this.height = height;
Namun alih-alih mengulangi kode yang ada di konstruktor ini, Anda dapat menggunakan kata kunci this untuk memanggil konstruktor secara eksplisit dengan dua parameter:

this(age, weight);
// and then initialize the missing variable:
this.height = height;
Seolah-olah kita mengatakan kepada konstruktor tiga parameter:
  • sebut ini konstruktor lain yang memiliki dua parameter
  • dan kemudian menambahkan variabel lain.
Itu saja =). Terakhir, kami mencatat bahwa di Java kata kunci this hanya digunakan dalam metode dan konstruktor. Tapi ini diteruskan secara implisit ke semua metode non-statis (itulah mengapa ini sering disebut parameter implisit) dan dapat digunakan untuk merujuk ke objek yang memanggil metode tersebut. Jangan takut dengan kata kunci ini, karena ini tidak menakutkan.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION