Kivételek kezelése Java

⚡ Okos összefoglaló

Java A kivételkezelés strukturált mechanizmust biztosít a futásidejű hibák kezelésére, amelyek megzavarják a normál programfolyamatot. A try, catch, finally, throw és throws kulcsszavakat használja a kivételes körülmények észlelésére, izolálására és helyreállítására, miközben megtartja aping az alkalmazások robusztusak és kiszámíthatóak.

  • ⚠️ Kivétel definiálása: A kivétel egy futásidejű esemény, amely megszakítja a standard végrehajtási sorrendet, és amelyet a hibaállapotot leíró objektumként ábrázolunk.
  • 🧯 Próbáld ki a Catch Blockot: Kockázatos kódot csomagolj egy try blokkba, majd egy vagy több catch blokkal kövesd, hogy szabályosan rögzítsd az adott kivételtípusokat.
  • 🔁 Végül a viselkedés: A finally blokk mindig a try és catch blokkok után hajtódik végre, így ideális fájlok, socketek lezárására vagy más rendszererőforrások felszabadítására.
  • Kivételek hierarchiája: Minden kivétel a Throwable-ből öröklődik, amely Error és Exception kategóriákra ágazik, a RuntimeException pedig az ellenőrizetlen eseteket, például a nullával való osztást fedi le.
  • 🧪 Legjobb Gyakorlatok: Először a legspecifikusabb kivételt kapd el, kerüld az üres catch blokkokat, naplózz értelmes üzeneteket, és használj multicatch-et a kód tömörsége és karbantarthatósága érdekében.

Kivételek kezelése Java

Mi a kivétel a Java?

An Kivétel in Java egy olyan esemény, amely megszakítja a program utasításainak végrehajtását és megzavarja a program végrehajtásának normális menetét. Ez egy olyan objektum, amely becsomagolja a metóduson belül bekövetkezett hibaesemény információit, és átadja azokat a futásidejű rendszernek. A JavaA kivételeket főként különböző típusú hibák jelzésére használják, hogy a fejlesztők ellenőrzött módon reagálhassanak rájuk.

A hibáknak két nagy kategóriája van Java:

  1. Fordítási idő hibák
  2. Futásidejű hibák

A fordítási idejű hibák további két típusba sorolhatók:

  • Szintaxis hibák
  • Szemantikai hibák

Példa szintaktikai hibákra:

Ahelyett, hogy kijelentené int a; tévedésből így nyilatkoztad in a;, amelyre a fordító hibát dob.

Szemantikai hibákra példa: Deklaráltál egy változót int a; és néhány kódsor után ismét egy egész számot deklarál mint int a;. Mindezek a hibák kiemelésre kerülnek a kód összeállításakor.

Példa futásidejű hibákra

A futásidejű hibát úgy nevezik, mint egy kivétel. Bármely olyan esemény, amely megszakítja a program végrehajtásának normális menetét. A kivételekre példák az aritmetikai kivétel, a NullPointerException, a nullával osztás kivétel és sok más. Kivételek a Java olyan körülmények, amelyek gyakran kívül esnek a fejlesztő közvetlen ellenőrzésén.

Kattints itt ha a videó nem érhető el

Miért van szükségünk kivételkezelésre?

Tegyük fel, hogy kódoltál egy programot egy szerver eléréséhez. A fejlesztés alatt minden jól működik.ping a kódot egy helyi környezetben, ellenőrzött feltételek mellett.

Java kivétel kezelése

Egy tényleges éles futtatás során a szerver leállhat. Amikor a program megpróbálja elérni, kivétel keletkezik, és megfelelő kezelés nélkül a program hirtelen leáll.

Java kivétel kezelése

Hogyan kezeljünk egy kivételt a Java

Eddig láttuk, hogy a kivételek gyakran kívül esnek a fejlesztő irányításán. A kódhibákért a környezeti problémákat hibáztatni azonban nem jelent valódi megoldást. Robusztus programozásra van szükség, amely kezeli a kivételes helyzeteket. Az ilyen kódot egy Kivételkezelő.

A példánkban a jó kivételkezelés azt jelentené, hogy amikor az elsődleges szerver nem működik, a program automatikusan csatlakozik egy tartalék szerverhez.

Java kivétel kezelése

Ennek megvalósításához írhatsz kódot a szerverhez való csatlakozáshoz a hagyományos if és else feltételek használatával. Ellenőrizheted, hogy a szerver nem működik-e, és ha igen, akkor írsz kódot a tartalék szerverhez való csatlakozáshoz. A kód ilyen „if” és „else” ágakat használó szervezése nem hatékony, ha a kódod több… Java kivételek kezelni.

class connect{
	if(Server Up){
	 // code to connect to server
	}
	else{
	 // code to connect to BACKUP server
	}
}

Próbáld ki a Catch Blockot Java

Java beépített kivételkezelési mechanizmust biztosít, amely elválasztja a normál logikát a hibajavítási logikától.

  1. A normál kód a TRY Blokk.
  2. A kivételkezelő kód a FOGÁS Blokk.

