Er zijn veel verschillende concepten om te leren bij het leren van een programmeertaal. Veel van deze concepten zijn als grammatica in gesproken talen - ze houden het gestructureerd en functioneren naar behoren. Afhandeling van uitzonderingen in Java is een belangrijke vaardigheid om een ​​goede Java-programmeur te worden.

Uitzonderingen worden gegenereerd wanneer het programma een fout is tegengekomen. Zodra de uitzondering is gegenereerd, is het aan de programmeur om te beslissen wat er vervolgens gebeurt. De meest voorkomende en de slechtste afhandeling van een uitzondering negeert het stilzwijgend. Het afdrukken van stapelsporen naar de console moet op zijn minst worden gedaan, zodat het lokaliseren van een fout eenvoudiger is.

Gecontroleerd versus niet-gecontroleerde uitzonderingen

Gecontroleerde uitzonderingen zijn klassen waarvan is afgeleid Uitzondering klasse en worden gegenereerd wanneer het programma de uitzondering kan herstellen en ze moeten worden betrapt met behulp van een van de proberen blokken of rethrown. Niet-gecontroleerde uitzonderingen zijn klassen waarvan is afgeleid RuntimeException en worden gegooid wanneer het programma niet van de uitzondering kan herstellen en ze niet hoeven te worden betrapt of opnieuw worden gegooid. Over het algemeen zijn niet-gecontroleerde uitzonderingen het gevolg van een programmeerfout en kunnen worden voorkomen (bijvoorbeeld controleren of een variabele nul is om te voorkomen dat NullPointerException).

Omdat ongecontroleerde uitzonderingen schonere code produceren, geven programmeurs er de voorkeur aan boven gecontroleerde uitzonderingen en tegenwoordig komt het in feite neer op een persoonlijke keuze. Uitzonderingen in de Java API houden echter rekening met het verschil.


Uitzonderingsvoorbeelden:
gecontroleerd ongehinderd
IOException NullPointerException
ClassNotFoundException IllegalArgumentException
InterruptedException IllegalStateException

Methode één van de twee:
Try-Catch gebruiken - Eindelijk

  1. 1 Maak een klasse en de belangrijkste methode. Maak een klasse en noem deze zoals je wilt en maak in de klas de hoofdmethode.
     openbaar klasse HandleExceptionExample  openbaar statisch leegte hoofd(Draad[] args)    
  2. 2 Verklaar drie primitieve integer-variabelen en voer een deling uit. Verklaar drie int (primitief geheel getal) variabelen en noem ze dividend, deler en quotiënt. Wijs een willekeurig nummer toe aan dividend variabele, wijs nul toe aan deler variabele en toekennen quotiënt van dividend en deler naar quotiënt variabel. Afdrukken quotiënt variabel voor de console.
     openbaar klasse HandleExceptionExample  openbaar statisch leegte hoofd(Draad[] args)  int dividend = 50; int deler = 0; int quotiënt = dividend / deler; Systeem.uit.println(quotiënt);   
  3. 3 Compileer en voer het programma uit. Programma drukt exception stack trace naar de console af en beëindigt de uitvoering op de regel waar de quotiënt variabele krijgt een waarde toegewezen. Quotiënt variabele zal nooit worden afgedrukt naar de console omdat niet-afgevangen uitzonderingen, op de regel waarop ze werden gegooid, uit de methode breken.
     Uitzondering in draad "hoofd" Java.LANG.ArithmeticException: / met nul bij HandleExceptionExample.hoofd(HandleExceptionExample.Java:5) in de zon.reflecteren.NativeMethodAccessorImpl.invoke0(inheems Methode) in de zon.reflecteren.NativeMethodAccessorImpl.beroep doen op(NativeMethodAccessorImpl.Java:62) in de zon.reflecteren.DelegatingMethodAccessorImpl.beroep doen op(DelegatingMethodAccessorImpl.Java:43) in java.LANG.reflecteren.Methode.beroep doen op(Methode.Java:498) bij com.IntelliJ.rt.executie.toepassing.AppMain.hoofd(AppMain.Java:147) 
  4. 4 Vang en hanteer uitzondering. Wijs een getal nul toe aan de quotiënt variabele en maak een try-catch-blok met ArithmeticException in de vangst uitspraak. Binnen in de proberen blokkeren, delen dividend en deler variabelen en wijs hun quotiënt toe aan de quotiënt variabel. Binnen in de vangst blokkeer, druk de exception stack trace naar de console af. Na het try-catch-blok, druk de quotiënt variabel voor de console.
     openbaar klasse HandleExceptionExample  openbaar statisch leegte hoofd(Draad[] args)  int dividend = 50; int deler = 0; int quotiënt = 0; proberen  quotiënt = dividend / deler;  vangst (ArithmeticException e)  e.printStackTrace();  Systeem.uit.println(quotiënt);   
  5. 5 Compileer en voer het programma uit. Programma drukt exception stack trace naar de console af, maar beëindigt de uitvoering niet op de regel waar de quotiënt variabele krijgt een waarde toegewezen. Quotiënt variabele wordt ook afgedrukt naar de console, maar vóór de uitzondering.
     0 Java.LANG.ArithmeticException: / met nul bij HandleExceptionExample.hoofd(HandleExceptionExample.Java:7) in de zon.reflecteren.NativeMethodAccessorImpl.invoke0(inheems Methode) in de zon.reflecteren.NativeMethodAccessorImpl.beroep doen op(NativeMethodAccessorImpl.Java:62) in de zon.reflecteren.DelegatingMethodAccessorImpl.beroep doen op(DelegatingMethodAccessorImpl.Java:43) in java.LANG.reflecteren.Methode.beroep doen op(Methode.Java:498) bij com.IntelliJ.rt.executie.toepassing.AppMain.hoofd(AppMain.Java:147) 
  6. 6 Toevoegen Tenslotte blok. Tenslotte blokken worden altijd uitgevoerd na de proberen en / of vangst blokken en ze worden meestal gebruikt om de middelen vrij te maken. In plaats van na het try-catch-finally-blok, druk de quotiënt variabel voor de console in de Tenslotte blok.
     openbaar klasse HandleExceptionExample  openbaar statisch leegte hoofd(Draad[] args)  int dividend = 50; int deler = 0; int quotiënt = 0; proberen  quotiënt = dividend / deler;  vangst (ArithmeticException e)  e.printStackTrace();  Tenslotte  Systeem.uit.println(quotiënt);    
  7. 7 Compileer en voer het programma uit. Het programma drukt een exception stack-trace af en quotiënt variabele direct erna, naar de console.
     Java.LANG.ArithmeticException: / met nul bij HandleExceptionExample.hoofd(HandleExceptionExample.Java:11) in de zon.reflecteren.NativeMethodAccessorImpl.invoke0(inheems Methode) in de zon.reflecteren.NativeMethodAccessorImpl.beroep doen op(NativeMethodAccessorImpl.Java:62) in de zon.reflecteren.DelegatingMethodAccessorImpl.beroep doen op(DelegatingMethodAccessorImpl.Java:43) in java.LANG.reflecteren.Methode.beroep doen op(Methode.Java:498) bij com.IntelliJ.rt.executie.toepassing.AppMain.hoofd(AppMain.Java:147) 0 

Methode twee van twee:
Try-With-Resources gebruiken

  1. 1 Maak een klasse en de belangrijkste methode. Maak een klasse en noem deze zoals je wilt en maak in de klas de hoofdmethode.
     openbaar klasse HandleExceptionExample  openbaar statisch leegte hoofd(Draad[] args)    
  2. 2 Maak try-catch-blok. Maak een try-catch-blok en voeg haakjes toe aan de proberen uitspraak.
     openbaar klasse HandleExceptionExample  openbaar statisch leegte hoofd(Draad[] args)  proberen ()   vangst ()     
  3. 3 Bron toevoegen aan de proberen en uitzondering op de vangst uitspraak. Een exemplaar FileReader en het dossier als zijn parameter in de proberen uitspraak. In de vangst verklaring, toevoegen IOException en binnen in het blok, traceer de stapel naar de console.
     openbaar klasse HandleExceptionExample  openbaar statisch leegte hoofd(Draad[] args)  proberen (FileReader lezer = nieuwe FileReader(nieuwe het dossier("bestandsnaam")))  // code weggelaten  vangst (IOException e)  e.printStackTrace();    
  4. 4 Afgewerkt. Door try-with-resources te gebruiken, worden de bronnen automatisch vrijgegeven aan het besturingssysteem. Zie het als een automatisch Tenslotte blok. Als er een uitzondering wordt gegenereerd tijdens het lezen van het bestand, reader.close () wordt automatisch gebeld.
    • Het equivalent van try-catch-finally:
       FileReader lezer = nul; proberen  lezer = nieuwe FileReader(nieuwe het dossier("bestandsnaam")); // code weggelaten  vangst (IOException e)  e.printStackTrace();  Tenslotte  als (lezer != nul)  proberen  lezer.dichtbij();  vangst (IOException e)  e.printStackTrace();