Undtagelseshåndtering ind Java
Hvad er undtagelse i Java?
Undtagelse i Java er en hændelse, der afbryder udførelsen af programinstruktioner og forstyrrer den normale strøm af programafvikling. Det er et objekt, der ombryder en fejlhændelsesinformation, der opstod inden for en metode, og den sendes til runtime-systemet. I Java, undtagelser bruges hovedsageligt til at angive forskellige typer fejltilstande.
Der er to typer fejl:
- Kompiler tidsfejl
- Kørselsfejl
Kompileringstidsfejl kan igen klassificeres i to typer:
- Syntaksfejl
- Semantiske fejl
Syntaksfejl Eksempel:
I stedet for at erklære int a; du fejlagtigt erklærede det som in a; for hvilken compiler vil kaste en fejl.
Eksempel: Du har erklæret en variabel int a; og efter nogle linjer kode erklærer du igen et heltal som int a;. Alle disse fejl er fremhævet, når du kompilerer koden.
Eksempel på kørselsfejl
En Runtime-fejl kaldes en Undtagelser fejl. Det er enhver hændelse, der afbryder det normale flow af programafvikling. Eksempler på undtagelser er aritmetisk undtagelse, nullpointer undtagelse, dividere med nul undtagelse osv. Undtagelser i Java er noget, der er uden for udviklerens kontrol.
Klik link. hvis videoen ikke er tilgængelig
Hvorfor har vi brug for undtagelse?
Antag, at du har kodet et program for at få adgang til serveren. Tingene fungerede fint, mens du udviklede koden.
Under selve produktionskørslen er serveren nede. Når dit program forsøgte at få adgang til det, opstår der en undtagelse.
Sådan håndterer du undtagelser
Indtil videre har vi set, at undtagelsen er uden for udviklerens kontrol. Men at give miljøproblemer skylden for din kodefejl er ikke en løsning. Du har brug for en robust programmering, som tager sig af ekstraordinære situationer. En sådan kode er kendt som Undtagelsesbehandler.
I vores eksempel ville god undtagelseshåndtering være, når serveren er nede, at oprette forbindelse til backupserveren.
For at implementere dette skal du indtaste din kode for at oprette forbindelse til serveren (ved at bruge traditionelle if og else-betingelser). Du vil kontrollere, om serveren er nede. Hvis ja, skriv koden for at oprette forbindelse til backupserveren. En sådan organisering af kode ved at bruge "hvis" og "andet" loop er ikke effektiv, når din kode har flere java undtagelser at håndtere.
class connect{
if(Server Up){
// code to connect to server
}
else{
// code to connect to BACKUP server
}
}
Prøv Catch Block
Java giver en indbygget enestående håndtering.
- Den normale kode går ind i en PRØV blok.
- Undtagelseshåndteringskoden går ind i FANGST blokere
I vores eksempel vil TRY-blokken indeholde koden til at oprette forbindelse til serveren. CATCH-blokken vil indeholde koden til at oprette forbindelse til backup-serveren. Hvis serveren er oppe, vil koden i CATCH-blokken blive ignoreret. I tilfælde af at serveren er nede, hæves en undtagelse, og koden i catch-blokken vil blive eksekveret.
Så det er sådan undtagelsen håndteres i Java.
Syntaks for brug af try & catch
try{
statement(s)
}
catch (exceptiontype name){
statement(s)
}
Eksempel
Trin 1) Kopier følgende kode ind i en editor
class JavaException {
public static void main(String args[]){
int d = 0;
int n = 20;
int fraction = n/d;
System.out.println("End Of Main");
}
}
Trin 2) Gem filen og kompilér koden. Kør programmet ved hjælp af kommando, java Javaundtagelse
Trin 3) En aritmetisk undtagelse – divider med nul vises som nedenfor for linje #5 og linje #6 udføres aldrig
Trin 4) Lad os nu se, hvordan forsøg og fangst vil hjælpe os med at håndtere denne undtagelse. Vi vil sætte undtagelsen, der forårsager kodelinjen, i en prøv blok, efterfulgt af en fangst blok. Kopier følgende kode ind i editoren.
class JavaException {
public static void main(String args[]) {
int d = 0;
int n = 20;
try {
int fraction = n / d;
System.out.println("This line will not be Executed");
} catch (ArithmeticException e) {
System.out.println("In the catch Block due to Exception = " + e);
}
System.out.println("End Of Main");
}
}
Trin 5) Gem, kompilér og kør koden. Du får følgende output
Som du bemærker, håndteres undtagelsen, og den sidste kodelinje udføres også. Bemærk også, at linje #7 ikke vil blive udført pga så snart en undtagelse er hævet, springer kontrolstrømmen til fangblokken.
Bemærk: AritmeticException-objektet "e" indeholder oplysninger om den undtagelse, der er opstået, hvilket kan være nyttigt i forbindelse med gendannelseshandlinger.
Java Undtagelsesklasse Hierarki
Efter at en catch-sætning er udført, omgås de andre, og udførelsen fortsætter efter try/catch-blokken. De indlejrede catch-blokke følger undtagelseshierarki.
- Alle undtagelsesklasser i Java udvide klassen 'Skastbar'. Throwable har to underklasser, Error og Exception
- Error-klassen definerer undtagelsen eller de problemer, der ikke forventes at opstå under normale omstændigheder af vores program, f.eks. Hukommelsesfejl, Hardwarefejl, JVM-fejl osv.
- Undtagelsesklassen repræsenterer de undtagelser, der kan håndteres af vores program, og vores program kan gendannes fra denne undtagelse ved hjælp af try and catch-blok
- En Runtime-undtagelse er en underklasse af undtagelsesklassen. Undtagelsen af denne type repræsenterer undtagelser, der opstår på kørselstidspunktet, og som ikke kan spores på kompileringstidspunktet. Et glimrende eksempel på samme er divider med nul undtagelse, eller nul pointer undtagelse osv
- IO-undtagelse genereres under input- og outputoperationer
- Afbrudte undtagelser i Java, genereres under flere tråde.
Eksempel: For at forstå indlejring af prøv og fang blokke
Trin 1) Kopier følgende kode ind i en editor.
class JavaException {
public static void main(String args[]) {
try {
int d = 1;
int n = 20;
int fraction = n / d;
int g[] = {
1
};
g[20] = 100;
}
/*catch(Exception e){
System.out.println("In the catch block due to Exception = "+e);
}*/
catch (ArithmeticException e) {
System.out.println("In the catch block due to Exception = " + e);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("In the catch block due to Exception = " + e);
}
System.out.println("End Of Main");
}
}
Trin 2) Gem filen og kompilér koden. Kør programmet ved hjælp af kommandoen, Java Javaundtagelse.
Trin 3) En ArrayIndexOutOfBoundsException genereres. Skift værdien af int d til 0. Gem, kompilér og kør koden.
Trin 4) Der skal genereres en ArithmeticException.
Trin 5) Fjern kommentar fra linje #10 til linje #12. Gem, kompilér og kør koden.
Trin 6) Kompileringsfejl? Dette skyldes, at Exception er basisklassen for ArithmeticException Exception. Enhver undtagelse, der er rejst af ArithmeticException, kan også håndteres af Exception-klassen. Så catch-blokken i ArithmeticException vil aldrig få en chance for at blive udført, hvilket gør den overflødig. Derfor kompileringsfejlen.
Java Bloker endelig
Den endelige blok er udføres, uanset om der er rejst en undtagelse i prøveblokken. det er valgfri at bruge med en prøveblok.
try {
statement(s)
} catch (ExceptiontType name) {
statement(s)
} finally {
statement(s)
}
I tilfælde af, at der rejses en undtagelse i try-blokken, udføres blokeringen til sidst, efter at catch-blokken er udført.
Eksempel
Trin 1) Kopier følgende kode ind i en editor.
class JavaException {
public static void main(String args[]){
try{
int d = 0;
int n =20;
int fraction = n/d;
}
catch(ArithmeticException e){
System.out.println("In the catch block due to Exception = "+e);
}
finally{
System.out.println("Inside the finally block");
}
}
}
Trin 2) Gem, kompilér og kør koden.
Trin 3) Forventet output. Til sidst udføres blokering, selvom en undtagelse er rejst.
Trin 4) Skift værdien af variabel d = 1. Gem, kompilér og kør koden og observer outputtet. Nederst i formularen
Resumé
- An Undtagelsen er en køretidsfejl som afbryder det normale flow af programafvikling.Afbrydelse under afviklingen af programmet betegnes som fejl eller undtagelse.
- Fejl er klassificeret i to kategorier
- Kompileringstidsfejl – Syntaksfejl, Semantiske fejl
- Kørselsfejl - Undtagelse
- A robust program skal håndtere alle undtagelser og fortsætte med dets normale programafvikling. Java giver en indbygget enestående håndteringsmetode
- Exception Handler er et sæt kode, der håndterer en undtagelse. Undtagelser kan håndteres i Java ved hjælp af prøv og fang.
- Prøv at blokere: Normal kode går på denne blok.
- Fangsklods: Hvis der er fejl i normal kode, vil den gå ind i denne blok







