logo

Java egzempliorius

  1. java instanceof
  2. Operatoriaus egzemplioriaus pavyzdys
  3. Taikant operatorių instanceof su kintamuoju the have null reikšmė
  4. Sumažinimas naudojant instanceof operatorių
  5. Sumažinimas be operatoriaus egzemplioriaus

The java instanceof operatorius naudojamas patikrinti, ar objektas yra nurodyto tipo egzempliorius (klasė ar poklasis arba sąsaja).

„Java“ egzempliorius taip pat žinomas kaip tipas palyginimo operatorius nes jis lygina egzempliorių su tipu. Tai grąžina arba tiesa, arba klaidinga. Jei taikome operatorių instanceof su bet kokiu kintamuoju, kurio reikšmė nulinė, jis grąžina false.

Paprastas java instanceof pavyzdys

Pažiūrėkime paprastą egzemplioriaus operatoriaus pavyzdį, kai jis išbando dabartinę klasę.

 class Simple1{ public static void main(String args[]){ Simple1 s=new Simple1(); System.out.println(s instanceof Simple1);//true } } 
Išbandykite dabar
 Output:true 

Poklasio tipo objektas taip pat yra pagrindinės klasės tipas. Pavyzdžiui, jei šuo išplečia gyvūną, tada šuns objektas gali būti nurodytas pagal šunų arba gyvūnų klasę.

Kitas „Java instanceof“ operatoriaus pavyzdys

 class Animal{} class Dog1 extends Animal{//Dog inherits Animal public static void main(String args[]){ Dog1 d=new Dog1(); System.out.println(d instanceof Animal);//true } } 
Išbandykite dabar
 Output:true 

instanceof java su kintamuoju, kurio reikšmė yra nul

Jei taikome operatorių instanceof su kintamuoju, kurio reikšmė nulinė, jis grąžina false. Pažiūrėkime toliau pateiktą pavyzdį, kuriame taikome operatorių instanceof su kintamuoju, kurio reikšmė yra nul.

 class Dog2{ public static void main(String args[]){ Dog2 d=null; System.out.println(d instanceof Dog2);//false } } 
Išbandykite dabar
 Output:false 

Sumažinimas naudojant java instanceof operatorių

Kai poklasio tipas nurodo pagrindinės klasės objektą, jis vadinamas sumažinimu. Jei tai atliekame tiesiogiai, kompiliatorius pateikia kompiliavimo klaidą. Jei tai atliekate naudodami tipo siuntimą, „ClassCastException“ bus išmestas vykdymo metu. Bet jei naudosime operatorių instanceof, galimas sumažinimas.

 Dog d=new Animal();//Compilation error 

Jei atliekame sumažinimą pagal tipo siuntimą, „ClassCastException“ išleidžiama vykdymo metu.

 Dog d=(Dog)new Animal(); //Compiles successfully but ClassCastException is thrown at runtime 

Galimybė sumažinti su instanceof

Pažiūrėkime pavyzdį, kai sumažinimas galimas naudojant instanceof operatorių.

styginių formatu
 class Animal { } class Dog3 extends Animal { static void method(Animal a) { if(a instanceof Dog3){ Dog3 d=(Dog3)a;//downcasting System.out.println('ok downcasting performed'); } } public static void main (String [] args) { Animal a=new Dog3(); Dog3.method(a); } } 
Išbandykite dabar
 Output:ok downcasting performed 

Sumažinimas nenaudojant Java instanceof

Sumažinti taip pat galima nenaudojant operatoriaus instanceof, kaip parodyta šiame pavyzdyje:

 class Animal { } class Dog4 extends Animal { static void method(Animal a) { Dog4 d=(Dog4)a;//downcasting System.out.println('ok downcasting performed'); } public static void main (String [] args) { Animal a=new Dog4(); Dog4.method(a); } } 
Išbandykite dabar
 Output:ok downcasting performed 

Pažvelkime atidžiau į šį tikrąjį objektą, kuris yra nurodytas a, yra šunų klasės objektas. Taigi, jei mes jį sumažinsime, tai gerai. Bet kas bus, jei parašysime:

 Animal a=new Animal(); Dog.method(a); //Now ClassCastException but not in case of instanceof operator 

Suprasti tikrąjį instanceof naudojimą Java

Pažiūrėkime, kaip tikrasis raktinio žodžio instanceof naudojimas toliau pateiktame pavyzdyje.

 interface Printable{} class A implements Printable{ public void a(){System.out.println('a method');} } class B implements Printable{ public void b(){System.out.println('b method');} } class Call{ void invoke(Printable p){//upcasting if(p instanceof A){ A a=(A)p;//Downcasting a.a(); } if(p instanceof B){ B b=(B)p;//Downcasting b.b(); } } }//end of Call class class Test4{ public static void main(String args[]){ Printable p=new B(); Call c=new Call(); c.invoke(p); } } 
Išbandykite dabar
 Output: b method