CodeGym /Blog Jawa /Acak /Kelas Jawa: nulis kelas dhewe, konstruktor
John Squirrels
tingkat
San Francisco

Kelas Jawa: nulis kelas dhewe, konstruktor

Diterbitake ing grup
Hi! Dina iki kita bakal ngomong babagan kelas ing basa Jawa. Sampeyan bisa ngomong yen kelas minangka landasan pemrograman Java. Nalika sampeyan dadi programmer, meh kabeh proyek sampeyan bakal nulis kelas sampeyan dhewe sing duwe macem-macem fungsi. Ayo ndeleng apa tegese lan cara kerjane. :) Kaya sing sampeyan ngerti, Java minangka basa pemrograman berorientasi obyek. Kabeh program kalebu obyek sing ana hubungane karo siji utawa liyane. A kelas, ateges, cithakan kanggo obyek. Iki nemtokake apa obyek bakal katon lan apa fungsi bakal duwe. Saben obyek minangka obyek saka sawetara kelas. Coba conto sing prasaja iki:

public class Cat {

    String name;
    int age;

}
Ayo kita nulis program sing melu kucing kanggo sawetara alasan (contone, kita duwe klinik Veterinary sing nawakake akses menyang akun online). Kita wis nggawe kelas Cat , lan ngumumake rong variabel ing: String name lan int age . Variabel anggota kasebut diarani kolom. Ateges, iki minangka cithakan kanggo kabeh kucing sing bakal digawe ing mangsa ngarep. Saben obyek Cat bakal duwe rong variabel: jeneng lan umur.

public class Cat {

    String name;
    int age;

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

        System.out.println("We created a cat named " + smudge.name + ". His age is " + smudge.age);
    }

}
Mangkene cara kerjane! Kita nggawe kucing, menehi jeneng lan umur, lan nampilake kabeh ing console. Piece saka jajan. :) Paling asring, kelas nggambarake samubarang lan fenomena ing donya nyata. Kucing, meja, wong, kilat, kaca buku, roda—sampeyan bakal nggawe kabeh iki ing program nggunakake kelas individu. Saiki, ayo fokus ing variabel sing diumumake ing kelas Cat . Iki diarani lapangan, utawa variabel conto. Jenenge pancen ngomong kabeh. Saben conto (utawa obyek) kelas Cat bakal duwe variabel kasebut. Saben kucing sing digawe bakal duwe variabel jeneng lan umur dhewevariabel. Iki ndadekake pangertèn - iku pancene kaya kucing nyata. :) Saliyane variabel instance, ana uga variabel kelas (variabel statis). Ayo rampung conto kita:

public class Cat {

    String name;
    int age;

    static int count = 0;

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

        Cat fluffy = new Cat();
        fluffy.age = 5;
        fluffy.name = "Fluffy";
        count++;

        System.out.println("We created a cat named " + smudge.name + ". His age is " + smudge.age);
        System.out.println("We created a cat named " + fluffy.name + ". His age is " + fluffy.age);

        System.out.println("Total number of cats = " + count);
    }
}
Output konsol: Kita nggawe kucing sing jenenge Smudge. Umure 3 We nggawe kucing jenenge Fluffy. Umure 5 Jumlah kucing = 2 Saiki kelas kita duwe variabel anyar sing diarani count. Iku tanggung jawab kanggo ngetung kucing sing digawe. Saben-saben kita nggawe kucing ing utamacara, kita nambah variabel iki kanthi 1. Variabel iki diumumake nggunakake tembung kunci statis. Tegese iku kalebu kelas, dudu obyek tartamtu saka kelas kasebut. Sing, mesthi, ndadekake pangertèn: saben jeneng kucing belongs kanggo kucing tartamtu, nanging kita kudu siji counter kucing sing ditrapake kanggo kabeh. Iki persis apa sing ditindakake tembung kunci statis: nggawe variabel count dadi variabel siji kanggo kabeh kucing. Cathetan: nalika kita nampilake variabel, kita ora nggunakake smudge.count utawa fluffy.count. Iku ora kagungane salah siji Smudge utawa Fluffy; iku belongs kanggo kabeh kelas Cat . Mulane iku mung count. Sampeyan uga bisa nulis Cat.count. Sing uga bakal bener. Nalika nampilake variabel jeneng, kita ora bakal nindakake ing ngisor iki:

public class Cat {

    String name;
    int age;

    static int count = 0;

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

        System.out.println("We created a cat named " + name + ". His age is " + smudge.age);

        System.out.println("Total number of cats = " + count);
    }
}
Iki kesalahan! Saben kucing duwe jeneng dhewe. Compiler bakal bingung kene. "Output jeneng kanggo console? jeneng sapa?" :/"

Metode

Saliyane variabel, saben kelas duwe metode. Kita bakal ngomong babagan luwih rinci ing pawulangan sing kapisah, nanging prinsip umum cukup prasaja. Cara nemtokake fungsi kelas sampeyan, yaiku apa sing bisa ditindakake ing kelas sampeyan. Sampeyan wis menowo salah siji saka cara iki: cara utama () . Nanging, sampeyan bisa uga ngelingi, cara utama iku statis, tegese iku kalebu kabeh kelas (logika padha karo variabel). Nanging, cara standar, non-statis mung bisa diarani obyek tartamtu sing wis digawe. Contone, yen kita pengin nulis kelas kucing, kita kudu ngerti apa fungsi kucing ing program kita kudu. Ing premis kasebut, ayo nulis sawetara cara kanggo kucing kita:

public class Cat {

    String name;
    int age;

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

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

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

        smudge.sayMeow();
        smudge.jump();

    }
}
Priksa metu! Saiki kelas kita luwih cedhak karo kucing! Saiki kita ora mung duwe kucing kanthi jeneng ("Smudge") lan umur (3). Dheweke uga bisa ngomong meow lan mlumpat! Apa jenis kucing tanpa "fungsi" kasebut? :) We njupuk obyek tartamtu (smudge) lan nelpon cara sayMeow () lan mlumpat () . Ayo katon ing console: Meow! Pance! Kucing tenan! :)

Nggawe kelas dhewe. abstraksi

Ing mangsa ngarep, sampeyan kudu nulis kelas sampeyan dhewe. Apa sing kudu digatekake nalika nulis? Yen kita ngomong babagan variabel, mula sampeyan kudu nggunakake sing diarani abstraksi. Abstraksi minangka salah siji saka papat prinsip dhasar pemrograman berorientasi obyek. Iki tegese ngekstrak karakteristik sing paling penting lan penting saka sawijining barang, lan kosok balene, mbuwang sing cilik utawa ora pati penting. Contone, ayo nggawe lemari arsip kanggo karyawan perusahaan. Kanggo nggawe obyek karyawan, kita wis nulis Employeekelas. Karakteristik apa sing dadi deskriptor penting karyawan kanggo lemari arsip perusahaan? Jeneng, tanggal lahir, SSN, lan ID karyawan. Nanging ora mungkin kita butuh dhuwur karyawan, warna mata, utawa warna rambut kanggo cathetan karyawan perusahaan. Perusahaan ora mbutuhake informasi iki. Dadi, ing kelas Employee , kita ngumumake variabel ing ngisor iki: String name , int age , int socialSecurityNumber , lan int employeeId. Lan kita ninggalake informasi sing ora perlu (kayata warna mata). Ing tembung liyane, kita nggawe abstraksi. Nanging, yen kita nggawe lemari pengajuan kanggo agensi model, kahanan bakal owah banget. Dhuwur model, werna mripat, lan werna rambut minangka ciri penting, nanging SSN dheweke pancen ora relevan kanggo kita. Dadi, ing kelas Model , kita kudu nggawe variabel ing ngisor iki: String height , String hair , String eyes . Semono uga cara abstraksi - iku gampang! :)

Konstruktor

Ayo bali menyang conto kucing kita.

public class Cat {

    String name;
    int age;

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

        System.out.println("Here the program does something for 2 hours...");

        smudge.age = 3;
        smudge.name = "Smudge";

    }
}
Deleng kode iki lan coba goleki apa sing salah karo program kita. Program kita duwe kucing tanpa jeneng utawa umur sajrone 2 jam! Mesthi, iki pancen salah. Database klinik veteriner ora kudu kalebu kucing tanpa informasi. Saiki, kucing kita ana ing sih saka programmer. Kita pitados bilih piyambakipun ora bakal lali kanggo nemtokake jeneng lan umur, lan kabeh bakal oke. Yen dheweke lali, database bakal duwe masalah: kucing sing ora dijenengi. Kepiye carane bisa ngatasi masalah iki? Kita kudu piye wae nyegah kucing digawe tanpa jeneng lan umur. Iki ngendi konstruktor teka kanggo ngluwari. Ayo menehi conto:

public class Cat {

    String name;
    int age;

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

    public static void main(String[] args) {

        Cat smudge = new Cat("Smudge", 5);
    }
}
Ateges, konstruktor minangka cithakan kanggo obyek saka kelas. Ing kasus iki, kita nuduhake yen rong argumen, String lan int , kudu ditemtokake kanggo saben obyek kucing . Yen saiki nyoba nggawe kucing tanpa jeneng, ora bakal bisa.

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 smudge = new Cat(); // Error!
    }
}
Saiki kelas duwe konstruktor, compiler Jawa ngerti apa obyek kudu katon, lan ora ngidini obyek digawe tanpa nemtokake bantahan. Saiki, ayo neliti tembung kunci iki, sing sampeyan deleng ing konstruktor. Iku uga prasaja. Tembung kunci iki kanggo nuduhake obyek tartamtu. Kode ing konstruktor

public Cat(String name, int age) {
    this.name = name;
    this.age = age;
}
bisa diinterpretasikake meh verbatim: "Jeneng kucing iki (sing kita nggawe) = argumen liwati kanggo parameter jeneng konstruktor. Umur kucing iki (sing kita nggawe) = argumen liwati kanggo konstruktor kang. parameter umur." Sawise konstruktor mlaku, sampeyan bisa verifikasi manawa kabeh nilai sing dibutuhake wis ditugasake kanggo kucing kita:

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 smudge = new Cat("Smudge", 5);
        System.out.println(smudge.name);
        System.out.println(smudge.age);
    }
}
Output konsol: Smudge 5 Nalika konstruktor diarani:

Cat smudge = new Cat("Smudge", 5);
Iki kedadeyan ing njero:

this.name = "Smudge";
this.age = 5;
Lan nilai-nilai argumen sing diterusake menyang konstruktor ditugasake menyang obyek smudge (sing diarani ing kasus iki). Nyatane, sanajan sampeyan ora ngumumake konstruktor ing kelas, iku bakal tetep nelpon konstruktor! Nanging kepiye carane bisa? О_О Amarga, kabeh kelas Jawa duwe konstruktor standar sing disebut. Ora njupuk bantahan, nanging dijaluk saben sampeyan nggawe obyek saka kelas apa wae.

public class Cat {

    public static void main(String[] args) {

        Cat smudge = new Cat(); // The default constructor is invoked here
    }
}
Ing kawitan marketing, iki bisa uga ora ketok. Kita nggawe obyek, dadi apa? Ing endi konstruktor nindakake apa wae ing kene? Kanggo ndeleng, ayo nulis konstruktor kosong kanggo kelas Cat . Ing njero, kita bakal ngasilake sawetara frasa menyang konsol. Yen tembung kasebut ditampilake, mula konstruktor kasebut diarani.

public class Cat {

    public Cat() {
        System.out.println("A cat has been created!");
    }

    public static void main(String[] args) {

        Cat smudge = new Cat(); // The default constructor is invoked here
    }
}
Output konsol: Kucing wis digawe! Ana konfirmasi. Konstruktor standar mesthi ora katon ing kelas sampeyan. Nanging sampeyan kudu ngerti siji liyane babagan iki. Konstruktor standar diilangi saka kelas yen sampeyan nggawe konstruktor kanthi argumen. Nyatane, kita wis ndeleng bukti ing ndhuwur. Ana ing kode iki:

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 smudge = new Cat(); // Error!
    }
}
Kita ora bisa nggawe Kucing tanpa jeneng lan umur, amarga kita ngumumake konstruktor Cat kanthi parameter string lan int. Iki nyebabake konstruktor standar langsung ilang saka kelas. Dadi manawa kanggo elinga yen sampeyan butuh sawetara konstruktor ing kelas sampeyan, kalebu konstruktor tanpa argumentasi, sampeyan kudu ngumumake kanthi kapisah. Klinik kita pengin nindakake tumindak apik lan mbantu anak kucing sing ora duwe omah sing jenenge lan umure ora dingerteni. Banjur kode kita kudu katon kaya iki:

public class Cat {

    String name;
    int age;

    // For cats with owners
    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // For street cats
    public Cat() {
    }

    public static void main(String[] args) {
        
        Cat smudge = new Cat("Smudge", 5);
        Cat streetCat = new Cat();
    }
}
Saiki kita wis nemtokake konstruktor standar sing eksplisit, kita bisa nggawe loro jinis kucing. Ing konstruktor, sampeyan bisa nemtokake nilai langsung. Sampeyan ora kudu tansah njupuk saka bantahan. Contone, kita bisa menehi label kabeh kucing jalanan ing database nggunakake "Kucing Jalanan No. <count>" minangka cithakan. :

public class Cat {

    String name;
    int age;

    static int count = 0;

    public Cat() {
        count++;
        this.name = "Street cat No. " + 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);
    }
}
Kita duwe variabel count , sing ngitung kucing werna kita. Saben-saben konstruktor gawan wis kaleksanan, kita nambah count karo 1 lan masang nomer iki kanggo jeneng kucing. Urutan argumen penting banget kanggo konstruktor. Ayo ngganti argumen jeneng lan umur sing diterusake menyang konstruktor.

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 smudge = new Cat("Smudge", 10); // Error!
    }
}
Kita entuk kesalahan! Konstruktor kasebut kanthi jelas nyatakake yen obyek Cat digawe, kudu diwenehi nomer lan senar, ing urutan iki. Dadi, kode kita ora bisa digunakake. Pesthekake elinga lan ngormati aturan iki nalika ngumumake kelas sampeyan dhewe:

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

public Cat(int age, String name) {
    this.age = age;
    this.name = name;
}
Iki loro konstruktor babar blas beda! Saiki, ngrampungake tugas saperangan kanggo nguatake pemahaman babagan materi. :)
  1. Museum Purbakala.

    Tugas sampeyan yaiku ngrancang kelas Artefak .
    Ana telung jinis artefak sing disimpen ing museum.
    Kita ora ngerti apa-apa bab jinis pisanan kajaba nomer serial diutus museum (contone: 212121).
    Kanggo jinis kapindho, kita ngerti nomer serial lan budaya sing digawe (contone: 212121, "Aztecs").
    Kanggo jinis katelu, kita ngerti nomer serial, budaya sing digawe, lan abad kang digawe ing (contone: 212121, "Aztecs", 12).

    Nggawe kelas Artefak sing nggambarake barang-barang antik sing disimpen ing museum, lan tulisake konstruktor sing dibutuhake kanggo kelas kasebut. Banjur, ing cara utama () , nggawe siji artefak saben jinis.

    
    public class Artifact {
        
        // Write your code here
    
        public static void main(String[] args) {
            // Write your code here
        }
    }
    
  2. Situs web dating

    Ayo nggawe database pangguna kanggo situs web kencan.
    Nanging ing kene masalahe: sampeyan kelalen urutan argumen sing dibutuhake, lan ora ana dokumentasi teknis sing kasedhiya.
    Desain kelas Panganggo , sing bakal duwe kolom ing ngisor iki: jeneng ( String ), umur ( cendhak ), lan dhuwur ( int ).
    Gawe jumlah konstruktor sing cocog, supaya jeneng, umur, lan dhuwur bisa ditemtokake ing urutan apa wae.

    
    public class User {
    
        String name;
        short age;
        int height;
    
        // Write your code here
    
        public static void main(String[] args) {
            
        }
    }
    
Kanggo nguatake apa sing sampeyan sinau, disaranake sampeyan nonton video pelajaran saka Kursus Jawa
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION