java:exceptions_thrown_by_methods
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
java:exceptions_thrown_by_methods [2015/03/09 07:09] – gthanos | java:exceptions_thrown_by_methods [2021/03/23 07:33] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ====== | ====== Χειρισμός της εξαίρεσης σε υψηλότερο επίπεδο ====== | ||
- | Στην | + | Ας υποθέσουμε τώρα |
- | - Κατ' | + | <code java ExceptionHandling.java> |
- | - Στην συνέχεια κάνουμε comment-out τις γραμμές που ελέγχουν το '' | + | import java.util.Scanner; |
- | - Τέλος διαχειριζόμαστε την εξαίρεση μέσα στη μέθοδο '' | + | import java.util.NoSuchElementException; |
+ | import java.util.InputMismatchException; | ||
- | <code java WholeFileReader.java> | + | public class ExceptionHandling { |
+ | |||
+ | public static double getRatio(Scanner sc) throws NoSuchElementException { | ||
+ | System.out.print(" | ||
+ | int width = sc.nextInt(); | ||
+ | System.out.print(" | ||
+ | int height = sc.nextInt(); | ||
+ | return width / (double)height; | ||
+ | } | ||
+ | public static void main(String []args) { | ||
+ | try (Scanner sc = new java.util.Scanner(System.in)){ | ||
+ | double ratio = getRatio(sc); | ||
+ | System.out.format(" | ||
+ | } catch(InputMismatchException ex) { | ||
+ | System.out.println(" | ||
+ | } catch(NoSuchElementException ex) { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
- | import | + | Στον παραπάνω κώδικα παρατηρούμε ότι η μέθοδος getRatio μπορεί να παράγει μία εξαίρεση, |
- | import | + | |
- | public class WholeFileReader | + | ====== Stack Unwinding ====== |
+ | |||
+ | Κατά την πυροδότηση μίας εξαίρεσης το πρόγραμμα διακόπτεται στο σημείο που συμβαίνει η εξαίρεση και συνεχίζει την εκτέλεση του στο πρώτο catch block, το οποίο ταιριάζει με τον τύπο της εξαίρεσης. Το stack της διεργασίας αναδιπλώνεται αυτόματα μέχρι το σημείο που θα βρεθεί το κατάλληλο catch block. Καμία από τις συναρτήσεις που εμπλέκονται δεν τερματίζει ομαλά μέχρι να φτάσουμε στο catch block. Δείτε το παρακάτω παράδειγμα, | ||
+ | |||
+ | <code java ExceptionHandling.java> | ||
+ | import java.util.Scanner; | ||
+ | import java.util.NoSuchElementException; | ||
+ | import java.util.InputMismatchException; | ||
+ | |||
+ | public class ExceptionHandling | ||
| | ||
- | public | + | public |
- | | + | |
+ | } | ||
| | ||
- | try { | + | public static double getRatio(Scanner sc) throws NoSuchElementException |
- | File file = new File (path); | + | System.out.print("Width: |
- | fReader = new FileReader(file); | + | int width = readInt(sc); |
- | BufferedReader in = new BufferedReader(fReader); | + | System.out.print("Height: |
- | String inputLine; | + | |
- | StringBuffer strDocument = new StringBuffer(); | + | |
- | try { | + | |
- | while ((inputLine = in.readLine()) != null) { | + | |
- | strDocument.append(inputLine); | + | |
- | } | + | |
- | + | ||
- | } | + | |
- | catch(IOException ex) { | + | |
- | | + | |
- | | + | |
- | return strDocument.toString(); | + | |
- | | + | |
- | /* //Remove exception from here. Handle it at a higher level | + | |
- | catch(FileNotFoundException ex) { | + | |
- | | + | |
- | | + | |
- | finally { | + | |
- | if( fReader != null) { | + | |
- | try { | + | |
- | System.out.println(" | + | |
- | | + | |
- | } | + | |
- | catch(IOException ex) { | + | |
- | System.out.println(" | + | |
- | } | + | |
- | } | + | |
- | } | + | |
- | | + | |
} | } | ||
| | ||
- | public static void main(String | + | public static void main(String []args) { |
- | | + | |
- | | + | try (Scanner sc = new java.util.Scanner(System.in)){ |
- | System.out.println(wfr.readFile(args[0]) ); | + | ratio = getRatio(sc); |
+ | System.out.format(" | ||
+ | | ||
+ | System.out.println("Input doen not match integer value."); | ||
+ | } catch(NoSuchElementException ex) { | ||
+ | System.out.println(" | ||
} | } | ||
- | catch(IndexOutOfBoundsException ex) { | + | |
- | System.out.println(" | + | |
- | | + | |
- | catch(FileNotFoundException ex) { | + | |
- | System.out.println(" | + | |
- | } | + | |
- | } | + | |
} | } | ||
</ | </ | ||
- | Στον παραπάνω | + | Στο παραπάνω |
- | * εάν δεν διαχειριστούμε | + | |
- | * ή εάν δεν έχουμε μία δήλωση **throw** για το συγκεκριμένο τύπο Exception στην δήλωση της | + | |Προηγούμενο: [[: |
- | |Προηγούμενο: |
java/exceptions_thrown_by_methods.1425884962.txt.gz · Last modified: 2015/03/09 07:09 by gthanos