Dalam Metode dan Anggota Data, kami menyebutkan bahwa objek di Java diinisialisasi saat dibuat. Selama inisialisasi, anggota data objek diberi nilai awal. Kita dapat menginisialisasinya secara eksplisit. Jika kita tidak menetapkan nilai awal pada anggota data, anggota data akan mengadopsi nilai awal default berdasarkan tipenya.
Inisialisasi eksplisit mengharuskan kita menentukan nilai awal saat menulis program, yang terkadang merepotkan. Kita dapat menggunakan konstruktor untuk menginisialisasi objek. Konstruktor dapat menginisialisasi anggota data dan menentukan operasi tertentu. Operasi ini dilakukan secara otomatis saat objek dibuat.
mendefinisikan konstruktor
Konstruktor adalah sebuah metode. Seperti metode normal, kami mendefinisikan konstruktor di kelas. Konstruktor mempunyai ciri-ciri dasar sebagai berikut:
1. Nama konstruktor sama dengan nama kelas
2. Konstruktor tidak memiliki nilai kembalian
Kami mendefinisikan konstruktor kelas Manusia:
Tes kelas publik{ public static void main(String[] args) { Manusia aPerson = Manusia baru(160); Sistem.out.println(aPerson.getHeight()); (int h) { this.height = h; System.out.println("Saya lahir"); /** * accessor */ int getHeight() { kembalikan this.height; int tinggi;}
Program di atas akan mencetak kode kode yang disalin sebagai berikut:
saya lahir
160
Konstruktor dapat menerima daftar parameter seperti metode biasa. Di sini, konstruktor Human() menerima bilangan bulat sebagai parameter. Di isi metode, kami menetapkan parameter integer ke tinggi anggota data. Konstruktor melakukan dua hal ketika objek dibuat:
Konstruktor dapat menerima daftar parameter seperti metode biasa. Di sini, konstruktor Human() menerima bilangan bulat sebagai parameter. Di isi metode, kami menetapkan parameter integer ke tinggi anggota data. Konstruktor melakukan dua hal ketika objek dibuat:
1. Memberikan nilai awal untuk data member this.height = h;
2. Melakukan operasi awal yang spesifik System.out.println("Saya lahir");
Dengan cara ini, kita dapat secara fleksibel menetapkan nilai awal saat memanggil konstruktor tanpa dibatasi seperti inisialisasi eksplisit.
Apa nama konstruktornya? Saat kita membuat kelas, kita semua menggunakan Human() baru. Faktanya, kami memanggil konstruktor kelas Manusia. Ketika kita tidak mendefinisikan metode ini, Java akan menyediakan konstruktor kosong untuk dipanggil saat menggunakan yang baru. Namun saat kita mendefinisikan konstruktor, Java akan memanggil konstruktor yang ditentukan saat membuat objek. Saat menelepon, kami memberikan parameter 160. Anda juga dapat melihat dari hasil akhir pengoperasian bahwa ketinggian objek memang diinisialisasi menjadi 160.
Prioritas metode inisialisasi
Dalam metode dan anggota data, kita dapat melihat bahwa jika kita memberikan nilai awal eksplisit, maka anggota data akan mengambil nilai awal eksplisit, bukan nilai awal default. Namun jika kita berdua memberikan nilai awal eksplisit dan menginisialisasi anggota data yang sama di konstruktor, nilai awal akhir akan ditentukan oleh konstruktor. Misalnya saja contoh berikut ini:
Tes kelas publik{ public static void main(String[] args) { Manusia aPerson = Manusia baru(160); Sistem.out.println(aPerson.getHeight()); (int h) { this.height = h } /** * accessor */ int getHeight() { kembalikan this.height } int height=170;
Hasil yang berjalan adalah:
Copy kode kodenya sebagai berikut:
160
Nilai inisialisasi akhir objek konsisten dengan nilai dalam metode konstruksi. Karena itu:
Metode pembuatan > Penginisialisasi eksplisit > Penginisialisasi default
(Faktanya, apa yang disebut prioritas terkait dengan urutan eksekusi selama inisialisasi, saya akan membahasnya nanti)
Metode kelebihan beban
Sebuah kelas dapat mendefinisikan lebih dari satu konstruktor, misalnya:
Tes kelas publik{ public static void main(String[] args) { Manusia neZha = Manusia baru(150, "sialan"); System.out.println(neZha.getHeight()); konstruktor 1 */ Manusia(int h) { this.height = h; System.out.println("Saya lahir"); /** * konstruktor 2 */ Manusia(int h, String s) { this.height = h; System.out.println("Ne Zha: Saya lahir, " + s); /** * accessor */ int getHeight() { kembalikan this.height; ;}
Hasil berjalan:
Copy kode kodenya sebagai berikut:
Ne Zha: Aku lahir, sial
150
Dua konstruktor didefinisikan di atas, keduanya bernama Manusia. Kedua konstruktor memiliki daftar parameter yang berbeda.
Saat menggunakan new untuk membuat objek, Java akan memutuskan konstruktor mana yang akan dibangun berdasarkan parameter yang disediakan. Misalnya, saat membangun neZha, kami menyediakan dua parameter: bilangan bulat 150 dan string "sialan", yang sesuai dengan daftar parameter metode pembangunan kedua, sehingga Java akan memanggil metode pembangunan kedua.
Di Java, Java menentukan metode yang akan dipanggil berdasarkan nama metode dan daftar parameter. Ini disebut metode kelebihan beban. Metode build bisa kelebihan beban, dan metode biasa juga bisa kelebihan beban, seperti metode breath() di bawah ini:
Tes kelas publik{ public static void main(String[] args) { Manusia aPerson = Manusia baru(); aPerson.breath(10); System.out.println("hu...hu..."); } /** * nafas() 2 */ kekosongan nafas(int rep) { int i; ) { System.out.println("lu...lu...");
Hasil berjalan:
Copy kode kodenya sebagai berikut:
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
Seperti yang Anda lihat, karena parameter disediakan selama panggilan: bilangan bulat 10, metode breath() kedua yang daftar parameternya cocok akan dipanggil.
Meringkaskan
karakteristik konstruktor: nama yang sama dengan kelas, tidak ada nilai kembalian
Tujuan konstruktor: inisialisasi, kelebihan metode operasi awal: nama metode + daftar parameter -> metode mana yang sebenarnya dipanggil