JavaRush /Java Blog /Random-ID /Pengantar kelas: menulis kelas Anda sendiri, konstruktor

Pengantar kelas: menulis kelas Anda sendiri, konstruktor

Dipublikasikan di grup Random-ID
Halo! Hari ini kita akan berbicara tentang kelas di Java. Kelas bisa dikatakan merupakan inti dari pemrograman Java. Ketika Anda menjadi seorang programmer, tugas utama Anda adalah menulis kelas Anda sendiri dengan fungsi berbeda. Pengantar kelas: menulis kelas Anda sendiri, konstruktor - 1Mari kita cari tahu apa itu dan bagaimana cara kerjanya :) Seperti yang sudah Anda ketahui, Java adalah bahasa pemrograman berorientasi objek. Semua program terdiri dari objek-objek yang entah bagaimana terhubung satu sama lain. Kelas pada dasarnya adalah templat untuk suatu objek. Ini menentukan bagaimana suatu objek akan terlihat dan fungsi apa yang dimilikinya. Setiap objek adalah objek dari beberapa kelas . Mari kita lihat contoh paling sederhana:
public class Cat {

    String name;
    int age;

}
Katakanlah kita sedang menulis sebuah program, dan dalam program ini kita membutuhkan kucing untuk sesuatu (misalnya, kita memiliki klinik hewan dengan kemampuan untuk membuat janji temu online). Kami membuat kelas Catdan menentukan dua variabel untuknya - string namedan angka age. Variabel kelas seperti ini disebut field . Intinya, ini adalah template untuk semua kucing yang akan kita buat di masa depan. Setiap kucing (objek kelas Cat) akan memiliki dua variabel - nama dan umur.
public class Cat {

    String name;
    int age;

    public static void main(String[] args) {
        Cat barsik = new Cat();
        barsik.age = 3;
        barsik.name = "Barsik";

        System.out.println("We created a cat named" + barsik.name + ", his age - " + barsik.age);
    }

}
Begitulah cara kerjanya! Kami membuat seekor kucing, memberinya nama dan umur, dan menampilkan semuanya ke konsol. Tidak ada yang rumit :) Kelas paling sering menggambarkan objek dan fenomena dunia sekitar. Kucing, meja, manusia, kilat, halaman buku, roda - semua ini akan dibuat dalam program Anda menggunakan kelas terpisah. Sekarang mari kita lihat variabel yang kita buat di kelas Cat. Ini disebut bidang, atau variabel instan . Faktanya, namanya mengungkapkan seluruh esensi mereka. Setiap instance (objek) dari kelas akan memiliki variabel-variabel ini Cat. Setiap kucing yang kita buat akan memiliki variabel namedan nya sendiri age. Secara umum logis: semuanya sama dengan kucing sungguhan :) Selain variabel instan, ada variabel lain - variabel kelas , atau variabel statis. Mari tambahkan ke contoh kita:
public class Cat {

    String name;
    int age;

    static int count = 0;

    public static void main(String[] args) {
        Cat barsik = new Cat();
        barsik.age = 3;
        barsik.name = "Barsik";
        count++;

        Cat vasia = new Cat();
        vasia.age = 5;
        vasia.name = "Vasya";
        count++;

        System.out.println("We created a cat named" + barsik.name + ", his age - " + barsik.age);
        System.out.println("We created a cat named" + vasia.name + ", his age - " + vasia.age);

        System.out.println("Total number of cats = " + count);
    }
}
Keluaran konsol:

Мы создали кота по имени Барсик, его возраст - 3
Мы создали кота по имени Вася, его возраст - 5
Общее количество котов = 2
Sekarang kita memiliki variabel baru di kelas kita - count(kuantitas). Dia bertanggung jawab menghitung kucing yang diciptakan. Setiap kali kita membuat kucing di metode utama, kita menambah variabel ini sebesar 1. Variabel ini ditandai dengan kata kunci static . Ini berarti bahwa itu milik kelas , dan bukan milik objek tertentu dari kelas tersebut. Tentu saja ini logis: jika setiap kucing memiliki namanya sendiri, maka kita memerlukan satu penghitung kucing untuk semuanya. Inilah tepatnya yang dapat dicapai oleh kata static - countvariabel yang sama untuk semua kucing. Harap diperhatikan: saat kami mencetaknya ke konsol, kami tidak menulis barsik.countatau vasia.count. Dia bukan anggota Barsik atau Vasya - dia milik seluruh kelas Cat. Oleh karena itu, sederhana saja count. Anda juga bisa menulis Cat.count- itu juga benar. nameIni tidak akan berfungsi dengan mengeluarkan variabel ke konsol :
public class Cat {

