Et unntak oppstår når en unormal situasjon (for eksempel en feil eller problem ) oppstår som en metode ikke er i stand til å håndtere. Metoden går ut ved å "kaste " et unntak , å kommunisere til å kalle funksjonen at metoden er avsluttet unormalt , og passerer tilbake informasjon om forholdene i situasjonen . Denne informasjonen er innkapslet i unntaket objekt kastet tilbake til å kalle funksjonen . Basic Unntak
Java tilbyr tre grunnleggende typer unntak: . Sjekket unntak , feil og runtime unntak
Sjekket unntak er kastet for forventede problemer som med rimelighet kan håndteres , for eksempel en forespørsel for en ikke-eksisterende fil . Sjekket unntak må bli fanget og enten håndteres av å kalle funksjonen eller kastet opp til et høyere kall funksjonen. Dette kravet er referert til som " Catch eller Angi Krav . " Alle sjekket unntak er avledet fra klassen Exception .
Feil blir kastet når en alvorlig feil eksternt til programmet skjer det ikke med rimelighet kan håndteres , for eksempel ut av minne og stakkoverflytfeil . Alle feil er avledet fra klassen Feil .
Runtime unntak blir kastet når en alvorlig feil i programmet skjer det ikke med rimelighet kan håndteres , som for eksempel ulovlige argumenter og parametere . Alle runtime unntak er avledet fra RuntimeException klassen .
Feil og runtime unntak er begge ukontrollert unntak. Ukontrollert unntakene er ikke underlagt Catch eller Angi Krav fordi grasiøs utvinningen fra disse typer unntak ikke er forventet . Blir
Classes Unntak , feil og RuntimeException alle hentet fra klasse Throwable . Fra Throwable , disse klassene arver nyttige funksjoner for rapportering og debugging feil . Eksempelvis gir GetMessage den lesbare feilmelding forbundet med unntak , og printStackTrace ut detaljert informasjon til en spesifisert strøm eller forfatter. Du kan lage dine egne spesialiserte unntak av arve fra Exception , RuntimeException eller deres underklasser .
Spesialitet Unntak
Java tilbyr en rekke unntak klasser avledet fra de grunnleggende klasser. Spesialiserte unntak kan tilby flere funksjoner for å hente detaljert informasjon vedrørende situasjonen . For eksempel kan Java database tilkobling funksjoner kaste en SQLException . Denne spesialiserte unntak har funksjoner for å hente informasjon om SQL staten og leverandør-spesifikk feilkode relatert til unntaket. Fangst og håndtering spesifikke unntak får du tilgang til et vell av tilleggsinformasjon ikke tilgjengelig hvis du bare fange og håndtere de generiske foreldre- klasse unntak
Håndtering Unntak : . Try, Catch , Endelig
utnytte prøve , fangst, og til slutt blokker for å fange og håndtere unntak. Plasser koden som kan kaste et unntak i try -blokken. Gi en catch-blokken til å håndtere hver mulig unntak , med instruksjoner for å håndtere unntak basert på den type unntak og informasjonen unntaket gir. Håndtering unntak kan innebære varsle brukeren om feilen, ber korrekt brukerundersøkelser , automatisk utvinne fra feil eller kaste et unntak opp til et høyere nivå . Koden i endelig blokken alltid utføres når try blokken avsluttes , enten det gått normalt eller et unntak ble fanget.
I dette enkle eksempelet programmet forsøker å åpne en fil og behandle den . Hvis et unntak er fanget, er noen unntak informasjonen skrives , og fortsetter å utføre . Til slutt renser søknaden opp ved å lukke filstrøm om nødvendig
FileReader fr = null; . Try { fr = new FileReader ( " MINFIL.TXT "); ... ( kode for å lese og behandle filen ) ... } catch ( FileNotFoundException ex ) { System.out.println ( ex.getMessage ( ) ); } catch ( IOException ex ) { System.out.println ( ex.getMessage ( ) ) ; } finally { if ( fr = null ) fr.close ( ) ;}
kaster unntak
å kaste unntak fra en funksjon , angir dette ved hjelp av kaster klausul i funksjonen erklæringen , som gir en liste over unntak som kan bli kastet . For eksempel : en
ugyldig GetData ( ) kaster IOException , FileNotFoundException {
Et unntak blir kastet ved hjelp av en " kaste " statement. En fanget eller opprettet unntak kan bli kastet . For eksempel : en
ugyldig GetData ( ) kaster SomeOtherException , FileNotFoundException { FileReader fr = null; try { fr = new FileReader ( " MINFIL.TXT "); ... ( kode for å lese og behandle filen ) ... } catch ( FileNotFoundException ex ) { kaste ex ;} catch ( IOException ex ) { throw new SomeOtherException ( ex ) ;} finally { if ( ! fr = null ) fr.close ( ) ; } }