logo

Java instanceof

  1. java instanceof
  2. Primer operatorja instanceof
  3. Uporaba operatorja instanceof s spremenljivko ima ničelno vrednost
  4. Znižanje z operatorjem instanceof
  5. Znižanje brez operatorja instanceof

The operator java instanceof se uporablja za preverjanje, ali je predmet primerek podanega tipa (razred ali podrazred ali vmesnik).

Primerek v Javi je znan tudi kot type primerjalni operater ker primerja primerek s tipom. Vrne ali true ali false. Če uporabimo operator instanceof s katero koli spremenljivko, ki ima ničelno vrednost, vrne false.

omejitve e-bančništva

Preprost primer java instanceof

Oglejmo si preprost primer operatorja primerka, kjer preizkuša trenutni razred.

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

Objekt tipa podrazreda je tudi tip nadrejenega razreda. Na primer, če Dog razširja žival, potem se na predmet psa lahko sklicuje razred psa ali živali.

Še en primer operatorja java instanceof

 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 } } 
Preizkusite zdaj
 Output:true 

instanceof v Javi s spremenljivko, ki ima ničelno vrednost

Če uporabimo operator instanceof s spremenljivko, ki ima ničelno vrednost, vrne false. Oglejmo si spodnji primer, kjer uporabimo operator instanceof s spremenljivko, ki ima ničelno vrednost.

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

Znižanje z operatorjem java instanceof

Kadar se tip podrazreda nanaša na objekt nadrejenega razreda, je to znano kot znižanje. Če to izvedemo neposredno, prevajalnik izda napako kompilacije. Če to izvedete s pretvorbo tipa, se ClassCastException vrže med izvajanjem. Če pa uporabimo operator instanceof, je možno znižanje.

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

Če izvedemo pretvorbo navzdol s pretvorbo tipa, se ClassCastException vrže med izvajanjem.

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

Možnost znižanja z instanceof

Oglejmo si primer, kjer je znižanje možno z operatorjem instanceof.

 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); } } 
Preizkusite zdaj
 Output:ok downcasting performed 

Znižanje brez uporabe java instanceof

Znižanje je mogoče izvesti tudi brez uporabe operatorja instanceof, kot je prikazano v naslednjem primeru:

 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); } } 
Preizkusite zdaj
 Output:ok downcasting performed 

Oglejmo si podrobneje ta, dejanski objekt, na katerega se sklicuje a, je objekt razreda Dog. Torej, če ga znižamo, je v redu. A kaj se bo zgodilo, če napišemo:

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

Razumevanje resnične uporabe instanceof v Javi

Oglejmo si dejansko uporabo ključne besede instanceof s spodnjim primerom.

 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); } } 
Preizkusite zdaj
 Output: b method