This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
java:exceptions_intro [2015/03/03 06:36] gthanos [Exception Handler] |
java:exceptions_intro [2015/03/03 07:08] gthanos [Exception Handler] |
||
---|---|---|---|
Line 106: | Line 106: | ||
Όπως βλέπουμε έχουμε το προηγούμενο παράδειγμα, εμπλουτισμένο όμως με κώδικα διαχείρισης της διαίρεσης με το μηδέν. Ο κώδικας θα αναγνωρίσει ότι υπάρχει δημιουργείται ''ArithmeticException'' και συγκεκριμένα διαίρεση με το μηδέν (0) και θα εκτυπώσει τα σχετικά μηνύματα. | Όπως βλέπουμε έχουμε το προηγούμενο παράδειγμα, εμπλουτισμένο όμως με κώδικα διαχείρισης της διαίρεσης με το μηδέν. Ο κώδικας θα αναγνωρίσει ότι υπάρχει δημιουργείται ''ArithmeticException'' και συγκεκριμένα διαίρεση με το μηδέν (0) και θα εκτυπώσει τα σχετικά μηνύματα. | ||
+ | |||
+ | === Ανοίγοντας ένα αρχείο για διάβασμα === | ||
Παρακάτω δίνεται ένα πιο σύνθετο παράδειγμα μία μεθόδου που διαβάζει ένα αρχείο κειμένου και το επιστρέφει στη μορφή ενός String. | Παρακάτω δίνεται ένα πιο σύνθετο παράδειγμα μία μεθόδου που διαβάζει ένα αρχείο κειμένου και το επιστρέφει στη μορφή ενός String. | ||
Line 125: | Line 127: | ||
while ((inputLine = in.readLine()) != null) { | while ((inputLine = in.readLine()) != null) { | ||
strDocument.append(inputLine); | strDocument.append(inputLine); | ||
+ | //throw new IOException(); | ||
} | } | ||
+ | System.out.println("Closing File!"); | ||
fReader.close(); | fReader.close(); | ||
return strDocument.toString(); | return strDocument.toString(); | ||
Line 134: | Line 138: | ||
} | } | ||
catch(IOException ex) { | catch(IOException ex) { | ||
- | System.out.println("IOException occured while opening file or reading from file "+path); | + | System.out.println("IOException occured while reading from file "+path); |
- | System.out.println("Exiting..."); | + | |
- | System.exit(1); | + | |
} | } | ||
- | return ""; | + | return "Nothing to return.."; |
} | } | ||
| | ||
Line 151: | Line 153: | ||
} | } | ||
- | }</code> | + | } |
+ | </code> | ||
+ | |||
+ | Παρατηρήστε ότι εμφανίζονται δύο **catch** blocks. Το πρώτο catch block αφορά [[http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html|ΙΟException]] objects, ενώ το δεύτερο catch block αφορά [[http://docs.oracle.com/javase/7/docs/api/java/io/FileNotFoundException.html|FileNotFoundException]] objects. Από τους συνδέσμους που παρατίθενται θα παρατηρήσετε ότι το ''FileNotFoundException'' είναι υποκλάση του ''IOException''. Ο παραπάνω κώδικας θα μπορούσε να παραλείπει τις γραμμές | ||
+ | |||
+ | <code java> | ||
+ | catch(FileNotFoundException ex) { | ||
+ | System.out.println("The specified file was not found at "+ path); | ||
+ | return ""; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | καθώς ο μη εντόπισμός αρχείου θα ενέπιπτε σε ''IOException'' που είναι η γονική κλάση του ''FileNotFoundException''. Σε αυτή την περίπτωση όμως όταν θα συνέβαινε κάποιο Exception δεν θα γνωρίζαμε εάν υπάρχει το αρχείο αλλά δεν μπορούμε να το διαβάσουμε ή δεν υπάρχει καθόλου το αρχείο που θέλουμε να διαβάσουμε στο filesystem. | ||
+ | |||
+ | Επίσης, δεν θα είχε κανένα νόημα να βάλουμε τα catch blocks με ανάποδη σειρά δηλ. | ||
+ | <code java> | ||
+ | catch(IOException ex) { | ||
+ | System.out.println("IOException occured while opening file or reading from file "+path); | ||
+ | } | ||
+ | catch(FileNotFoundException ex) { | ||
+ | System.out.println("The specified file was not found at "+ path); | ||
+ | return ""; | ||
+ | } | ||
+ | </code> | ||
+ | Σε αυτή την περίπτωση, ακόμη και ένα Exception του τύπου ''FileNotFoundException'' θα διαχειριστεί από το πρώτο block που διαχειρίζεται τα ''IOExcetpions''. | ||
+ | |||
+ | Τέλος, στο παραπάνω παράδειγμα βγάλτε τα σχόλια από την γραμμή για να δημιουργήσετε ένα ''IOException'' και παρατηρήστε την πορεία του κώδικα. | ||
+ | <code java> | ||
+ | //throw new IOException(); | ||
+ | </code> | ||
==== Finaly Block ==== | ==== Finaly Block ==== |