Ett undantag uppstår när en onormal situation ( t.ex. ett fel eller problem ) uppstår som en metod inte kan hantera . Metoden går ut från " kasta " ett undantag , meddelar den anropande funktionen att metoden har avslutats onormalt , och går tillbaka information om villkoren för situationen . Denna information är inkapslad i undantaget föremål som kastas tillbaka till den anropande funktionen . Grundläggande Undantag
Java erbjuder tre grundläggande typer av undantag: . Kontrolleras undantag , fel och runtime undantag kastas för förväntade problem som rimligen kan hanteras , t.ex. en begäran
Rutig undantag för en obefintlig fil . Rutig undantag måste fångas och antingen hanteras av den anropande funktionen eller kastas upp till en högre kallelse funktion . Detta krav kallas för " Catch eller Specificera krav . " Alla kontrollerade undantag härstammar från klassen Exception . Kastas när ett allvarligt fel externt till ansökan inträffar som inte rimligen kan hanteras , t.ex. av minne och stack overflow fel
fel . Alla fel härrör från klassen Error .
Runtime undantag kastas när ett allvarligt fel i programmet sker det inte rimligen kan hanteras , såsom illegala argument och parametrar . Alla runtime undantag härrör från RuntimeException klassen .
Fel och runtime undantag är båda okontrollerade undantag . Okontrollerade undantag omfattas inte av Catch eller Specificera krav eftersom graciös återhämtning från dessa typer av undantag som inte förväntas .
Klasser Undantag , fel och RuntimeException alla härstammar från klassen Throwable . Från Throwable , dessa klasser ärver användbara funktioner för rapportering och felsökning fel . Till exempel returnerar getMessage den läsbara felmeddelande associerat med undantag , och printStackTrace skriver information till en angiven ström eller författare . Du kan skapa din egen specialiserade undantag genom att ärva från Exception , RuntimeException eller deras underklasser .
Specialty Undantag
Java erbjuder många undantagsklasser härrör från de grundläggande klasserna . Specialiserade undantag kan erbjuda ytterligare funktioner för att hämta detaljerad information specifik för situationen . Exempelvis kan Java Database Connectivity funktioner kasta en SQLException . Denna specialiserade undantag har funktioner för att hämta information om SQL-status och leverantörsspecifika felkod relaterad till undantag. Fånga och hantera specifika undantag får du tillgång till en mängd ytterligare information som inte finns tillgänglig om du bara fånga och hantera de generiska förälder klass undantag
Hantera undantag : . Prova , Catch , Äntligen
Utnyttja försök , fånga , och slutligen block för att fånga och hantera undantag . Placera din kod som kan kasta ett undantag i try-blocket . Ge ett catch-block för att hantera varje möjligt undantag , med instruktioner för att hantera undantaget baserat på typen av undantag och informationen undantaget ger . Hantering undantaget skulle innebära varnar användaren om felet , begära korrekt indata , automatiskt återhämta sig från fel eller kastar ett undantag upp till en högre nivå . Kod i blocket finally alltid körs när try-blocket avslutas , vare sig det avslutas normalt eller ett undantag fångades .
I detta enkla exempel , programmet försöker öppna en fil och bearbeta den . Om ett undantag är fångad , är något undantag tryckta och avrättningar fortsätter . Slutligen rensar programmet upp genom att stänga filströmmen behov
FileReader fr = null; . Try { fr = nya FileReader ( " minfil.txt " ) ; ... ( kod för att läsa och bearbeta filen ) ... } catch ( FileNotFoundException ex ) { System.out.println ( ex.getMessage ( ) ) ; } catch ( IOException ex ) { System.out.println ( ex.getMessage ( ) ) ; } slutligen {if (fr = null ) fr.close ( ) ; ! } Addera kastar undantag
att kasta undantag från en funktion , specificera detta med hjälp av kastar klausul i funktionen deklarationen , ger en förteckning över undantag som kan kastas . Till exempel :
void getData ( ) kastar IOException , FileNotFoundException {
Ett undantag genereras med hjälp av ett " kast " uttalande . En fångad eller skapade undantag kan kastas . Till exempel :
void getData ( ) kastar SomeOtherException , FileNotFoundException { FileReader fr = null ; try { fr = nya FileReader ( " minfil.txt " ) ; ... ( kod för att läsa och bearbeta filen ) ... } catch ( FileNotFoundException ex ) { kasta ex ;} catch ( IOException ex ) { kasta nytt SomeOtherException (ex ) ;} slutligen {if ( ! fr = null ) fr.close ( ) ; } } Addera