Maak een aangepaste uitzondering in Java

1. Inleiding

In deze tutorial behandelen we hoe u een aangepaste uitzondering maakt in Java.

We laten zien hoe door de gebruiker gedefinieerde uitzonderingen worden geïmplementeerd en gebruikt voor zowel aangevinkte als niet-aangevinkte uitzonderingen.

2. De noodzaak van aangepaste uitzonderingen

Java-uitzonderingen dekken bijna alle algemene uitzonderingen die bij het programmeren ongetwijfeld zullen voorkomen.

Soms moeten we deze standaarduitzonderingen echter aanvullen met onze eigen uitzonderingen.

De belangrijkste redenen voor het introduceren van aangepaste uitzonderingen zijn:

  • Uitzonderingen voor bedrijfslogica - Uitzonderingen die specifiek zijn voor de bedrijfslogica en werkstroom. Deze helpen de applicatiegebruikers of de ontwikkelaars te begrijpen wat het exacte probleem is
  • Om een ​​subset van bestaande Java-uitzonderingen op te vangen en een specifieke behandeling te bieden

Java-uitzonderingen kunnen worden aangevinkt en uitgeschakeld. In de volgende secties behandelen we beide gevallen.

3. Aangepaste gecontroleerde uitzondering

Aangevinkte uitzonderingen zijn uitzonderingen die expliciet moeten worden behandeld.

Laten we eens kijken naar een stukje code dat de eerste regel van het bestand retourneert:

probeer (Scannerbestand = nieuwe scanner (nieuw bestand (bestandsnaam))) {if (file.hasNextLine ()) retourneer file.nextLine (); } catch (FileNotFoundException e) {// Logboekregistratie, enz.} 

De bovenstaande code is een klassieke manier om door Java gecontroleerde uitzonderingen af ​​te handelen. Terwijl de code gooit FileNotFoundException, het is niet duidelijk wat de exacte oorzaak is - of het bestand niet bestaat of dat de bestandsnaam ongeldig is.

Om een ​​aangepaste uitzondering te maken, moeten we de extensie java.lang.Exception klasse.

Laten we een voorbeeld hiervan bekijken door een aangepaste aangevinkte uitzondering te maken met de naam IncorrectFileNameException:

openbare klasse IncorrectFileNameException breidt Uitzondering {openbaar IncorrectFileNameException (String errorMessage) {super (errorMessage) uit; }} 

Merk op dat we ook een constructor moeten leveren die een Draad als het foutbericht en riep de constructor van de bovenliggende klasse.

Dit is alles wat we hoeven te doen om een ​​aangepaste uitzondering te definiëren.

Laten we vervolgens kijken hoe we de aangepaste uitzondering in ons voorbeeld kunnen gebruiken:

probeer (Scanner-bestand = nieuwe scanner (nieuw bestand (bestandsnaam))) {if (file.hasNextLine ()) return file.nextLine (); } catch (FileNotFoundException e) {if (! isCorrectFileName (bestandsnaam)) {gooi nieuwe IncorrectFileNameException ("Onjuiste bestandsnaam:" + bestandsnaam); } // ...} 

We hebben een aangepaste uitzondering gemaakt en gebruikt, zodat de gebruiker nu kan weten wat de exacte uitzondering is. Is dit genoeg? We zijn dus de hoofdoorzaak van de uitzondering verliezen.

Om dit op te lossen, kunnen we ook een java.lang.Gooi parameter naar de constructor. Op deze manier kunnen we de root-uitzondering doorgeven aan de methodeaanroep:

openbare IncorrectFileNameException (String errorMessage, Throwable err) {super (errorMessage, err); } 

Nu de IncorrectFileNameException wordt samen met de hoofdoorzaak van de uitzondering als volgt gebruikt:

probeer (Scannerbestand = nieuwe scanner (nieuw bestand (bestandsnaam))) {if (file.hasNextLine ()) {retourbestand.nextLine (); }} catch (FileNotFoundException err) {if (! isCorrectFileName (bestandsnaam)) {gooi nieuwe IncorrectFileNameException ("Onjuiste bestandsnaam:" + bestandsnaam, err); } // ...} 

Dit is hoe we aangepaste uitzonderingen kunnen gebruiken zonder de hoofdoorzaak van waaruit ze zijn ontstaan ​​te verliezen.

4. Aangepaste ongecontroleerde uitzondering

Laten we in hetzelfde voorbeeld aannemen dat we een aangepaste uitzondering nodig hebben als de bestandsnaam geen extensie bevat.

In dit geval hebben we een aangepaste ongecontroleerde uitzondering nodig die vergelijkbaar is met de vorige, omdat deze fout alleen tijdens runtime wordt gedetecteerd.

Om een ​​aangepaste ongecontroleerde uitzondering te maken, moeten we de extensie java.lang.RuntimeException klasse:

openbare klasse IncorrectFileExtensionException breidt RuntimeException uit {openbare IncorrectFileExtensionException (String errorMessage, Throwable err) {super (errorMessage, err); }} 

Daarom kunnen we deze aangepaste ongecontroleerde uitzondering in ons voorbeeld gebruiken:

probeer (Scannerbestand = nieuwe scanner (nieuw bestand (bestandsnaam))) {if (file.hasNextLine ()) {retourbestand.nextLine (); } else {gooi nieuwe IllegalArgumentException ("Niet leesbaar bestand"); }} catch (FileNotFoundException err) {if (! isCorrectFileName (bestandsnaam)) {gooi nieuwe IncorrectFileNameException ("Onjuiste bestandsnaam:" + bestandsnaam, err); } // ...} catch (IllegalArgumentException err) {if (! containsExtension (fileName)) {throw new IncorrectFileExtensionException ("Bestandsnaam bevat geen extensie:" + bestandsnaam, err); } // ...} 

5. Conclusie

Aangepaste uitzonderingen zijn erg handig wanneer we specifieke uitzonderingen moeten afhandelen die verband houden met de bedrijfslogica. Bij correct gebruik kunnen ze dienen als een handig hulpmiddel voor een betere afhandeling en logboekregistratie van uitzonderingen.

De code voor de voorbeelden die in dit artikel worden gebruikt, is beschikbaar op Github.


$config[zx-auto] not found$config[zx-overlay] not found