U Javi, izuzetak je događaj koji se događa tijekom izvođenja programa i remeti normalan tijek programskih instrukcija. Greške ili pogreške koje ne želimo i koje ograničavaju normalno izvršavanje koda našeg programa nazivaju se iznimke . U ovom odjeljku usredotočit ćemo se na vrste izuzetaka u Javi i razlike između to dvoje.
Iznimke se mogu kategorizirati na dva načina:
selekcija vrsta java
- Ugrađene iznimke
- Označena iznimka
- Neprovjerena iznimka
- Korisnički definirane iznimke
Ugrađena iznimka
Iznimke koji su već dostupni u Java knjižnice nazivaju se ugrađena iznimka . Ove iznimke mogu definirati situaciju pogreške tako da možemo razumjeti razlog dobivanja ove pogreške. Može se kategorizirati u dvije široke kategorije, tj. provjerene iznimke i neprovjerena iznimka .
Označena iznimka
Provjereno zovu se iznimke vrijeme kompajliranja iznimke jer ove iznimke kompilator provjerava u vrijeme prevođenja. Kompajler osigurava hoće li programer obraditi iznimku ili ne. Programer bi trebao rukovati iznimkom; inače je sustav pokazao grešku kompilacije.
CheckedExceptionExample.java
import java.io.*; class CheckedExceptionExample { public static void main(String args[]) { FileInputStream file_data = null; file_data = new FileInputStream('C:/Users/ajeet/OneDrive/Desktop/Hello.txt'); int m; while(( m = file_data.read() ) != -1) { System.out.print((char)m); } file_data.close(); } }
U gornjem kodu pokušavamo pročitati Pozdrav.txt datoteku i prikazati njezine podatke ili sadržaj na zaslonu. Program izbacuje sljedeće iznimke:
- The FileInputStream(datoteka naziv datoteke) konstruktor baca FileNotFoundException to je provjerena iznimka.
- The čitati() metoda FileInputStream razred baca IOException .
- The Zatvoriti() metoda također izbacuje IOException.
Izlaz:
Kako riješiti grešku?
U osnovi postoje dva načina na koja možemo riješiti ove pogreške.
1) Iznimke se javljaju u glavnoj metodi. Možemo se riješiti ovih pogrešaka kompilacije deklariranjem iznimke u glavnoj metodi koja se koristi bacanja Proglašavamo samo IOException, ne FileNotFoundException, zbog odnosa dijete-roditelj. Klasa IOException nadređena je klasa FileNotFoundException, tako da će ovu iznimku automatski pokriti IOException. Iznimku ćemo proglasiti na sljedeći način:
class Exception{ public static void main(String args[]) throws IOException { ... ... }
Ako kompajliramo i pokrenemo kod, pogreške će nestati, a mi ćemo vidjeti podatke datoteke.
2) Ove iznimke također možemo riješiti korištenjem pokušaj uhvatiti Međutim, način koji smo koristili gore nije ispravan. Moramo dati smislenu poruku za svaku vrstu iznimke. Na taj način bilo bi lako razumjeti pogrešku. Koristit ćemo blok try-catch na sljedeći način:
razlika datuma u excelu
Iznimka.java
import java.io.*; class Exception{ public static void main(String args[]) { FileInputStream file_data = null; try{ file_data = new FileInputStream('C:/Users/ajeet/OneDrive/Desktop/programs/Hell.txt'); }catch(FileNotFoundException fnfe){ System.out.println('File Not Found!'); } int m; try{ while(( m = file_data.read() ) != -1) { System.out.print((char)m); } file_data.close(); }catch(IOException ioe){ System.out.println('I/O error occurred: '+ioe); } } }
Vidjet ćemo ispravnu poruku o pogrešci 'Datoteka nije pronađena!' na konzoli jer na tom mjestu ne postoji takva datoteka.
Neprovjerene iznimke
The neprovjereno iznimke su upravo suprotno od provjereno iznimke. Kompajler neće provjeravati ove iznimke tijekom kompajliranja. Jednostavnim riječima, ako program izbaci neprovjerenu iznimku, čak i ako je nismo obradili ili deklarirali, program neće dati grešku kompilacije. Obično se to događa kada korisnik daje loše podatke tijekom interakcije s programom.
Napomena: klasa RuntimeException može riješiti sve neprovjerene iznimke zbog odnosa dijete-roditelj.
UncheckedExceptionExample1.java
java sort arraylist
class UncheckedExceptionExample1 { public static void main(String args[]) { int postive = 35; int zero = 0; int result = positive/zero; //Give Unchecked Exception here. System.out.println(result); } }
U gornjem programu podijelili smo 35 s 0. Kod bi se uspješno preveo, ali će izbaciti pogrešku ArithmeticException tijekom izvođenja. Prilikom dijeljenja broja s 0 izbacuje iznimku dijeljenja s nulom koja je iznimka poništavanja oznake.
Izlaz:
UncheckedException1.java
class UncheckedException1 { public static void main(String args[]) { int num[] ={10,20,30,40,50,60}; System.out.println(num[7]); } }
Izlaz:
U gornjem kodu pokušavamo dobiti element koji se nalazi na poziciji 7, ali je duljina niza 6. Kod se uspješno kompajlira, ali izbacuje ArrayIndexOutOfBoundsException tijekom izvođenja.
Korisnički definirana iznimka
U Java , već imamo neke ugrađene klase izuzetaka kao što je ArrayIndexOutOfBoundsException , NullPointerException , i ArithmeticException . Ove su iznimke ograničene na pokretanje pod nekim unaprijed definiranim uvjetima. U Javi možemo napisati vlastitu klasu iznimke proširujući klasu iznimke. Možemo baciti vlastitu iznimku na određeni uvjet koristeći ključnu riječ throw. Za stvaranje korisnički definirane iznimke, trebali bismo imati osnovno znanje o the pokušaj uhvatiti blok i bacanje ključna riječ .
Napišimo a Java program i stvoriti korisnički definiranu iznimku.
UserDefinedException.java
import java.util.*; class UserDefinedException{ public static void main(String args[]){ try{ throw new NewException(5); } catch(NewException ex){ System.out.println(ex) ; } } } class NewException extends Exception{ int x; NewException(int y) { x=y; } public String toString(){ return ('Exception value = '+x) ; } }
Izlaz:
Opis:
U gornjem kodu stvorili smo dvije klase, tj. UserDefinedException i NewException . The UserDefinedException ima našu glavnu metodu, a NewException klasa je naša korisnički definirana klasa iznimke, koja se proširuje izuzetak . u NewException klase, stvaramo varijablu x tipa integer i dodijelite mu vrijednost u konstruktoru. Nakon dodjele vrijednosti toj varijabli, vraćamo poruku o iznimci.
u UserDefinedException razreda, dodali smo a pokušaj uhvatiti blok. U odjeljku pokušaja bacamo iznimku, tj. NewException i proslijedite mu cijeli broj. Vrijednost će se proslijediti klasi NewException i vratiti poruku. Hvatamo tu poruku u catch bloku i prikazujemo je na ekranu.
raščlaniti niz na int
Razlika između označene i neprovjerene iznimke
Da ne | Označena iznimka | Neprovjerena iznimka |
---|---|---|
1. | Ove se iznimke provjeravaju tijekom kompajliranja. Ove se iznimke također obrađuju tijekom kompajliranja. | Ove su iznimke upravo suprotne označenim iznimkama. Ove se iznimke ne provjeravaju i ne obrađuju tijekom kompajliranja. |
2. | Ove su iznimke izravne podklase iznimke, ali nisu proširene iz klase RuntimeException. | Oni su izravne podklase klase RuntimeException. |
3. | Kod daje grešku kompilacije u slučaju kada metoda izbaci provjerenu iznimku. Prevodilac nije u stanju sam riješiti iznimku. | Kod se kompajlira bez ikakvih grešaka jer iznimke izbjegavaju obavijest kompajlera. Ove su iznimke rezultat korisničkih pogrešaka u programskoj logici. |
4. | Ove se iznimke uglavnom javljaju kada je vjerojatnost kvara previsoka. | Do ovih iznimaka dolazi uglavnom zbog programskih pogrešaka. |
5. | Uobičajene provjerene iznimke uključuju IOException, DataAccessException, InterruptedException itd. | Uobičajene neprovjerene iznimke uključuju ArithmeticException, InvalidClassException, NullPointerException itd. |
6. | Ove se iznimke šire pomoću ključne riječi throws. | Oni se automatski propagiraju. |
7. | Potrebno je osigurati blok try-catch i try-finally za obradu provjerene iznimke. | U slučaju neprovjerene iznimke to nije obavezno. |
Greške ili greške koje ne želimo i koje ograničavaju normalno izvođenje programa nazivaju se iznimke .
ArithmeticException, ArrayIndexOutOfBoundExceptions, ClassNotFoundExceptions itd. dolaze u kategoriju Ugrađena iznimka . Ponekad ugrađene iznimke nisu dovoljne za objašnjenje ili opis određenih situacija. Za opisivanje ovih situacija, moramo stvoriti vlastite iznimke stvaranjem klase iznimke kao podklase Iznimka razreda. Ove vrste iznimaka spadaju u kategoriju Korisnički definirana iznimka .