Hogyan működik a multi-catch - 1

"Még néhány érdekes óra. Ó, mennyire szeretek tanítani!"

"Szeretném elmondani, hogyan működnek a többszörös fogási blokkok. Nagyon egyszerű: ha kivételek fordulnak elő a try blokkban, a végrehajtás az első fogási blokkra ugrik."

"Ha a catch blokk zárójelében jelzett típus megegyezik a dobott kivétel típusával, akkor a végrehajtás azon a blokkon belül indul el. Ellenkező esetben a következő fogási blokkra lépünk , ahol ugyanaz az ellenőrzés történik."

"Ha kifogyunk a fogási blokkokból, és a kivételt nem sikerült elkapni, akkor visszadobják, és a jelenlegi módszer abnormálisan leáll."

"Értem. A kivételtípussal egybeeső fogási blokk lesz végrehajtva."

"Igen, igaz. A valóságban azonban ez egy kicsit bonyolultabb. Az osztályok más osztályokat is örökölhetnek. Ha egy tehén osztály örököl egy állat osztályt, akkor a Cow objektumra nem csak egy Cow változó, hanem egy Állat változó is hivatkozhat. "

"És?"

"Mivel minden kivétel örökli az Exceptiont vagy a RuntimeExceptiont (amely az Exceptiont is örökli ), továbbra is elkaphatók a "catch ( e kivétel )" vagy a " catch (RuntimeException e) " használatával."

"És?"

"Két következtetést vonhatunk le. Először is, a "catch (e kivétel)" segítségével bármilyen kivételt elkaphat. Másodszor, a fogási blokkok sorrendje számít. "

"Íme néhány példa:"

"Azt ArithmeticException, ami azután történik, hogy 0-val osztunk, a második elkapási blokkba kerül."

Kód
try
{
    System.out.println("Before calling method1.");
    int a = 1 / 0;
    System.out.println("After calling method1. This will never be shown.");
}
catch (NullPointerException e)
{
    System.out.println("Null reference. Exception has been caught.");
}
catch (ArithmeticException e)
{
    System.out.println("Division by zero. Exception has been caught.");
}
catch (Exception e)
{
    System.out.println("Any other errors. Exception has been caught.");
}

"Az alábbi példában ArithmeticExceptionaz első fogási blokkban lesz elkapva, mert minden kivétel örökli a kivételt, azaz Exceptionminden kivételre kiterjed. "

Kód
try
{
    System.out.println("Before calling method1.");
    int a = 1/0;
    System.out.println("After calling method1. This will never be shown.");
}
catch (Exception e)
{
    System.out.println("Any other errors. Exception has been caught.");
}
catch (NullPointerException e)
{
    System.out.println("Null reference. Exception has been caught.");
}
catch (ArithmeticException e)
{
    System.out.println("Divided by zero. Exception has been caught.");
}

"Az alábbi példában ArithmeticExceptionnem lesz elkapva. A rendszer visszadobja a hívási metódust."

Kód
try
{
    System.out.println("Before calling method1.");
    int a = 1/0;
    System.out.println("After calling method1. This will never be shown.");
}
catch (NullPointerException e)
{
    System.out.println("Null reference. Exception has been caught.");
}

"Ez egy kicsit tisztázta a dolgokat. Ezek a kivételek nem a legkönnyebb téma."

"Csak annak tűnik. Valójában a Java egyik legegyszerűbb dolga."

– Nem tudom, hogy ennek örüljek vagy szomorú legyek…