obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/l02 -...
TRANSCRIPT
![Page 1: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/1.jpg)
Obrada izuzetaka
![Page 2: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/2.jpg)
Šta je izuzetak?
Događaj koji se javlja u toku izvršenja programa i kvari normalno izvršenje.
Kada se desi izuzetak, sistem pokušava da pronađe način da ga obradi. Prosleđuje izuzetak, redom, metodima u
„call stack“ – u.
![Page 3: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/3.jpg)
Primerimport java.util.Scanner;
public class ExceptionDemo {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("Enter an integer: ");int number = scanner.nextInt();scanner.close();
System.out.println("You've entered: " + number);}
}
![Page 4: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/4.jpg)
PrimerEnter an integer:
4
You've entered: 4
Enter an integer:
A
Exception in thread "main" java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Unknown Source)at java.util.Scanner.next(Unknown Source)at java.util.Scanner.nextInt(Unknown Source)at java.util.Scanner.nextInt(Unknown Source)at rs.ac.ni.pmf.marko.ExceptionDemo.main(ExceptionDemo.java:12)
![Page 5: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/5.jpg)
Primerboolean success = false;do {try {
System.out.println("Enter an integer: ");int number = scanner.nextInt();System.out.println("You've entered: " + number);success = true;scanner.close();
} catch (InputMismatchException e) {System.out.println("Please enter an integer.");scanner.nextLine();
}
} while (!success);
![Page 6: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/6.jpg)
Obrada izuzetka
![Page 7: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/7.jpg)
Catch or Specify
Kod u kome može da se desi greška mora da zadovolji ipuni od dva zahteva Da implementira try naredbu koja „hvata“ i
obrađuje izuzetak Da specificira kakav izuzetak može da se
desi, korišćenjem throws naredbe Ukoliko ovo nije ispoštovano za
„checked“ izuzetke, kod se ne kompajlira
![Page 8: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/8.jpg)
Vrste izuzetaka
Object
Throwable
Exception
RuntimeException ...
Error
...
![Page 9: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/9.jpg)
Sistemske greške (Error)Er
ror
AssertionError
IOError
LinkageError
VirtualMachineError
...
![Page 10: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/10.jpg)
Greške zbog spoljnih faktora (Runtime)
Run
timeE
xcep
tion NullPointerException
ArithmeticException
IndexOutOfBoundsException
IllegalArgumentException
...
![Page 11: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/11.jpg)
Checked i Unchecked izuzeci
Error i RuntimeException su uncheckedizuzeci Prevodilac ne zahteva da se eksplicitno
obrađuju Ostali naslednici klase Exception su
checked izuzeci Prevodilac zahteva da budu ili obrađeni ili
bačeni iz metoda
![Page 12: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/12.jpg)
try … catch … finally Kod koji može da proizvede grešku se
stavlja u try blok Izvršenje komandi u ovom bloku se prekida čim
dođe do izuzetka Izuzetak se obrađuje u catch bloku
Ukoliko catch blok ne obrađuje generisani izuzetak, on se prosleđuje dalje
Blok finally se uvek izvršava Služi za oslobađanje resursa i slične zadatke Počev od Java 7.0 postoji i try-with-resources
naredba
![Page 13: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/13.jpg)
Primerpublic class ListOfNumbers {
private static final int SIZE = 10;private List<Integer> list;
public ListOfNumbers() {list = new ArrayList<Integer>();
for (int i = 0; i < SIZE; ++i) {list.add(i);
}}
public void writeList() {PrintWriter writer = new PrintWriter("numbers.txt");
for (int i = 0; i < SIZE; ++i) {writer.println("Value at " + i + " = " + list.get(i));
}
writer.close();}
public static void main(String[] args) {new ListOfNumbers().writeList();
}}
![Page 14: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/14.jpg)
Primerpublic class ListOfNumbers {…
public void writeList() {try {
PrintWriter writer = new PrintWriter("numbers.txt");
for (int i = 0; i < SIZE; ++i) {writer.println("Value at " + i + " = " + list.get(i));
}
writer.close();} catch (FileNotFoundException e) {
…}
}}
![Page 15: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/15.jpg)
Primerpublic class ListOfNumbers {…
public void writeList() {PrintWriter writer = null;try {writer = new PrintWriter("numbers.txt");
for (int i = 0; i < SIZE; ++i) {writer.println("Value at " + i + " = " + list.get(i));
}} catch (FileNotFoundException e) {…
} finally {if (writer != null) {writer.close();
}}
}}
![Page 16: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/16.jpg)
Primerpublic class ListOfNumbers {…
public void writeList(String filename) {PrintWriter writer = null;try {writer = new PrintWriter(filename);
for (int i = 0; i < SIZE; ++i) {writer.println("Value at " + i + " = " + list.get(i));
}} catch (FileNotFoundException e) {…
} finally {if (writer != null) {writer.close();
}}
}}
![Page 17: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/17.jpg)
throws naredba
Koristi se kada ne obrađujemo izuzetak u metodu u kome on može da nastane Često je potrebno samo prijaviti da je došlo
do izuzetka, a obradu prepustiti korisniku metoda
public void writeList(String filename)throws FileNotFoundException {PrintWriter writer = new PrintWriter(filename);
for (int i = 0; i < SIZE; ++i) {writer.println("Value at " + i + " = " + list.get(i));
}writer.close();
}
![Page 18: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/18.jpg)
try - finallypublic void writeList(String filename) throws
FileNotFoundException {PrintWriter writer = null;
try {writer = new PrintWriter(filename);
for (int i = 0; i < SIZE; ++i) {writer.println("Value at " + i + " = " + list.get(i));
}} finally {
if (writer != null) {writer.close();
}}
}
![Page 19: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/19.jpg)
catch blok
Može da bude više catch blokova koji hvataju različite izuzetke
Izuzetak se hvata prvim catch blokom koji odgovara
Od Java 7.0, moguće je u jednom catch bloku uhvatiti više tipova izuzetaka
![Page 20: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/20.jpg)
Naredba throw
Služi da bi se eksplicitno bacio izuzetak na nekom mestu U slučaju da se izuzetak sam po sebi ne bi
desio, ali je potrebno prijaviti neki događaj u programu
U slučaju da je potrebno obraditi izuzetak, ali ga i proslediti pozivajućem metodu na dalju obradu
![Page 21: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/21.jpg)
Ulančani izuzeci (Chained exceptions) Aplikacija često odgovara na izuzetak
bacanjem novog izuzetka Praktično, jedan izuzetak prouzrokuje drugi Zgodno je znati kada se ovo desi
Throwable to omogućava Throwable getCause() Throwable initCause() Throwable(String msg, Throwable cause)
Throwable(Throwable cause)
![Page 22: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/22.jpg)
Pristup lancu izuzetakacatch (Exception cause) {
StackTraceElement elements[] = cause.getStackTrace();
for (int i = 0, n = elements.length; i < n; ++i) {
System.err.println(elements[i].getFileName()
+ ":"
+ elements[i].getLineNumber()
+ ">> "
+ elements[i].getMethodName() + "()");
}
}
}
Zadatak: Napraviti loger koji snima stack-trace kada se desi izuzetak.
![Page 23: Obrada i zuzetaka - Наставнички порталnasport.pmf.ni.ac.rs/materijali/2811/L02 - Obrada izuzetaka.pdfPrevodilac ne zahteva da se eksplicitno obrađuju](https://reader030.vdocuments.net/reader030/viewer/2022020113/5ac0bccf7f8b9aca388c4266/html5/thumbnails/23.jpg)
Kreiranje sopstvenih izuzetaka
Nekada je potrebno obavestiti korisnika metoda da se desilo nešto nepredviđeno
Ukoliko već ne postoji odgovarajući izuzetak, treba napraviti novi Naslediti klasu Exception ili pogodnog
naslednika ove klase Implementirati odgovarajuće konstruktore
Iskoristiti throw za bacanje izuzetka