JavaRush /Blog Jawa /Random-JV /Instanceof operator ing Jawa

Instanceof operator ing Jawa

Diterbitake ing grup
Hello! Dina iki kita bakal ngomong babagan operator instanceof, deleng conto panggunaan lan tutul sawetara titik sing ana gandhengane karo operasi kasebut :) Ing tingkat awal JavaRush, sampeyan wis nemoni operator iki. Apa sampeyan kelingan kenapa perlu? Yen ora, ora masalah, ayo padha ngelingi. Operator instanceof dibutuhake kanggo mriksa apa obyek sing dirujuk dening variabel X digawe saka sawetara kelas Y. Swara prasaja. Yagene kita bali menyang topik iki? Kaping pisanan, amarga saiki sampeyan wis ngerti mekanisme warisan ing Jawa lan prinsip OOP liyane. Topik instanceof bakal luwih jelas lan kita bakal ndeleng kasus panggunaan sing luwih maju. Tindak! Kepiye cara kerja operator Instanceof - 1Sampeyan bisa uga ngelingi yen operator instanceof ngasilake bener yen tes kasebut bener, utawa salah yen asile salah. Akibate, paling kerep ditemokake ing macem-macem jinis kondisi test ( if…else). Ayo miwiti nganggo conto sing luwih gampang:
public class Main {

   public static void main(String[] args) {

       Integer x = new Integer(22);

       System.out.println(x instanceof Integer);
   }
}
Apa sampeyan mikir bakal output kanggo console? Inggih, punika ketok :) Obyek хiku Integer, supaya asil bakal bener . Output konsol: bener Ayo coba priksa manawa ana, contone, String:
public class Main {

   public static void main(String[] args) {

       Integer x = new Integer(22);

       System.out.println(x instanceof String);// error!
   }
}
Kita nampa kesalahan. Lan mbayar manungsa waé: compiler ditanggepi malah sadurunge kode kaleksanan! Dheweke langsung weruh yen Integer lan String ora bisa diowahi kanthi otomatis lan ora duwe hubungan warisan. Mulane, obyek kelas Integer ora bakal digawe saka String. Iki trep lan mbantu kanggo ngindhari kesalahan aneh sing wis ana sajrone eksekusi program, mula kompiler mbantu kita metu ing kene :) Saiki ayo nyoba ndeleng conto sing luwih rumit. Awit kita nyebutake warisan, ayo nggarap sistem kelas cilik iki:
public class Animal {

}

public class Cat extends Animal {

}

public class MaineCoon extends Cat {

}
Kita wis ngerti kepiye tumindake instanceof nalika mriksa apa obyek kalebu kelas ing kahanan normal, nanging apa sing kedadeyan yen kita nambah hubungan wong tuwa-anak ing kene? Kepiye cara kerja operator Instanceof - 2 Contone, apa sampeyan mikir yen mriksa ing ngisor iki 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 kepiye carane instanceof decipher konsep "obyek sing digawe adhedhasar kelas"? Akibaté, kita entuk Сat instanceof Animal == true, nanging siji bisa nemokake kesalahan karo formulasi kasebut. Napa obyek iki Catdigawe adhedhasar kelas Animal? Apa ora mung digawe adhedhasar kelas dhewe? Jawaban iki cukup prasaja, lan sampeyan bisa uga wis ngerti. Elinga urutan sing diarani konstruktor lan variabel diwiwiti nalika nggawe obyek. Kita wis nutupi topik iki ing artikel babagan konstruktor kelas . Mangkene conto saka ceramah kasebut:
public class Animal {

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

   public static int animalCount = 7700000;

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

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

class Cat extends Animal {

   String tail = "The initial value of tail in the Cat class";

   static int catsCount = 37;

   public Cat(String brain, String heart, String tail) {
       super(brain, heart);
       System.out.println("The constructor of the Cat class has started (the Animal constructor has already been executed)");
       System.out.println("The current value of the static variable catsCount = " + catsCount);
       System.out.println("Current value tail = " + this.tail);
       this.tail = tail;
       System.out.println("Current value 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 dasar Animal mlaku. Apa variabel kelas Animal wis initialized? Nilai saiki saka 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 Konstruktor saka kelas Animal dhasar wis rampung sawijining karya! Nilai saiki otak = Otak Nilai saiki jantung = Jantung Konstruktor kelas Cat wis mulai kerja (konstruktor Animal wis dieksekusi) Nilai saiki variabel statis catsCount = 37 Nilai saiki buntut = Nilai awal buntut ing Kelas kucing Nilai buntut saiki = Ekor Apa sampeyan kelingan saiki? :) Konstruktor kelas dhasar, yen ana, mesthi diarani pisanan nalika nggawe obyek. Instanceof ngetutake prinsip iki nalika nyoba nemtokake manawa obyek digawe Аsaka kelas Б. Yen konstruktor kelas dhasar diarani, mula ora ana keraguan. Kanthi mriksa kapindho, kabeh luwih gampang:
System.out.println(cat instanceof MaineCoon);
Konstruktor MaineCoonora diarani nalika nggawe Cat, sing logis. Sawise kabeh, MaineCoondheweke minangka turunan Cat, dudu leluhur. Nanging Catora cithakan kanggo. Ok, iki katon cetha. Apa sing bakal kelakon 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...iki luwih ruwet. Ayo dadi nyoba kanggo alesan. Kita duwe jinis variabel Cat, lan kita wis menehi jinis obyek kasebut MaineCoon. Ngomong-ngomong, kenapa iki bisa digunakake? Apa bisa nindakake iki? Saget. Sawise kabeh, sembarang Maine Coon iku kucing. Yen ora jelas, elinga conto nganggo ekstensi jinis primitif:
public class Main {

   public static void main(String[] args) {

       long x = 1024;

   }
}
Nomer 1024 cendhak : gampang pas karo variabel sing dawa , amarga jumlah bita cukup kanggo (elinga conto boneka nesting?). A obyek anak bisa tansah diutus kanggo variabel leluhur. Cukup elinga iki saiki, lan ing kuliah sabanjure kita bakal nganalisis proses iki luwih lanjut. Dadi apa conto kita bakal ngasilake?
Cat cat = new MaineCoon();
System.out.println(cat instanceof Cat);
System.out.println(cat instanceof MaineCoon);
Apa sing bakal dipriksa instanceof: variabel kelas kita Catutawa obyek kelas kita MaineCoon? Bener, jawaban kanggo pitakonan iki prasaja. Sampeyan mung kudu maca definisi operator kita maneh: Operator instanceof dibutuhake kanggo mriksa apa obyek sing dirujuk dening variabel digawe Xadhedhasar sawetara kelas Y. Operator instanceof mriksa asal saka obyek, dudu variabel. Mulane, ing contone, kaping pindho bakal ditampilake bener ing console : kita duwe obyek saka jinis MaineCoon. Alami, digawe adhedhasar kelas MaineCoon, nanging uga adhedhasar kelas induk Cat!
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION