java:exceptions_try_with_resources
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
java:exceptions_try_with_resources [2015/03/09 07:27] – gthanos | java:exceptions_try_with_resources [2021/03/22 21:44] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== | + | ====== |
- | Ας επανέλθουμε | + | Ας υποθέσουμε |
- | <code java WholeFileReader.java> | + | <WRAP tip 80% center round> |
- | import java.io.*; | + | Επειδή οι κατασκευαστές δεν επιστρέφουν καμία τιμή, δεν υπάρχει η δυνατότητα να σηματοδοτηθεί ότι συνέβη κάποιο σφάλμα ή απέτυχε η αρχικοποίηση του αντικειμένου. Προκειμένου να αντιμετωπιστεί το παραπάνω πρόβλημα μπορούμε να χρησιμοποιήσουμε το μηχανισμό των εξαιρέσεων. |
- | import java.lang.*; | + | </ |
- | public class WholeFileReader { | + | Στο παρακάτω παράδειγμα του ορθογωνίου παραλληλογράμμου κάθε φορά που δίνεται αρνητικό όρισμα ή μηδέν παράγεται μία εξαίρεση του τύπου [[https:// |
- | + | ||
- | public String readFile(String path) { | + | |
- | try ( FileReader fReader = new FileReader(new File (path)) ) { | + | <code java Rectangle.java> |
- | | + | public class Rectangle |
- | | + | int width, height; |
- | | + | |
- | | + | |
- | | + | if( width <= 0 || height <= 0) |
- | //throw new IOException(); | + | throw new IllegalArgumentException(); |
- | } | + | this.width = width; |
- | fReader.close(); | + | |
- | return strDocument.toString(); | + | |
- | | + | |
- | catch(IOException ex) { | + | |
- | System.out.println(" | + | |
- | } | + | |
- | + | ||
- | return "" | + | |
} | } | ||
| | ||
- | public | + | public |
- | | + | |
- | try { | + | } |
- | | + | |
- | } | + | public int getHeight() { |
- | catch(IndexOutOfBoundsException ex) { | + | return height; |
- | | + | } |
- | } | + | |
+ | @Override | ||
+ | public String toString() { | ||
+ | | ||
} | } | ||
- | |||
} | } | ||
</ | </ | ||
- | Από τον παραπάνω κώδικα ξεχωρίζει η δήλωση της μορφής | + | < |
- | <code java> | + | import java.util.Scanner; |
- | try ( FileReader fReader = new FileReader(new File (path)) ) { | + | |
- | } | + | |
- | </ | + | |
- | όπου ανοίγουμε ένα resource πριν εισέλθουμε στο σώμα του **try** block. Σε αυτό το τμήμα κώδικα η ιδιαιτερότητα είναι ότι δεν χρειάζεται να ανησυχούμε για το αν θα κλείσω σωστά το FileReader object ή όχι. Ανεξάρτητα από το αν θα δημιουργηθεί Exception ή όχι, το **JVM** θα αναλάβει να κλείσει το FileReader object αν αυτό παραμένει ανοιχτό. Απαραίτητη προϋπόθεση για να συμβεί το παραπάνω είναι η κλάση του αντικειμένου που θα δημιουργηθεί να υποστηρίζει το interface | + | public class SafelyCreateRectangle { |
- | + | public static void main(String | |
- | Στην ίδια λογική μπορούμε να έχουμε περισσότερες από μία δηλώσεις κώδικα μέσα στην παρένθεση του | + | Scanner sc = new Scanner(System.in); |
- | <code java> | + | |
- | try ( | + | while(true) { |
- | | + | System.out.print(" |
- | new java.util.zip.ZipFile(zipFileName); | + | int width = sc.nextInt(); |
- | | + | System.out.print(" |
- | java.nio.file.Files.newBufferedWriter(outputFilePath, | + | int height = sc.nextInt(); |
- | | + | |
+ | try { | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | catch(IllegalArgumentException ex) { | ||
+ | System.out.println(" | ||
+ | } | ||
+ | | ||
+ | } | ||
+ | } | ||
</ | </ | ||
- | |Προηγούμενο: | + | |Προηγούμενο: |
java/exceptions_try_with_resources.1425886043.txt.gz · Last modified: 2015/03/09 07:27 (external edit)