logo

Java instanceof

  1. java instanceof
  2. Operatora instances piemērs
  3. Lietojot operatoru instanceof ar mainīgo ir nulles vērtība
  4. Nolaišana ar instanceof operatoru
  5. Nolaišana bez operatora instances

The java instanceof operators tiek izmantots, lai pārbaudītu, vai objekts ir norādītā tipa (klases vai apakšklases vai interfeisa) gadījums.

Instancē Java ir pazīstama arī kā tips salīdzināšanas operators jo tas salīdzina gadījumu ar tipu. Tas atgriež vai nu patiesu, vai nepatiesu. Ja mēs izmantojam operatoru instanceof ar jebkuru mainīgo, kam ir nulles vērtība, tas atgriež false.

vilks pret lapsu

Vienkāršs java instanceof piemērs

Apskatīsim vienkāršu instances operatora piemēru, kur tas pārbauda pašreizējo klasi.

 class Simple1{ public static void main(String args[]){ Simple1 s=new Simple1(); System.out.println(s instanceof Simple1);//true } } 
Izmēģiniet to tagad
 Output:true 

Apakšklases tipa objekts ir arī vecāku klases tips. Piemēram, ja Suns paplašina Dzīvnieku, tad objekta Suns var atsaukties vai nu pēc Suns vai Animal klases.

Vēl viens java instanceof operatora piemērs

 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 } } 
Izmēģiniet to tagad
 Output:true 

instanceof Java ar mainīgo, kam ir nulles vērtība

Ja mēs izmantojam instanceof operatoru ar mainīgo, kam ir nulles vērtība, tas atgriež false. Apskatīsim tālāk sniegto piemēru, kur mēs izmantojam instanceof operatoru ar mainīgo, kam ir nulles vērtība.

 class Dog2{ public static void main(String args[]){ Dog2 d=null; System.out.println(d instanceof Dog2);//false } } 
Izmēģiniet to tagad
 Output:false 

Nolaišana ar java instanceof operatoru

Ja apakšklases tips attiecas uz vecāku klases objektu, to sauc par lejupslīdi. Ja mēs to veicam tieši, kompilators parāda kompilācijas kļūdu. Ja veicat to, izmantojot tipa apraidi, ClassCastException tiek izmests izpildlaikā. Bet, ja mēs izmantojam instanceof operatoru, lejupielāde ir iespējama.

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

Ja veicam lejupielādi, izmantojot tipa apraidi, ClassCastException tiek izmests izpildlaikā.

kā pārvērst str par int
 Dog d=(Dog)new Animal(); //Compiles successfully but ClassCastException is thrown at runtime 

Iespēja pazemināt ar instanceof

Apskatīsim piemēru, kur lejupslīde ir iespējama, izmantojot instanceof operatoru.

 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); } } 
Izmēģiniet to tagad
 Output:ok downcasting performed 

Samazināšana, neizmantojot Java instanceof

Samazināšanu var veikt arī, neizmantojot operatoru instanceof, kā parādīts šajā piemērā:

 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); } } 
Izmēģiniet to tagad
 Output:ok downcasting performed 

Apskatīsim tuvāk šo faktisko objektu, uz kuru attiecas a, ir suns klases objekts. Tātad, ja mēs to samazinām, tas ir labi. Bet kas notiks, ja mēs rakstīsim:

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

Izpratne par instanceof reālo izmantošanu Java

Tālāk sniegtajā piemērā aplūkosim atslēgvārda instanceof reālo izmantošanu.

 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); } } 
Izmēģiniet to tagad
 Output: b method