CodeGym /Blog Jawa /Acak /Java instanceof Operator
John Squirrels
tingkat
San Francisco

Java instanceof Operator

Diterbitake ing grup
Hi! Dina iki kita bakal pirembagan bab operator instanceof , nimbang conto carane digunakake, lan tutul ing sawetara aspèk cara kerjane:) Sampeyan wis ketemu operator iki ing tingkat awal CodeGym. Apa sampeyan kelingan kenapa kita butuh? Yen ora, ora kuwatir. Eling-eling bareng. Operator instanceof dibutuhake kanggo mriksa apa obyek sing dirujuk dening variabel X digawe adhedhasar sawetara kelas Y. Sing muni prasaja. Yagene kita bali menyang topik iki? Kaping pisanan, amarga saiki sampeyan wis ngerti mekanisme warisan Jawa lan prinsip OOP liyane. Operator instanceof saiki bakal luwih jelas lan kita bakal ndeleng conto sing luwih maju babagan cara digunakake. Ayo budal!Cara kerja operator instance - 1Sampeyan bisa uga elinga yen operator instanceof ngasilake bener yen mriksa kasebut bener, utawa salah yen ekspresi kasebut salah. Mulane, biasane ana ing kabeh jinis ekspresi kondisional ( yen…else ). Ayo dadi miwiti karo sawetara conto prasaja:

public class Main {

   public static void main(String[] args) {

       Integer x = new Integer(22);

       System.out.println(x instanceof Integer);
   }
}
Apa sampeyan mikir bakal ditampilake ing console? Inggih, iku ketok kene.:) Obyek x punika Integer, supaya asil bakal bener . Output konsol: Bener Ayo coba priksa manawa iku String :

public class Main {

   public static void main(String[] args) {

       Integer x = new Integer(22);

       System.out.println(x instanceof String); // Error!
   }
}
Kita entuk kesalahan. Lan mbayar manungsa waé: compiler kui kesalahan sadurunge mbukak kode! Langsung weruh yen Integer lan String ora bisa diowahi kanthi otomatis lan ora ana hubungane liwat warisan. Akibate, obyek Integer ora digawe adhedhasar String . Iki trep lan mbantu supaya kesalahan runtime aneh, supaya compiler mbantu kita metu kene :) Saiki ayo nyoba kanggo nimbang conto sing luwih angel. Amarga wis kasebut warisan, ayo nggarap sistem kelas cilik ing ngisor iki:

public class Animal {

}

public class Cat extends Animal {

}

public class MaineCoon extends Cat {

}
Kita wis ngerti kepiye tumindake instanceof nalika mriksa manawa obyek minangka conto saka kelas, nanging apa sing kedadeyan yen kita nganggep hubungan wong tuwa-anak? Contone, apa sampeyan mikir ekspresi kasebut bakal ngasilake:

public class Main {

   public static void main(String[] args) {

       Cat cat = new Cat();

       System.out.println(cat instanceof Animal);

       System.out.println(cat instanceof MaineCoon);

   }
}
Output: True False Pitakonan utama sing kudu dijawab yaiku persis carane instanceof napsirake 'obyek sing digawe adhedhasar kelas'? ' cat instanceof Animal ' ngevaluasi bener , nanging mesthine kita bisa nemokake kesalahan karo tembung kasebut. Napa obyek Kucing digawe adhedhasar kelas Animal ? Apa ora digawe adhedhasar kelas dhewe? Jawaban iki cukup prasaja, lan sampeyan bisa uga wis mikir babagan iki. Elinga urutan sing diarani konstruktor lan variabel diwiwiti nalika nggawe obyek. Kita wis nutupi topik iki ing artikel babagan konstruktor kelas . Iki conto saka pelajaran kasebut:

public class Animal {

   String brain = "Initial value of brain in the Animal class";
   String heart = "Initial value of heart in the Animal class";

   public static int animalCount = 7700000;

   public Animal(String brain, String heart) {
       System.out.println("Animal base class constructor is running");
       System.out.println("Have the variables of the Animal class already been initialized?");
       System.out.println("Current value of static variable animalCount = " + animalCount);
       System.out.println("Current value of brain in the Animal class = " + this.brain);
       System.out.println("Current value of heart in the Animal class = " + this.heart);
       System.out.println("Have the variables of the Cat class already been initialized?");
       System.out.println("Current value of static variable catCount = " + Cat.catCount);

       this.brain = brain;
       this.heart = heart;
       System.out.println("Animal base class constructor is done!");
       System.out.println("Current value of brain = " + this.brain);
       System.out.println("Current value of heart = " + this.heart);
   }
}

public class Cat extends Animal {

   String tail = "Initial value of tail in the Cat class";

   static int catCount = 37;

   public Cat(String brain, String heart, String tail) {
       super(brain, heart);
       System.out.println("The Cat class constructor has started (The Animal constructor already finished)");
       System.out.println("Current value of static variable catCount = " + catCount);
       System.out.println("Current value of tail = " + this.tail);
       this.tail = tail;
       System.out.println("Current value of tail = " + this.tail);
   }

   public static void main(String[] args) {
       Cat cat = new Cat("Brain", "Heart", "Tail");
   }
}
Lan yen sampeyan mbukak ing IDE, output console bakal katon kaya iki: Konstruktor kelas basis kewan mlaku Wis variabel kelas Animal wis diinisialisasi? Nilai saiki variabel statis animalCount = 7700000 Nilai saiki otak ing kelas Animal = Nilai awal otak ing kelas Animal Nilai saiki jantung ing kelas Animal = Nilai awal jantung ing kelas Animal Nduwe variabel kelas Kucing wis wis diinisialisasi? Nilai saiki saka variabel statis catCount = 37 Konstruktor kelas dasar kewan wis rampung! Nilai saiki otak = Otak Nilai saiki jantung = Jantung Konstruktor kelas kucing wis diwiwiti (Konstruktor Animal wis rampung) Nilai saiki variabel statis catCount = 37 Nilai saiki buntut = Nilai awal buntut ing kelas Kucing Nilai saiki buntut = buntut Saiki sampeyan elinga?:) Konstruktor kelas dhasar, yen ana kelas dhasar, mesthi diarani pisanan nalika nggawe obyek. Operator instanceof dipandu dening prinsip iki nalika nyoba nemtokake manawa obyek A digawe adhedhasar kelas B. Yen konstruktor kelas dhasar diarani, mula ora ana keraguan. Kanthi mriksa kapindho, kabeh luwih gampang:

System.out.println(cat instanceof MaineCoon);
Konstruktor MaineCoon ora diarani nalika obyek Cat digawe, sing ndadekake. Sawise kabeh, MaineCoon minangka keturunan saka Kucing , dudu leluhur. Lan iku dudu cithakan kanggo Cat . Oke, aku rumangsa wis jelas. Nanging apa sing kedadeyan yen kita nindakake iki?:

public class Main {

   public static void main(String[] args) {

       Cat cat = new MaineCoon();

       System.out.println(cat instanceof Cat);
       System.out.println(cat instanceof MaineCoon);


   }
}
Hmm... saiki luwih angel. Ayo dirembug. Kita duwe variabel Cat sing diwenehi obyek MaineCoon . Ngomong-ngomong, kok malah bisa? Kita bisa nindakake iku, ta? Ya, kita bisa. Sawise kabeh, saben MaineCoon minangka kucing. Yen ora jelas, elinga conto jinis primitif widening:

public class Main {

   public static void main(String[] args) {

       long x = 1024;

   }
}
Nomer 1024 cendhak : gampang pas karo variabel sing dawa , amarga ana cukup bita kanggo nampung (elinga conto karo boneka?) . Objek turunan bisa tansah ditugasake menyang variabel leluhur. Saiki, elinga iki, lan ing pelajaran sabanjure kita bakal nganalisa cara kerjane. Dadi apa output conto kita?

Cat cat = new MaineCoon();
System.out.println(cat instanceof Cat);
System.out.println(cat instanceof MaineCoon);
Apa bakal instanceof mriksa? variabel Kucing utawa obyek MaineCoon kita ? Jawaban iki pitakonan iki bener prasaja. Sampeyan mung kudu maca definisi operator maneh: Operator instanceof dibutuhake kanggo mriksa apa obyek sing dirujuk dening variabel X digawe adhedhasar sawetara kelas Y. Operator instanceof nguji asal saka obyek, dudu jinis variabel. Mangkono, ing conto iki, program kita bakal ditampilake bener ing loro kasus: kita duwe obyek MaineCoon . Temenan, digawe adhedhasar kelas MaineCoon , nanging digawe adhedhasar Kucingkelas induk uga!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION