JavaRush /Java Blog /Random-ID /Kata kunci ini {dalam contoh}

Kata kunci ini {dalam contoh}

Dipublikasikan di grup Random-ID
Di JavaRush, siswa diperkenalkan dengan kata kunci secara harfiah sejak perkuliahan pertama 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 thisbagi mereka yang masih belum bisa memahaminya... Selamat datang! Jika Anda mengambil buku referensi Java Schildt , di halaman 171 Anda akan membaca bahwa kata kunci thisdiperlukan agar suatu metode dapat mereferensikan objek yang memanggilnya. Ini sebenarnya bisa menjadi akhir dari semuanya. Namun kami memerlukan hal yang spesifik. Kata kunci ini {dalam contoh} - 1Sebagai aturan, thisini harus digunakan dalam dua kasus:
  1. Ketika variabel instan kelas dan variabel metode/konstruktor memiliki nama yang sama;
  2. Saat Anda perlu memanggil konstruktor dari satu tipe (misalnya, konstruktor default atau berparameter) dari tipe lain. Ini juga disebut panggilan konstruktor eksplisit.
Itu saja, sebenarnya tidak banyak, hanya dua contoh di mana kata kunci yang ditakuti ini digunakan. Sekarang mari kita lihat dua situasi ini dengan contoh.

Contoh satu - variabel instan dan variabel metode memiliki nama yang sama

Katakanlah kita mempunyai kelas Humanyang bidang "namanya" didefinisikan: Kata kunci ini {dalam contoh} - 2Mari kita namebuat penyetel untuk variabel (penyetelnya cukup berfungsi dan tidak ada trik di sini): Perlu diingat bahwa kita meneruskan variabel Kata kunci ini {dalam contoh} - 3ke 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: setNameString newNamesetName
name = newName;
Faktanya, kita memperkenalkan variabel baru newNamedan 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: Kata kunci ini {dalam contoh} - 4Namun dalam kasus ini timbul masalah . Kami sekarang memiliki dua variabel yang diberi nama sama. Satu String namemilik kelas Human, dan yang lainnya String namemilik 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 - namedari metode setName:
Kata kunci ini {dalam contoh} - 5
dan ternyata Anda cukup memberikan nilai ke variabel namedari metode ini, ke variabel tersebut. Yang tentu saja tidak masuk akal. Oleh karena itu, diperlukan suatu cara untuk membedakan variabel namedari kelas Humandari variabel namedari suatu metode.Untuk setNamemengatasi 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:
Kata kunci ini {dalam contoh} - 6
Artinya, thisakan merujuk pada objek pemanggil, seperti yang disebutkan di awal artikel. Akibatnya, nama orang tersebut setNameakan diatur melalui setter ke objek yang dibuat. Di bawah ini adalah kode tanpa menggunakan kata kunci this. Kode tersebut membuat objek kelas Humandan memberinya nama:
Kata kunci ini {dalam contoh} - 7
Dan dibawah ini adalah kode program dengan kata kunci 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 thismenghindari 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 kelas Human:
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 agedan 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 thismemanggil 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.
Itu saja =). Terakhir, kami mencatat bahwa kata kunci this di Java hanya digunakan sebagai bagian dari metode atau konstruktor instance kelas. Namun secara implisit, kata kunci thisditeruskan ke semua metode kecuali metode statis (karena itulah thissering disebut parameter implisit) dan dapat digunakan untuk merujuk ke objek yang memanggil metode tersebut. Tidak perlu takut dengan kata kunci ini, karena Thistidak menakutkan.
Kata kunci ini {dalam contoh} - 9
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION