220 likes | 377 Views
Εισαγωγή στη JAV Α ( μέρος Β’ ). Βασίλης Παπαταξιάρχης {vpap@di.uoa.gr} Μάθημα : Αντικειμενοστραφής Προγραμματισμός Διδάσκουσα : Ιζαμπώ Καράλη Τμήμα Πληροφορικής και Τηλεπικοινωνιών Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών. Περισσότερα θέματα στη Java. Λάθη και Εξαιρέσεις
E N D
Εισαγωγή στη JAVΑ(μέρος Β’) Βασίλης Παπαταξιάρχης {vpap@di.uoa.gr} Μάθημα: Αντικειμενοστραφής Προγραμματισμός Διδάσκουσα: Ιζαμπώ Καράλη Τμήμα Πληροφορικής και Τηλεπικοινωνιών Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών
Περισσότερα θέματα στη Java • Λάθη και Εξαιρέσεις • Μετατροπή Αντικειμένων • Είσοδος / Έξοδος • Γενικά Σχόλια • Εργαλεία Ανάπτυξης
Λάθη και Εξαιρέσεις • Κατά την εκτέλεση μίας μεθόδου μπορεί να προκληθούν συνθήκες απρόβλεπτες. • Σε αυτές τις περιπτώσεις εμφανίζονται λάθη (errors)και εξαιρέσεις (exceptions) • Η Java επιτρέπει αυτόματο χειρισμό τέτοιων λαθών (automated exception handling) • Ένα αντικείμενο της κλάσης Error δημιουργείται λόγω «σημαντικών» λαθών που δεν δύναται να αντιμετωπιστούν στα πλαίσια ενός προγράμματος πακέτο java.lang • Π.χ. NoClassDefFoundError (για παράδειγμα στην περίπτωση που έχουν οριστεί λάθος κατάλογοι στη μεταβλητήπεριβάλλοντος CLASSPATH)
Εξαιρέσεις (1/2) • Μία εξαίρεσηείναι οποιοδήποτε γεγονός διαταράσσει την ομαλή εκτέλεση ενός προγράμματος • Η μέθοδος στην οποία προκαλείται το σφάλμα δημιουργεί ένα exception object, το οποίο περιέχει πληροφορίες για το σφάλμα που προκλήθηκε και καλούμαστε να το διαχειριστούμε runtime. • Το σύστημα ελέγχει τη στοίβα κλήσης συναρτήσεων με σκοπό να βρει κώδικα που να κάνει handle το exception που προέκυψε.
Εξαιρέσεις (2/2) • Η αναζήτηση ξεκινά από τη συνάρτηση στην οποία προκλήθηκε το σφάλμα και καταλήγει στη main (ανπριν δεν βρεθεί handler) • Ένας handler είναι κατάλληλος να κάνει handle ένα exception αν ο τύπος του exception object ταιριάζει με τον τύπο εξαίρεσης που ο handler μπορεί να διαχειριστεί. • Αν βρεθεί κατάλληλος handler, τότε εκτελείται ο κώδικάς του, διαφορετικά το πρόγραμμα τερματίζεται.
Χειρισμός Εξαιρέσεων • try – catch • Η κλήση της μεθόδου η εκτέλεση της οποίας ενδέχεται να προκαλέσει μία εξαίρεση τοποθετείται εντός του μπλοκεντολών try. try { //κώδικας που μπορεί να //προκαλέσει εξαίρεση } catch(MyException1 mye1) { // … } catch(MyException2 mye2) { // … } finally { // … } • Το μπλοκ catch περιέχει εντολές που θα διαχειριστούν την εξαίρεση που προκλήθηκε. • finally: μπλοκ εντολών που ακολουθεί των catch μπλοκ και περιέχει κώδικα που εκτελείται είτε συμβεί εξαίρεση είτε όχι
Συνήθεις Εξαιρέσεις • NullPointerException: Προσπέλαση αντικειμένου null • IllegalArgumentException: Λάθος τύπου ορίσματα • ArrayIndexOutOfBoundsException: Εκτός ορίων πίνακα • ArithmeticException: Διαίρεση με το 0 • FileNotFoundException: Το αρχείο δεν βρέθηκε στο δίσκο
Πλεονεκτήματα Χειρισμού Εξαιρέσεων • Διαχωρισμός κώδικα για αναγνώριση λαθών από τον «κανονικό» κώδικα • Ικανότητα διαχείρισης της εξαίρεσης ακολουθώντας τη στοίβα κλήσης μεθόδων • Δυνατότητα χειρισμού μίας εξαίρεσης με διαφορετικούς τρόπους • Πολλά catchμπλοκ μπορούν να αναφέρονται στο ίδιο tryμπλοκ • Υψηλότερα οι ειδικότερες εξαιρέσεις στον κώδικα • Δυνατότητα δημιουργίας νέων κλάσεων εξαιρέσεων
Μετατροπή Αντικειμένων • Η μετατροπή αντικειμένων (type casting)είναι χρήσιμη όταν θέλουμε να διαχειριστούμε ένα αντικείμενο ως διαφορετικού του ενός τύπου • Μετατροπές προς τα πάνω (upcasting) • Πάντα επιτρεπτές • Γίνονται με απλή ανάθεση • Μετατροπές προς τα κάτω (downcasting) • Δεν είναι πάντα επιτρεπτές • Γίνονται με χρήση cast τελεστή • Μπορεί να γίνει κανονικά η μεταγλώττιση (αφού το cast ίσως επιτρέπεται), αλλά να παραχθεί runtime error
Είσοδος / Έξοδος (I/O) • Η Java χρησιμοποιεί ροές (streams) για νααναπαραστήσει πηγές εισόδου ή προορισμούς εξόδου (π.χ. αρχεία στο δίσκο, άλλα προγράμματα). • Ροή: ακολουθία από δεδομένα (απλά bytes μέχρι σύνθετα αντικείμενα). • Είσοδος / Έξοδος σε αρχεία δίσκου
Ροές Εισόδου / Εξόδου • Ροές Εισόδου (Input Streams) • Διαβάζουν ένα «τεμάχιο» πληροφορίας τη φορά • Ροές Εξόδου (Output Streams) • Γράφουν ένα «τεμάχιο» πληροφορίας τη φορά
Τύποι Ροών (1/2) • Byte Streams: Ι/Ο αυθαίρετου τύπου δεδομένων • Character Streams: I/O χαρακτήρων • Buffered Streams : χρήση δομής buffer για αποδοτικότερη αλληλεπίδραση • Scanning and Formatting: για formatted κείμενο
Τύποι Ροών (2/2) • I/O from the command line • Standard Stream • Input: πληκτρολόγιο • Output: οθόνη • Console • Data Streams: για primitive data types και String δυαδικής μορφής • Object Streams: για οποιουδήποτε τύπου αντικείμενα
Byte Streams • Ροές που διαχειρίζονται χαμηλού επιπέδου δεδομένα • Συνήθεις ροές byte • FileInputStream/ FileOutputStream • Όλοι οι υπόλοιποι τύποι ροών βασίζονται στις ροές byte.
Ι/Ο από αρχεία δίσκου • Οι ροές δεν υποστηρίζουν όλες τις επιθυμητές αλληλεπιδράσεις με τα αρχεία που βρίσκονται στο δίσκο • File: χειρισμός αρχείων ανεξαρτήτου πλατφόρμας και OS • Random Access File: υποστηρίζει μη-ακολουθιακή προσπέλαση στα αρχεία
Χρόνος Εκτέλεσης • Γενικά, ο χρόνος εκτέλεσης ενός java προγράμματος αναμένεται μεγαλύτερος ενός ισοδύναμου σε κάποια άλλη γλώσσα προγραμματισμού (όχι όμως και ο χρόνος ανάπτυξης ) • Αιτία: Ο μεταγλωττισμένος για μία μηχανή κώδικας είναι εν γένει ταχύτερος από τον κώδικα που εκτελείται από έναν interpreter. • Βελτίωση: Just-In-Time μεταγλώττιση
Κάποια Τελευταία Σχόλια… • Πώς προέκυψε ο όρος “bytecode”; • Επειδή ουσιαστικά αποτελεί μία binary αναπαράσταση του προγράμματος προορισμένη να εκτελεστεί από τη JVM (software)και όχι από το hardware. • Σε τι γλώσσα είναι γραμμένη η Java; • Οι περισσότεροι compilers(π.χ. της Sun) για Java είναι πλέον γραμμένοι σε Java, αν και αρχικά ως βάση χρησιμοποιήθηκαν οι γλώσσες C/C++. • Σε ότι αφορά τις JVM ακόμα και σήμερα χρησιμοποιούν C++ (όχι όμως αποκλειστικά), κυρίως για λόγους απόδοσης. Ακόμα και JVMs της Sun!
Εργαλεία Ανάπτυξης • Eclipse (open source) • NetBeans (open source) • JDeveloper (Oracle) • Visual J++ (Microsoft) • …
Προτεινόμενες Πηγές • Exceptions,http://java.sun.com/docs/books/tutorial/essential/exceptions/index.html • Input/Output, http://java.sun.com/docs/books/tutorial/essential/io/ • Type casting, http://www.janeg.ca/scjp/oper/cast.html