Is het een slechte gewoonte om werpbaar te vangen?

1. Overzicht

In deze tutorial kijken we naar de implicaties van vangen Gooibaar.

2. Het Gooibaar Klasse

In de Java-documentatie is het Gooibaar klasse wordt gedefinieerd als "de superklasse van alle fouten en uitzonderingen in de Java-taal“.

Laten we eens kijken naar de hiërarchie van de Gooibaar klasse:

De Gooibaar klasse heeft twee directe subklassen - namelijk de Fout en Uitzondering klassen.

Fout en zijn subklassen zijn ongecontroleerde uitzonderingen, terwijl de subklassen van Uitzondering kunnen zowel aangevinkte als niet-aangevinkte uitzonderingen zijn.

Laten we eens kijken naar de soorten situaties die een programma kan ervaren als het mislukt.

3. Herstelbare situaties

Er zijn situaties waarin herstel over het algemeen mogelijk is en kan worden afgehandeld met aangevinkte of niet-aangevinkte subklassen van het Uitzondering klasse.

Een programma wil bijvoorbeeld een bestand gebruiken dat toevallig niet bestaat op de opgegeven locatie, wat resulteert in een aangevinkt FileNotFoundException wordt gegooid.

Een ander voorbeeld is het programma dat probeert toegang te krijgen tot een systeembron zonder daarvoor toestemming te hebben, wat resulteert in een ongecontroleerd ToegangscontroleUitzondering wordt gegooid.

Volgens de Java-documentatie, de Uitzondering class “geeft voorwaarden aan die een redelijke applicatie zou willen opvangen“.

4. Onherstelbare situaties

Er zijn gevallen waarin een programma in een toestand kan komen waarin herstel onmogelijk is in het geval van een storing. Veelvoorkomende voorbeelden hiervan zijn wanneer een stack-overflow optreedt of de JVM onvoldoende geheugen heeft.

In deze situaties gooit de JVM StackOverflowError en Onvoldoende geheugen fout, respectievelijk. Zoals door hun namen wordt gesuggereerd, zijn dit subklassen van de Fout klasse.

Volgens de Java-documentatie, de Fout class “geeft ernstige problemen aan die een redelijke applicatie niet zou moeten proberen op te vangen“.

5. Voorbeeld van herstelbare en onherstelbare situaties

Laten we aannemen dat we een API hebben waarmee bellers unieke ID's kunnen toevoegen aan een opslagfaciliteit met behulp van de addIDsToStorage methode:

class StorageAPI {public void addIDsToStorage (int capacity, Set storage) gooit CapacityException {if (capacity <1) {throw new CapacityException ("Capaciteit van minder dan 1 is niet toegestaan"); } int count = 0; while (count <capaciteit) {storage.add (UUID.randomUUID (). toString ()); tel ++; }} // andere methoden gaan hier ...}

Bij het aanroepen kunnen verschillende potentiële faalpunten optreden addIDsToStorage:

  • CapacityException - Een gecontroleerde subklasse van Uitzondering bij het passeren van een capaciteit waarde van minder dan 1
  • NullPointerException - Een ongecontroleerde subklasse van Uitzondering als een null opslag waarde wordt opgegeven in plaats van een exemplaar van Set
  • Onvoldoende geheugen fout - Een ongecontroleerde subklasse van Fout als de JVM onvoldoende geheugen heeft voordat het terwijl lus

De CapacityException en NullPointerException situaties zijn fouten waarvan het programma kan herstellen, maar de Onvoldoende geheugen fout is een onherstelbare.

6. Vangen Gooibaar

Laten we aannemen dat de gebruiker van de API alleen vangt Gooibaar in de proberen te vangen bij het bellen addIDsToStorage:

public void add (StorageAPI api, int capaciteit, opslag instellen) {probeer {api.addIDsToStorage (capaciteit, opslag); } catch (Throwable throwable) {// doe hier iets}}

Dit betekent dat de aanroepende code op dezelfde manier reageert op herstelbare en onherstelbare situaties.

De algemene regel bij het omgaan met uitzonderingen is dat de proberen te vangen blok moet zo specifiek mogelijk zijn bij het opvangen van uitzonderingen. Dat is, een catch-all scenario moet worden vermeden.

Vangen Gooibaar in ons geval schendt deze algemene regel. Om afzonderlijk te reageren op herstelbare en onherstelbare situaties, zou de aanroepende code de instantie van het Gooibaar object in de vangst blok.

De betere manier zou zijn om een ​​specifieke benadering te gebruiken bij het omgaan met uitzonderingen en om te vermijden dat wordt geprobeerd om te gaan met onherstelbare situaties.

7. Conclusie

In dit artikel hebben we gekeken naar de gevolgen van vangen Gooibaar in een proberen te vangen blok.

Zoals altijd is de volledige broncode van het voorbeeld beschikbaar op Github.


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