    String name;
    int age;

    static int count = 0;

    public static void main(String[] args) {
        Cat barsik = new Cat();
        barsik.age = 3;
        barsik.name = "Barsik";
        count++;

        System.out.println("We created a cat named" + name + ", his age - " + barsik.age);

        System.out.println("Total number of cats = " + count);
    }
}
Kesalahan! nameSetiap kucing memiliki miliknya sendiri. Di sinilah kompiler menjadi bingung. "Keluarkan nama ke konsol? Nama siapa? :/"

Metode

Selain variabel, setiap kelas memiliki metode. Kami akan membicarakannya secara lebih rinci dalam kuliah terpisah, tetapi poin umumnya cukup sederhana. Metode adalah fungsionalitas kelas Anda; apa yang bisa dilakukan oleh objek kelas ini. Anda sudah familiar dengan salah satu metodenya - ini adalah main(). Tetapi metodenya main, seperti yang Anda ingat, bersifat statis - yaitu milik seluruh kelas (logikanya sama dengan variabel). Dan metode biasa yang non-statis hanya dapat dipanggil pada objek tertentu yang telah kita buat. Misalnya, jika kita ingin menulis kelas untuk kucing, kita perlu memahami fungsi apa yang harus dimiliki kucing tersebut dalam program kita. Berdasarkan ini, mari tulis beberapa metode untuk itu:
public class Cat {

    String name;
    int age;

    public void sayMeow() {
        System.out.println("Meow!");
    }

    public void jump() {
        System.out.println("Jumping gallop!");
    }

    public static void main(String[] args) {
        Cat barsik = new Cat();
        barsik.age = 3;
        barsik.name = "Barsik";

        barsik.sayMeow();
        barsik.jump();

    }
}
Nah, sekarang kelas kita lebih mirip deskripsi kucing sungguhan! Sekarang kita tidak hanya memiliki kucing bernama Barsik dengan nama dan umurnya saja. Dia juga bisa mengeong dan melompat! Kucing macam apa yang ada tanpa "fungsi" seperti itu :) Kami mengambil objek tertentu - barsik, dan memanggil metodenya sayMeow()dan jump(). Kami melihat konsol:

Мяу!
Прыг-скок!
Seekor kucing sungguhan! :)

Membuat kelas Anda sendiri. Abstraksi

Di masa depan Anda harus menulis kelas Anda sendiri. Apa yang harus Anda perhatikan saat menulisnya? Jika kita berbicara tentang variabel, Anda perlu menggunakan sesuatu yang disebut abstraction . Abstraksi adalah salah satu dari empat prinsip dasar pemrograman berorientasi objek. Ini melibatkan penyorotan karakteristik utama dan paling signifikan dari suatu objek , dan sebaliknya - membuang karakteristik sekunder yang tidak penting. Misalnya kita membuat file karyawan perusahaan. Untuk membuat objek karyawan, kami menulis sebuah kelas Employee. Karakteristik apa yang penting untuk menggambarkan seorang karyawan dalam arsip perusahaan? Nama lengkap, tanggal lahir, nomor jaminan sosial, nomor identifikasi pajak. Namun kecil kemungkinannya kita memerlukan tinggi badan, mata, dan warna rambutnya di kartu karyawan perusahaan. Perusahaan tidak memerlukan informasi ini. Oleh karena itu, untuk kelas Employeekita akan mengatur variabel String name, int age, int socialInsuranceNumberdan int taxNumber, dan kita akan mengabaikan informasi yang tidak diperlukan bagi kita (seperti warna mata) dan mengabstraksikannya . Namun jika kita membuat file foto model untuk agen model, situasinya berubah drastis. Untuk menggambarkan seorang model fesyen, tinggi badan, warna mata dan warna rambut sangat penting bagi kami, namun nomor NPWP sama sekali tidak penting bagi kami. Oleh karena itu, di kelas Modelkita perlu membuat variabel int height, String hair, String eyes. Begitulah cara kerja abstraksi, sederhana saja! :)

Konstruktor

Mari kita kembali ke contoh kucing kita.
public class Cat {

    String name;
    int age;

    public static void main(String[] args) {
        Cat barsik = new Cat();

        System.out.println("Something has been happening in the program for 2 hours...");

        barsik.age = 3;
        barsik.name = "Barsik";

    }
}
Lihat kode ini dan coba tebak apa yang salah dengan program kita. Selama dua jam dalam program kami ada seekor kucing tanpa nama atau umur! Tentu saja ini sepenuhnya salah. Seharusnya tidak ada kucing di database klinik hewan tanpa informasi tentangnya. Sekarang kita serahkan pada programmernya. Jika dia tidak lupa menyebutkan nama dan umurnya, semuanya akan baik-baik saja. Kalau lupa nanti ada error di database kucing tak dikenal. Bagaimana kita bisa mengatasi masalah ini? Penting untuk melarang penciptaan kucing tanpa nama dan umur. Di sinilah fungsi konstruktor membantu kita . Berikut ini contohnya:
public class Cat {

    String name;
    int age;

    //constructor for class Cat
    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public static void main(String[] args) {

        Cat barsik = new Cat("Barsik", 5);
    }
}
Konstruktor pada dasarnya adalah templat untuk objek kelas. Dalam hal ini, kami menentukan bahwa untuk setiap objek, catdua argumen harus ditentukan - string dan angka. Jika sekarang kita mencoba membuat kucing tanpa nama, kita tidak akan berhasil.
public class Cat {

    String name;
    int age;

    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public static void main(String[] args) {

        Cat barsik = new Cat(); //error!
    }
}
Sekarang kelas memiliki konstruktor, kompiler Java mengetahui seperti apa tampilan objek dan tidak akan mengizinkan objek dibuat tanpa argumen yang ditentukan di dalamnya. Sekarang mari kita lihat kata kunci thisyang Anda lihat di dalam konstruktor. Semuanya juga sederhana dengannya. "ini" dalam bahasa Inggris berarti "ini, ini". Artinya, kata ini menunjukkan suatu objek tertentu. Kode di konstruktor
public Cat(String name, int age) {
    this.name = name;
    this.age = age;
}
dapat diterjemahkan hampir secara harfiah: " nama untuk kucing ini (yang kita buat) = argumen nama yang ditentukan dalam konstruktor. umur untuk kucing ini (yang kita buat) = argumen umur yang ditentukan dalam konstruktor." Setelah konstruktor diaktifkan, Anda dapat memeriksa apakah kucing kita telah diberi semua nilai yang diperlukan:
public class Cat {

    String name;
    int age;

    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public static void main(String[] args) {

        Cat barsik = new Cat("Barsik", 5);
        System.out.println(barsik.name);
        System.out.println(barsik.age);
    }
}
Keluaran konsol:

Барсик
5
Ketika konstruktor telah selesai:
Cat barsik = new Cat("Barsik", 5);
Hal berikut sebenarnya terjadi di dalam:
this.name = "Barsik";
this.age = 5;
Dan objeknya barsik(itu this) diberi nilai dari argumen konstruktor. Faktanya, jika Anda tidak menentukan konstruktor di kelas, konstruktor tersebut akan tetap diaktifkan ! Tapi bagaimana ini mungkin? O_O Faktanya adalah bahwa di Java semua kelas memiliki apa yang disebut konstruktor default . Ia tidak memiliki argumen apa pun, tetapi ia aktif setiap kali objek apa pun dari kelas mana pun dibuat.
public class Cat {

    public static void main(String[] args) {

        Cat barsik = new Cat(); //this is where the default constructor worked
    }
}
Sekilas hal ini tidak terlihat. Nah, kita sudah membuat sebuah objek dan menciptakannya, dimanakah karya desainernya? Untuk melihatnya, mari kita tulis konstruktor kosong untuk kelas tersebut dengan tangan Cat, dan di dalamnya kita akan mencetak beberapa frase ke konsol. Jika ditampilkan, maka konstruktor telah berfungsi.
public class Cat {

    public Cat() {
        System.out.println("Created a cat!");
    }

    public static void main(String[] args) {

        Cat barsik = new Cat(); //this is where the default constructor worked
    }
}
Keluaran konsol:

Создали кота!
Berikut konfirmasinya. Konstruktor default selalu ada di kelas Anda tanpa terlihat. Namun Anda perlu mengetahui satu fitur lagi. Konstruktor default menghilang dari kelas saat Anda membuat beberapa konstruktor dengan argumen. Buktinya sebenarnya sudah kita lihat di atas. Di sini, di kode ini:
public class Cat {

    String name;
    int age;

    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public static void main(String[] args) {

        Cat barsik = new Cat(); //error!
    }
}
Kami tidak dapat membuat kucing tanpa nama dan umur karena kami mendefinisikan konstruktor untuk Cat: string + nomor. Konstruktor default menghilang dari kelas segera setelah ini. Oleh karena itu, pastikan untuk mengingat: jika Anda memerlukan beberapa konstruktor di kelas Anda, termasuk yang kosong, Anda perlu membuatnya secara terpisah . Misalnya, klinik hewan kita ingin berbuat baik dan membantu kucing liar yang nama dan umurnya tidak kita ketahui. Maka kode kita akan terlihat seperti ini:
public class Cat {

    String name;
    int age;

    //for domestic cats
    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //for street cats
    public Cat() {
    }

    public static void main(String[] args) {

        Cat barsik = new Cat("Barsik", 5);
        Cat streetCat = new Cat();
    }
}
Sekarang kita telah secara eksplisit menentukan konstruktor default, kita dapat membuat kedua jenis kucing tersebut. Di konstruktor, Anda dapat menetapkan nilai secara eksplisit, dan tidak hanya mengambilnya dari argumen. Misalnya, kita dapat mencatat semua kucing jalanan dalam database dengan nama "Nomor kucing jalanan...":
public class Cat {

    String name;
    int age;

    static int count = 0;

    public Cat() {
        count++;
        this.name = "Street cat number" + count;
    }

    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public static void main(String[] args) {

        Cat streetCat1 = new Cat();
        Cat streetCat2 = new Cat();
        System.out.println(streetCat1.name);
        System.out.println(streetCat2.name);
    }
}
Kami memiliki variabel countyang merupakan penghitung kucing jalanan. Setiap kali kita menjalankan konstruktor default, kita menambahnya sebesar 1 dan menetapkan nomor tersebut sebagai nama kucing. Bagi seorang konstruktor, urutan argumen sangatlah penting. Mari kita tukar argumen name dan age di konstruktor kita.
public class Cat {

    String name;
    int age;

    public Cat(int age, String name) {
        this.name = name;
        this.age = age;
    }

    public static void main(String[] args) {

        Cat barsik = new Cat("Barsik", 10); //error!
    }
}
Kesalahan! Konstruktor dengan jelas menjelaskan: saat membuat objek, Catobjek harus diberi nomor dan string, dalam urutan itu . Itu sebabnya kode kami tidak berfungsi. Pastikan untuk mengingat hal ini dan ingatlah ini saat membuat kelas Anda sendiri:
public Cat(String name, int age) {
    this.name = name;
    this.age = age;
}

public Cat(int age, String name) {
    this.age = age;
    this.name = name;
}
Ini adalah dua desainer yang sangat berbeda! Sekarang selesaikan beberapa masalah untuk mengkonsolidasikan materi :)
  • Museum Barang Antik.
Tugas Anda adalah merancang kelas Artifact. Artefak yang disimpan di museum ada tiga jenis. Yang pertama tidak diketahui apa pun kecuali nomor seri yang diberikan oleh museum (misalnya: 212121). Yang kedua adalah tentang nomor seri dan budaya pembuatannya yang diketahui (misalnya: 212121, “Aztec”). Jenis ketiga adalah nomor seri yang diketahui, budaya penciptaannya, dan usia pasti penciptaannya (misalnya: 212121, “Aztec”, 12). Buat kelas Artifactyang mendeskripsikan barang antik yang disimpan di museum, dan tuliskan jumlah konstruktor yang diperlukan untuk kelas tersebut. Dalam metode ini main(), buat satu artefak untuk setiap jenis.
public class Artifact {

    public static void main(String[] args) {
    }
}
  • Situs web pertemuan
Anda sedang membuat database pengguna untuk situs kencan. Namun masalahnya adalah Anda lupa urutan spesifikasinya, dan Anda tidak memiliki spesifikasi teknisnya. Rancang sebuah kelas Useryang akan memiliki bidang - nama ( String), umur ( short) dan tinggi badan ( int). Buat jumlah konstruktor yang diperlukan sehingga nama, usia, dan tinggi badan dapat ditentukan dalam urutan apa pun.
public class User {

    String name;
    short age;
    int height;

    public static void main(String[] args) {

    }
}
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION