JavaRush /Blog Jawa /Random-JV /Pambuka kanggo kelas: nulis kelas dhewe, konstruktor

Pambuka kanggo kelas: nulis kelas dhewe, konstruktor

Diterbitake ing grup
Hello! Dina iki kita bakal ngomong babagan kelas ing basa Jawa. Kelas bisa diarani minangka inti saka pemrograman Java. Nalika sampeyan dadi programmer, tugas utama sampeyan yaiku nulis kelas sampeyan dhewe kanthi fungsi sing beda. Pambuka kanggo kelas: nulis kelas dhewe, konstruktor - 1Ayo ngerteni apa iki lan cara kerjane :) Kaya sing wis dingerteni, Java minangka basa pamrograman berorientasi obyek. Kabeh program kalebu obyek sing ana hubungane karo siji liyane. A kelas ateges cithakan kanggo obyek. Iku nemtokake carane obyek bakal katon lan apa fungsi bakal duwe. Saben obyek minangka obyek saka sawetara kelas . Ayo goleki conto sing paling gampang:
public class Cat {

    String name;
    int age;

}
Ayo dadi ngomong kita nulis program, lan ing program iki kita kudu kucing kanggo soko (contone, kita duwe Clinic Veterinary karo kemampuan kanggo nggawe janjian online). Kita nggawe kelas Catlan nemtokake rong variabel - string namelan nomer age. Variabel kelas kasebut diarani kolom . Ateges, iki minangka cithakan kanggo kabeh kucing sing bakal digawe ing mangsa ngarep. Saben kucing (obyek kelas Cat) bakal duwe rong variabel - jeneng lan 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);
    }

}
Mangkene cara kerjane! We nggawe kucing, menehi jeneng lan umur, lan output kabeh kanggo console. Ora ana sing rumit :) Kelas paling asring nggambarake obyek lan fenomena ing saindenging jagad. Kucing, meja, wong, kilat, kaca buku, roda - kabeh iki bakal digawe ing program sampeyan nggunakake kelas sing kapisah. Saiki ayo goleki variabel sing digawe ing kelas Cat. Iki diarani kolom, utawa variabel conto . Jeneng, nyatane, mbukak kabeh inti. Saben conto (obyek) kelas bakal duwe variabel kasebut Cat. Saben kucing sing digawe bakal duwe variabel dhewe namelan dhewe age. Iku logis, ing umum: karo kucing nyata kabeh padha :) Saliyane variabel conto, ana liyane - variabel kelas , utawa statis. Ayo ditambahake ing conto 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);
    }
}
Output konsol:

Мы создали кота по имени Барсик, его возраст - 3
Мы создали кота по имени Вася, его возраст - 5
Общее количество котов = 2
Saiki kita duwe variabel anyar ing kelas kita - count(jumlah). Dheweke tanggung jawab kanggo ngitung kucing sing digawe. Saben kita nggawe kucing ing cara utama, kita nambah variabel iki 1. Variabel iki ditetepake dening tembung kunci statis . Iki tegese iku belongs kanggo kelas , lan ora kanggo obyek tartamtu saka kelas. Sing, mesthi, logis: yen saben kucing kudu duwe jeneng dhewe, mula kita butuh siji counter kucing kanggo kabeh. Iki persis apa tembung statis ngidini sampeyan entuk - countvariabel sing padha kanggo kabeh kucing. Wigati dimangerteni: nalika kita nyithak menyang console, kita ora nulis barsik.countutawa vasia.count. Dheweke ora kalebu Barsik utawa Vasya - dheweke kalebu kabeh kelas Cat. Mulane, iku prasaja count. Sampeyan uga bisa nulis Cat.count- sing uga bener. nameIki ora bakal bisa digunakake kanthi ngasilake variabel menyang 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! nameSaben kucing duwe dhewe. Iki ngendi compiler bakal bingung. "Output jeneng menyang konsol? Jenenge sapa? :/"

Metode

Saliyane variabel, saben kelas duwe metode. Kita bakal pirembagan bab mau ing kuliah kapisah ing liyane rinci, nanging TCTerms umum cukup prasaja. Metode minangka fungsi kelas sampeyan; apa obyek saka kelas iki bisa nindakake. Sampeyan wis ngerti salah sawijining metode - iki yaiku main(). Nanging metode kasebut main, kaya sing sampeyan eling, statis - yaiku, kalebu kabeh kelas (logika padha karo variabel). Lan cara biasa, non-statis mung bisa diarani obyek tartamtu sing wis digawe. Contone, yen kita pengin nulis kelas kanggo kucing, kita kudu ngerti apa fungsi kucing kudu ing program kita. Adhedhasar iki, ayo nulis sawetara cara kanggo:
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, saiki kelas kita luwih kaya katrangan saka kucing nyata! Saiki kita ora mung duwe kucing jenenge Barsik kanthi jeneng lan umur. Dheweke uga bisa meow lan mlumpat! Apa jenis kucing ana tanpa "fungsi" kuwi :) Kita njupuk obyek tartamtu - barsik, lan nelpon sawijining cara sayMeow()lan jump(). Kita ndeleng konsol:

Мяу!
Прыг-скок!
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, sampeyan kudu nggunakake sing diarani abstraksi . Abstraksi minangka salah siji saka papat prinsip dhasar pemrograman berorientasi obyek. Iku kalebu nyorot utama, karakteristik paling pinunjul saka obyek , lan kosok balene - discarding secondary, gedhe-gedhe ora pati penting. Contone, kita nggawe file karyawan perusahaan. Kanggo nggawe obyek karyawan, kita nulis kelas Employee. Karakteristik apa sing penting kanggo nggambarake karyawan ing file perusahaan? Jeneng lengkap, tanggal lahir, nomer jaminan sosial, nomer identifikasi pajak. Nanging ora mungkin kita butuh dhuwur, mripat lan warna rambut ing kertu karyawan perusahaan. Perusahaan ora mbutuhake informasi iki. Mulane, kanggo kelas Employeekita bakal nyetel variabel String name, int age, int socialInsuranceNumberlan int taxNumber, lan kita bakal ninggalake informasi sing ora perlu kanggo kita (kayata werna mripat) lan abstrak adoh . Nanging yen kita nggawe file model foto kanggo agensi modeling, kahanan diganti dramatically. Kanggo njlèntrèhaké model fashion, dhuwur, werna mata lan werna rambut penting banget kanggo kita, nanging nomer TIN pancen ora penting kanggo kita. Mulane, ing kelas Modelkita kudu nggawe variabel int height, String hair, String eyes. Mangkono cara abstraksi, iku prasaja! :)

Konstruktor

Ayo bali menyang conto 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";

    }
}
Deleng kode iki lan coba tebak apa sing salah karo program kita. Kanggo rong jam ing program kita ana kucing tanpa jeneng utawa umur! Mesthi, iki pancen salah. Mesthine ora ana kucing ing database klinik veteriner tanpa informasi babagan kucing kasebut. Saiki kita pasrahake menyang programmer. Yen dheweke ora lali menehi jeneng lan umur, kabeh bakal ok. Yen dheweke lali, bakal ana kesalahan ing database, kucing sing ora dingerteni. Kepiye carane bisa ngatasi masalah iki? Sampeyan kudu piye wae nglarang nggawe kucing tanpa jeneng lan umur. Iki ngendi fungsi konstruktor teka kanggo bantuan kita . Iki contone:
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);
    }
}
A konstruktor ateges cithakan kanggo obyek kelas. Ing kasus iki, kita nemtokake manawa kanggo saben obyek catkudu ana rong argumen - senar lan nomer. Yen saiki kita nyoba nggawe kucing tanpa jeneng, kita ora bakal sukses.
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!
    }
}
Saiki kelas duwe konstruktor, compiler Jawa ngerti apa obyek kudu katon lan ora ngidini obyek digawe tanpa bantahan kasebut ing. Saiki ayo goleki tembung kunci thissing sampeyan deleng ing konstruktor. Kabeh uga prasaja karo dheweke. "iki" ing basa Inggris tegese "iki, iki". Tegese, tembung iki nuduhake obyek tartamtu. Kode ing konstruktor
public Cat(String name, int age) {
    this.name = name;
    this.age = age;
}
bisa dijarwakake meh kanthi harfiah: " jeneng kanggo kucing iki (sing kita nggawe) = argumen jeneng sing ditemtokake ing konstruktor. umur kanggo kucing iki (sing kita nggawe) = argumen umur sing ditemtokake ing konstruktor." Sawise konstruktor murub, sampeyan bisa mriksa manawa kucing wis diwenehi kabeh nilai sing dibutuhake:
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);
    }
}
Output konsol:

Барсик
5
Nalika konstruktor wis rampung:
Cat barsik = new Cat("Barsik", 5);
Ing ngisor iki kedadeyan ing njero:
this.name = "Barsik";
this.age = 5;
Lan obyek barsik(iku this) diwenehi nilai saka argumen konstruktor. Ing kasunyatan, yen sampeyan ora nemtokake konstruktor ing kelas, iku isih bakal murub konstruktor ! Nanging kepiye carane iki bisa ditindakake? O_O Kasunyatane, ing Jawa kabeh kelas duwe konstruktor standar . Ora ana bantahan, nanging murub saben obyek saka sembarang kelas digawe.
public class Cat {

    public static void main(String[] args) {

        Cat barsik = new Cat(); //this is where the default constructor worked
    }
}
Ing kawitan marketing iki ora katon. Ya, kita nggawe obyek lan nggawe, ing ngendi karya desainer? Kanggo ndeleng iki, ayo nulis konstruktor kosong kanggo kelas kanthi tangan Cat, lan ing njero kita bakal nyithak sawetara frasa menyang konsol. Yen ditampilake, banjur konstruktor wis makarya.
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
    }
}
Output konsol:

Создали кота!
Punika konfirmasi. Konstruktor standar mesthi ora katon ing kelas sampeyan. Nanging sampeyan kudu ngerti siji fitur liyane. Konstruktor standar ilang saka kelas nalika sampeyan nggawe sawetara konstruktor kanthi argumen. Buktine iki, nyatane, wis kita deleng ing ndhuwur. 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 barsik = new Cat(); //error!
    }
}
Kita ora bisa nggawe kucing tanpa jeneng lan umur amarga kita nemtokake konstruktor kanggo Cat: string + nomer. Konstruktor standar ilang saka kelas sanalika sawise iki. Mulane, elinga: yen sampeyan butuh sawetara konstruktor ing kelas sampeyan, kalebu sing kosong, sampeyan kudu nggawe kanthi kapisah . Contone, klinik Veterinary kita pengin nindakake tumindak apik lan mbantu kucing sing ora duwe omah, sing jenenge lan umure ora ngerti. Banjur kode kita kudu katon kaya iki:
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();
    }
}
Saiki kita wis nemtokake konstruktor standar kanthi jelas, kita bisa nggawe loro jinis kucing. Ing konstruktor, sampeyan bisa nemtokake nilai kanthi jelas, lan ora mung njupuk saka argumen. Contone, kita bisa ngrekam kabeh kucing jalanan ing basis data kanthi jeneng "Nomer 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);
    }
}
We duwe variabel countsing counter kucing werna. Saben-saben kita mbukak konstruktor standar, kita nambah 1 lan nemtokake nomer kasebut minangka jeneng kucing. Kanggo konstruktor, urutan argumen penting banget. Ayo ngganti argumen jeneng lan umur ing 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 kasebut kanthi jelas nggambarake: nalika nggawe obyek, Catkudu dilewati nomer lan senar, kanthi urutan kasebut . Mulane kode kita ora bisa. Pesthekake elinga iki lan elinga nalika nggawe 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 rong desainer sing beda banget! Saiki ngrampungake sawetara masalah kanggo nggabungake materi :)
  • Museum Purbakala.
Tugas sampeyan yaiku ngrancang kelas Artifact. Artefak sing disimpen ing museum ana telung jinis. Pisanan bab kang ora dingerteni kajaba nomer serial diutus dening museum (contone: 212121). Kapindho yaiku babagan nomer serial lan budaya sing digawe (contone: 212121, "Aztec"). Jinis kaping telu yaiku babagan nomer serial sing dikenal, budaya sing digawe, lan umur sing tepat kanggo nggawe (contone: 212121, "Aztecs", 12). Nggawe kelas Artifactsing njlèntrèhaké barang-barang antik sing disimpen ing museum, lan nulis jumlah konstruktor sing dibutuhake. Ing cara main(), nggawe siji artefak saben jinis.
public class Artifact {

    public static void main(String[] args) {
    }
}
  • Situs web rapat
Sampeyan nggawe database pangguna kanggo situs kencan. Nanging masalah iku sing wis lali ing urutan apa padha kudu kasebut, lan sampeyan ora duwe specifications technical ing tangan. Desain kelas Usersing bakal duwe kolom - jeneng ( String), umur ( short) lan dhuwur ( int). Nggawe jumlah konstruktor sing dibutuhake supaya jeneng, umur lan dhuwur bisa ditemtokake ing urutan apa wae.
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