# Kā darbojas Java instanceof operators

Jūs varat izmantot Java operatoru `instanceof`, lai pārbaudītu, vai objekts pieder pie konkrētas klases. Operators sniedz atbildi Boole’a izteikuma veidā, t.i., “true” vai “false”. Iepazīstoties ar objektu un klasi iepriekš, varat izvairīties no kļūdu ziņojumiem vēlāk.

## Kas ir `instanceof` Java valodā?

Dažu mainīgo lielumu būtība Java valodā ne vienmēr ir uzreiz skaidra. Lielos Java projektos ar daudzām mainīgajām, piemēram, ievades dati var izraisīt to, ka mainīgā parādās kā atšķirīgi objekti. Tāpēc programmēšanas valoda nodrošina lietotājiem `instanceof`. Šis Java operators nodrošina, ka atsauces mainīgā **instances** patiešām atbilst klasei, apakšklasei vai saskarnes. Ja ir atbilstība, operators izvada Boole’a vērtību “true”. Ja nav atbilstības, izvade ir “false”.

Pārveidojot nezināmu objektu, ir svarīgi izmantot Java `instanceof`, lai nodrošinātu, ka objekts pieder pie pieņemtās klases. Ja izlaidat šo drošības pārbaudi, var tikt izsniegts **ClassCastException**. Tas notiek, ja objekts ir jāpārveido citā klasē. Kļūdas ziņojums var būt neskaidrs un radīt problēmas, ja kods ir īpaši garš. Tāpēc vislabāk ir jau sākumā izmantot Java `instanceof` kā drošības pasākumu.

## Kāda ir sintakse skaitlim `instanceof`?

Kad izmantojat `instanceof` Java, operators **salīdzina atsauces mainīgo ar konkrētu klasi**, ko arī norāda lietotājs. Tas neietver papildu informāciju par objekta vai klases būtību. Tas vienkārši nosaka, vai ir atbilstība vai nav. Sintakse ir vienkārša un izskatās šādi:

```java
(object) instanceof (class)
```

Ja `(object)` ir `(class)` instances, tiek parādīts “true”. Ja tas tā nav, tiek parādīts “false”.

## `instanceof` operatoru piemēri Java valodā

Vispirms parādīsim īsu piemēru, lai demonstrētu, kā `instanceof` darbojas Java. Šeit izveidosim klasi ar nosaukumu „Animal”.

```java
public class Animal {
}
```

Nākamais solis ir paplašināt šo klasi ar apakšklasi ar nosaukumu „Cat”.

```java
public class Cat extends Animal {
}
```

Tagad mēs varam izmantot Java `instanceof`, lai pārbaudītu, vai Cat instances pieder Animal klasei. Lai to izdarītu, mēs izmantosim vēl dažas rindas koda un izvadīsim rezultātu ar Java komandu `System.out.println`:

```java
public class Animal {}
public class Cat extends Animal {
public static void main(String args []{
Cat cat = new Cat();
System.out.println(cat instanceof Animal);
}
}
```

Rezultāts izskatās šādi:

```java
true
```

### Vairāki līmeņi un objekta klase

Šis princips darbojas arī ar Main klasi un citām apakšklasēm. Nākamajā piemērā ir vairāki līmeņi, un mēs esam paplašinājuši Java operatoru `instanceof` ar `if-else`. Jūs varat pamanīt papildu tekstu, kas atrodas aiz diviem slīpsvītrām (//). Tie ir [Java komentāri](https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/java-komentari/). Tie izskaidro atsevišķus soļus, bet neietekmē izvadi.

```java
// Class 1
// Superclass
public class Animal {
}
// Class 2
// Subclass
class Cat extends Animal {
}
// Class 3
// Main class
class Main {
public static void main(String[] args)
Cat cat1 = new Cat();
if (cat1 instanceof Cat)
	System.out.println ("cat1 is an instance of Cat");
else
	System.out.println ("cat1 is NOT an instance of Cat");
if (cat1 instanceof Animal)
	System.out.println ("cat1 is an instance of Animal");
else
	System.out.println ("cat1 is NOT an instance of Animal");
if (cat1 instanceof Object)
	System.out.println ("cat1 is an instance of Object");
else
	System.out.println ("cat1 is NOT an instance of Object");
	}
}
```

Paskatoties uz mūsu piemēru, varam redzēt, ka cat1 ir Cat klases un Animal superklases instances. Tādējādi atbilde uz abiem jautājumiem ir „true”. Tā kā Object vai klase `java.lang.Object` atrodas hierarhijas augšgalā, cat1 ir arī Object instances. Tātad Java `instanceof` operators vienmēr izvadīs true, ja to izmanto kopā ar Object klasi. Izvade izskatās šādi:

```java
cat1 is an instance of Cat
cat1 is an instance of Animal
cat1 is an instance of Object
```

### Izvade ar nulles vērtību

Ja mainīgajam ir null vērtība (t.i., tas nesatur objektu), Java operators `instanceof` automātiski izvada ‘false’. Apskatīsim, kā tas darbojas, izmantojot šādu piemēru:

```java
class Cat {
}
class Main {
public static void main(String[] args)
{
Cat cat2 = null;
if (cat2 instanceof Cat)
	System.out.println ("cat2 is an instance of Cat");
else
	System.out.println ("cat2 is NOT an instance of Cat");
	}
}
```

Šajā gadījumā izvade ir:

```java
cat2 is NOT an instance of Cat
```

### Superklase/apakšklase

Lai gan apakšklases objekti pieder arī apakšklases atbilstošajām virsklasēm, otrādi tas nedarbojas. Šo klases hierarhijas aspektu palīdz ilustrēt šāds piemērs:

```java
class Animal {
}
class Cat extends Animal {
}
class Main {
public static void main(String[] args)
{
Animal bello = new Animal ();
if (bello instanceof Cat)
	System.out.println ("Bello is an instance of Cat");
else
	System.out.println ("Bello is NOT an instance of Cat");
	}
}
```

Šajā gadījumā izvade ir:

```java
Bello is NOT an instance of Cat
```

### Kļūdas ziņojums par nesaderīgiem tipiem

Ja starp objektu un klasi nav saiknes, tiks parādīts kļūdas ziņojums. Lai to ilustrētu, izveidosim jaunu klasi ar nosaukumu “Dog”, kas pieder pie Animal superklases, bet nav saistīta ar Cat.

```java
class Dog extends Animal {
}
class Main {
public static void main(String[] args)
{
Cat cat3 = new Cat ();
System.out.println (cat3 instanceof Dog);
	}
}
```

Šajā situācijā mēs saņemsim kļūdas ziņojumu, kas mums paziņos, ka starp Cat un Dog klasēm nav saiknes. Ziņojums izskatās šādi:

```java
java.lang.Error: Unresolved compilation problem:
Incompatible conditional operand types Cat and Dog
```

Tip Mūsu digitālajā ceļvedī atradīsiet vairāk aizraujošu apmācību materiālu un informatīvu rakstu par Java. Tur varat atrast [Java un JavaScript](https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/java-pret-javascript/) salīdzinājumu, kā arī [Java un Python](https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/python-pret-java/) salīdzinājumu. Tur varat arī uzzināt vairāk par [Java bitu operatoriem](https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/java-bitu-operatori/).


This is a markdown version of: [https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/java-instanceof-operators/](https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/java-instanceof-operators/) for AI/LLM consumption.