Próbáld ki a Catch Block-ot

Példánkban a TRY blokk a szerverhez való csatlakozáshoz szükséges kódot tartalmazza. A CATCH blokk a tartalék szerverhez való csatlakozáshoz szükséges kódot tartalmazza. Ha a szerver elérhető, a CATCH blokkban lévő kód figyelmen kívül marad. Ha a szerver nem működik, kivétel keletkezik, és a catch blokkban lévő kód végrehajtódik.

Próbáld ki a Catch Block-ot

Tehát így kezeli a rendszer a kivételt Java.

A try és catch használatának szintaxisa

try{
    statement(s)
}
catch (exceptiontype name){
	statement(s)
}

Példa a Try Catch blokkra

Step 1) Másolja be a következő kódot egy szerkesztőbe.

class JavaException {
   public static void main(String args[]){
      int d = 0;
      int n = 20;
      int fraction = n/d;
     System.out.println("End Of Main");
   }
}

Step 2) Mentse el a fájlt és fordítsa le a kódot. Futtassa a programot a következő paranccsal: java JavaKivétel.

Step 3) Egy aritmetikai kivétel, a nullával osztás, az 5. sorban látható, a 6. sor pedig soha nem kerül végrehajtásra.

Step 4) Most vizsgáljuk meg, hogyan segít a try és a catch metódusok ennek a kivételnek a kezelésében. A kivételt okozó kódsort egy megpróbál blokk, majd a fogás tömb. Másolja be a következő kódot a szerkesztőbe.

class JavaException {
 public static void main(String args[]) {
  int d = 0;
  int n = 20;
  try {
   int fraction = n / d;
   System.out.println("This line will not be Executed");
  } catch (ArithmeticException e) {
   System.out.println("In the catch Block due to Exception = " + e);
  }
  System.out.println("End Of Main");
 }
}

Step 5) Mentsd el, fordítsd le és futtasd a kódot. A következő kimenetet kapod.

Próbáld ki a Catch Block-ot

Ahogy megfigyelheted, a kivétel kezelése megtörténik, és a kód utolsó sora is végrehajtásra kerül. Azt is vedd figyelembe, hogy a 7. sor nem fog végrehajtódni, mert amint kivételt emelnek, a vezérlés áramlása a fogóblokkhoz ugrik.

Jegyzet: Az „e” ArithmeticException objektum a bekövetkezett kivételről tartalmaz információkat, amelyek hasznosak lehetnek a helyreállítási műveletek végrehajtásakor.

Java Kivételosztály-hierarchia

Miután egy catch utasítás végrehajtódik, a többi kimarad, és a végrehajtás a try és catch blokk után folytatódik. A beágyazott catch blokkoknak a kivételhierarchiát kell követniük a legspecifikusabb alosztálytól a legáltalánosabb szülő osztályig.

Java Kivételi hierarchia

  • Minden kivételes osztály Java Bővítsd ki a Throwable osztályt. A Throwable osztálynak két alosztálya van, az Error és az Exception.
  • Az Error osztály azokat a kivételeket vagy problémákat definiálja, amelyek várhatóan nem fordulnak elő normál körülmények között a programban, például memóriahiba, hardverhiba vagy JVM hiba.
  • Az Exception osztály azokat a kivételeket jelöli, amelyeket a programunk kezelni tud, és a programunk a try és catch blokkok segítségével képes helyreállni ezekből a kivételekből.
  • A RuntimeException az Exception osztály egy alosztálya. Az ilyen típusú kivételek ellenőrizetlen kivételeket jelentenek, amelyek futásidőben fordulnak elő, és fordítási időben nem észlelhetők. Jó példák erre az osztás nullával kivétel és a null pointer kivétel.
  • Az IOException kivétel a bemeneti és kimeneti műveletek során keletkezik.
  • Megszakított kivétel a következőben: Java többszálú műveletek során keletkezik, amikor egy szál megszakad.

Példa: Try és catch blokkok egymásba ágyazása

Step 1) Másolja be a következő kódot egy szerkesztőbe.

class JavaException {
 public static void main(String args[]) {
  try {
   int d = 1;
   int n = 20;
   int fraction = n / d;
   int g[] = {
    1
   };
   g[20] = 100;
  }
  /*catch(Exception e){
  	System.out.println("In the catch block due to Exception = "+e);
  }*/
  catch (ArithmeticException e) {
   System.out.println("In the catch block due to Exception = " + e);
  } catch (ArrayIndexOutOfBoundsException e) {
   System.out.println("In the catch block due to Exception = " + e);
  }
  System.out.println("End Of Main");
 }
}

Step 2) Mentse el a fájlt és fordítsa le a kódot. Futtassa a programot a következő paranccsal: Jáva Javakivétel.

Step 3) Egy ArrayIndexOutOfBoundsException kivétel generálódik. Változtassa meg az int d értékét 0-ra. Mentse el, fordítsa le és futtassa a kódot.

Step 4) ArithmeticException kivételt kell generálni.

Step 5) Töröld ki a 10. sort a 12. sorra kommentből. Mentsd el, fordítsd le és futtasd a kódot.

6. lépés) Fordítási hiba? Ez azért van, mert az Exception az ArithmeticException alaposztálya. Az ArithmeticException által generált bármilyen kivételt az Exception osztály is képes kezelni. Tehát az ArithmeticException catch blokkja soha nem kap lehetőséget a végrehajtásra, ami redundánssá teszi. Ezért keletkezik a fordítási hiba.

Java Végül Blokkolás

A végső blokk az kivételtől függetlenül végrehajtják a try blokkban. Ez választható try blokkal együtt használható. A finally blokk a megfelelő hely az erőforrások, például adatbázis-kapcsolatok, fájlok vagy hálózati socketek felszabadítására.

 try {
  statement(s)
 } catch (ExceptiontType name) {

  statement(s)

 } finally {

  statement(s)

 }

Ha a try blokkban kivétel keletkezik, a finally blokk a catch blokk befejezése után kerül végrehajtásra.

Példa a Finally Blockra

Step 1) Másolja be a következő kódot egy szerkesztőbe.

class JavaException {
   public static void main(String args[]){
    try{
       int d = 0;
       int n =20;
       int fraction = n/d;
    }
  catch(ArithmeticException e){
    System.out.println("In the catch block due to Exception = "+e);
  }
  finally{
	System.out.println("Inside the finally block");
  }
}
}

Step 2) Mentse el, fordítsa le és futtassa a kódot.

Step 3) Várt kimenet: A finally blokk végrehajtásra kerül annak ellenére, hogy kivétel keletkezik.

Step 4) Változtasd meg a d változó értékét 1-re. Mentsd el, fordítsd le és futtasd a kódot, majd figyeld meg a kimenetet.

A legjobb gyakorlatok Java kivétel kezelése

Néhány bevált szabály betartása segít megőrizni a... Java kód rugalmas, olvasható és könnyen hibakereshető:

  • Először a legspecifikusabb kivételt fogd meg, majd az általánosabbakat, hogy megőrizd a kivételhierarchia integritását.
  • Kerüld az üres catch blokkokat. Legalább a kivételt naplózd, hogy a kiváltó ok soha ne vesszen el.
  • Használd a finally blokkot, vagy próbáld ki az erőforrásokkal fájlok, socketek és adatbázis-kapcsolatok felszabadításához.
  • Csak akkor dobjon ellenőrzött kivételeket, ha a hívó ésszerűen helyre tudja állítani a hibát, és programozási hibák esetén használjon ellenőrizetlen kivételeket.
  • Az alacsony szintű kivételeket egy értelmes üzleti kivételbe kell csomagolni az API-k biztonságának megőrzése érdekében.tractiszta.
  • Soha ne nyeld le csendben az InterruptedException-t többszálú kódban, ehelyett állítsd vissza a megszakításjelzőt.

GYIK

Az ellenőrzött kivételeket fordítási időben ellenőrzik, és deklarálni vagy elkapni kell őket, mint például az IOException. Az ellenőrizetlen kivételek kiterjesztik a RuntimeException kivételt, futásidőben fordulnak elő, és nem igényelnek kötelező kezelést, mint például a NullPointerException vagy az ArithmeticException.

A finally blokk mindig a try és catch blokkok után fut le, függetlenül attól, hogy történt-e kivétel vagy sem. Ez a legbiztonságosabb hely az erőforrások, például fájlkezelők, adatbázis-kapcsolatok vagy socketek felszabadítására, biztosítva a műveletek zökkenőmentes befejezését.

A throw kulcsszót egy metóduson belül használjuk egy kivételobjektum létrehozására, míg a throws kulcsszót egy metódus szignatúrájában annak deklarálására használjuk, hogy a metódus átadhat bizonyos ellenőrzött kivételeket a hívójának kezelésre.

Igen. Egy try blokkot egy finally blokk követhet catch blokk nélkül. Ezt a mintát akkor használják, ha a fejlesztő biztosítani akarja, hogy a cleanup kód végrehajtódjon, annak ellenére, hogy maga a kivétel továbbításra kerül a hívóhoz.

Igen. Mesterséges intelligencia által vezérelt megfigyelhetőségi eszközök elemzőcsomagja tracnaplókat és kódútvonalakat használnak a futásidejű kivételek valószínű előfordulási helyének előrejelzésére. Védekezési ellenőrzéseket javasolnak, javaslatot tesznek a fogási pontok elhelyezésére és a felszíni anomáliákra, segítve aping A csapatok még az éles rendszer elérése előtt megakadályozzák az összeomlásokat.

A mesterséges intelligencia asszisztensei elemzik a verem működését traces-t, összekapcsolják azokat a forráskóddal, és valószínűsíthető kiváltó okokat, valamint javításokat javasolnak. Próbálkozás-elkapási sablonokat generálnak, naplózási fejlesztéseket javasolnak, sőt, még a hibás metódusokat is átírják, drámaian csökkentve a fejlesztők által a diagnosztizálásra fordított időt. Java kivételek.

Foglald össze ezt a bejegyzést a következőképpen: