Εισαγωγή στη JAV Α ( μέρος Β’ )

Post on 14-Jan-2016

142 views 1 download

description

Εισαγωγή στη JAV Α ( μέρος Β’ ). Βασίλης Παπαταξιάρχης {vpap@di.uoa.gr} Μάθημα : Αντικειμενοστραφής Προγραμματισμός Διδάσκουσα : Ιζαμπώ Καράλη Τμήμα Πληροφορικής και Τηλεπικοινωνιών Εθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών. Περισσότερα θέματα στη Java. Λάθη και Εξαιρέσεις - PowerPoint PPT Presentation

Transcript of Εισαγωγή στη JAV Α ( μέρος Β’ )

Εισαγωγή στη JAVΑ(μέρος Β’)

Βασίλης Παπαταξιάρχης{vpap@di.uoa.gr}

Μάθημα: Αντικειμενοστραφής ΠρογραμματισμόςΔιδάσκουσα: Ιζαμπώ Καράλη

Τμήμα Πληροφορικής και ΤηλεπικοινωνιώνΕθνικό και Καποδιστριακό Πανεπιστήμιο Αθηνών

Περισσότερα θέματα στη Java

Λάθη και Εξαιρέσεις

Μετατροπή Αντικειμένων

Είσοδος / Έξοδος

Γενικά Σχόλια

Εργαλεία Ανάπτυξης

Κατά την εκτέλεση μίας μεθόδου μπορεί να

προκληθούν συνθήκες απρόβλεπτες.

Σε αυτές τις περιπτώσεις εμφανίζονται λάθη

(errors) και εξαιρέσεις (exceptions)

Η Java επιτρέπει αυτόματο χειρισμό τέτοιων

λαθών (automated exception handling)

Ένα αντικείμενο της κλάσης Error δημιουργείται

λόγω «σημαντικών» λαθών που δεν δύναται να

αντιμετωπιστούν στα πλαίσια ενός

προγράμματος

Λάθη και Εξαιρέσεις

πακέτο java.lang

Π.χ. NoClassDefFoundError (για παράδειγμα στην περίπτωση που έχουν οριστεί λάθος κατάλογοι στη μεταβλητή περιβάλλοντος CLASSPATH)

Μία εξαίρεση είναι οποιοδήποτε γεγονός διαταράσσει την ομαλή εκτέλεση ενός προγράμματος

Η μέθοδος στην οποία προκαλείται το σφάλμα δημιουργεί ένα exception object, το οποίο περιέχει πληροφορίες για το σφάλμα που προκλήθηκε και καλούμαστε να το διαχειριστούμε runtime.

Το σύστημα ελέγχει τη στοίβα κλήσης

συναρτήσεων με σκοπό να βρει κώδικα

που να κάνει handle το exception που

προέκυψε.

Εξαιρέσεις (1/2)

Εξαιρέσεις (2/2) Η αναζήτηση ξεκινά από τη

συνάρτηση στην οποία προκλήθηκε το σφάλμα και καταλήγει στη main (αν πριν δεν βρεθεί handler)

Ένας handler είναι κατάλληλος να κάνει handle ένα exception αν ο τύπος του exception object ταιριάζει με τον τύπο εξαίρεσης που ο handler μπορεί να διαχειριστεί.

Αν βρεθεί κατάλληλος handler, τότε εκτελείται ο κώδικάς του, διαφορετικά το πρόγραμμα τερματίζεται.

try – catch Η κλήση της μεθόδου η

εκτέλεση της οποίας ενδέχεται να προκαλέσει μία εξαίρεση τοποθετείται εντός του μπλοκ εντολών try.

Χειρισμός Εξαιρέσεωνtrytry { {

////κώδικας που μπορεί να κώδικας που μπορεί να ////προκαλέσει εξαίρεσηπροκαλέσει εξαίρεση

} } catchcatch(MyException1 mye1) {(MyException1 mye1) { // …// …} } catchcatch(MyException2 mye2) {(MyException2 mye2) { // …// …} } finallyfinally { { // …// …}}

trytry { {

////κώδικας που μπορεί να κώδικας που μπορεί να ////προκαλέσει εξαίρεσηπροκαλέσει εξαίρεση

} } catchcatch(MyException1 mye1) {(MyException1 mye1) { // …// …} } catchcatch(MyException2 mye2) {(MyException2 mye2) { // …// …} } finallyfinally { { // …// …}}

Το μπλοκ 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!

C++ vs. Java

C++ JAVACout<<“Answer:”<<answer; System.out.println("Answer: “ + answer);

cin>>ch; ch=System.in.read();

void main() public static void main(String[] args)

int main(int argc,char** argv) public static void main(String[] args)

const int MAX=10; final int MAX=10;

char* str; String str;

int* scores=new int[5]; int[] scores=new int[5];

delete scores; ΔΕΝ ΧΡΕΙΑΖΕΤΑΙ

Εργαλεία Ανάπτυξης

Eclipse (open source)

NetBeans (open source)

JDeveloper (Oracle)

Visual J++ (Microsoft)

Προτεινόμενες Πηγές

Exceptions,

http://java.sun.com/docs/books/tutorial/essential/exception

s/index.html

Input/Output,

http://java.sun.com/docs/books/tutorial/essential/io/

Type casting, http://www.janeg.ca/scjp/oper/cast.html

Ερωτήσεις ?