Εισαγωγή στη Java (Μέρος Α’) Για όσους γνωρίζουν C++ Βασίλης Στούμπος stoumpos@di.uoa.gr
Περιγραφή Παρουσίασης Πληροφορίες για τη Java Δομή Προγραμμάτων Χαρακτηριστικά Γλώσσας Αντικειμενοστραφές Μοντέλο στη Java Διαχείριση Μνήμης Εξαιρέσεις (Exceptions) Συγχρονισμός (Synchronization) 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Περιγραφή Παρουσίασης Πληροφορίες για τη Java Εκδόσεις. Αρχιτεκτονική. Πηγές. Δομή Προγραμμάτων Χαρακτηριστικά Γλώσσας Αντικειμενοστραφές Μοντέλο στη Java Διαχείριση Μνήμης Εξαιρέσεις (Exceptions) Συγχρονισμός (Synchronization) 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Εισαγωγή στη Java για όσους γνωρίζουν C++ Η Java είναι προϊόν της Sun Microsystems. Πρώτη έκδοση της Java το 1995. Το 1997 η πρώτη έκδοση της Java 2, που χρησιμοποιούμε σήμερα. Γιατί μία ακόμα γλώσσα; Αρχικά στόχος ήταν οι εφαρμογές Διαδίκτυου. Στη συνέχεια ο στόχος μεταφέρθηκε στις εφαρμογές επιχειρήσεων. 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Εισαγωγή στη Java για όσους γνωρίζουν C++ Η Sun λέει: “Compile once, write everywhere”. Όλα τα Java προγράμματα εκτελούνται στην Ιδεατή Μηχανή (Virtual Machine – VM). Η VM διατίθεται σε πολλές πλατφόρμες και σε πολλές μορφές: Java {Standard,Enterprise,Micro} Edition… … for {Windows, Solaris, Linux, FreeBSD…} 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Εισαγωγή στη Java για όσους γνωρίζουν C++ Γενικές Πληροφορίες και Ενημέρωση Java Home: http://java.sun.com Java Developers: http://developer.java.sun.com Java Apache: http://java.apache.org Βιβλία, Βοηθήματα κλπ. The Java Tutorial: http://java.sun.com/docs/books/tutorial/ Thinking in Java: http://bruceeckel.com Διάφορα: http://developer.java.sun.com/onlineTutorials/ 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Περιγραφή Παρουσίασης Πληροφορίες για τη Java Δομή Προγραμμάτων Το “hello world” πρόγραμμα. Συμβάσεις ονοματολογίας. Μεταγλώττιση και εκτέλεση. Άλλα εργαλεία: javadoc, jar, jdb και javap Java Applets. Χαρακτηριστικά Γλώσσας Αντικειμενοστραφές Μοντέλο στη Java Διαχείριση Μνήμης … 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Συμβάσεις Ονομάτων (αρχεία) Οργανώνουμε τις κλάσεις σε αρχεία. Κάθε αρχείο περιέχει μόνο μία public κλάση. Το όνομα του αρχείου είναι ίδιο με αυτό της public κλάσης του (case sensitive). Η επέκταση του αρχείου είναι «.java». 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Συμβάσεις Ονομάτων (πακέτα) Οι κλάσεις μπορούν να ανήκουν σε ένα πακέτο. Όλες οι κλάσεις σε ένα αρχείο ανήκουν στο ίδιο πακέτο. Ένα πακέτο μπορεί να περιέχει άλλα πακέτα. Το πακέτο δηλώνεται στην πρώτη γραμμή του αρχείου με package <package name>; Αν δοθεί όνομα πακέτου, τότε το αρχείο πρέπει να βρίσκεται σε κατάλογο με το ίδιο όνομα (case sensitive). 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Πρόγραμμα “Hello World!” public class HelloWorld { public static void main(String[] args) { System.out.println(“Hello World!”); } Κάθε μέθοδος ανήκει σε μία κλάση. Το πρόγραμμα αρχίζει να εκτελείται από την main μέθοδο (public static void). Οι παράμετροι της γραμμής εντολών περνούν στην μεταβλητή args. Δεν επιστρέφεται τιμή στο περιβάλλον. 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Μεταγλώττιση και Εκτέλεση Μεταγλωττίζουμε κλάσεις, όχι προγράμματα με το εργαλείο javac. Εκτελούμε κλάσεις για να ξεκινήσουμε πρόγραμμα. $ javac HelloWorld.java $ ls HelloWorld.class HelloWorld.java $ java HelloWorld Hello World! $ Η κλάση που εκτελείται πρέπει φυσικά να έχει main … 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Εισαγωγή στη Java για όσους γνωρίζουν C++ Πρόγραμμα “time” package gr.uoa.di.stoumpos.util; //import java.util.*; import java.util.Date; public class SystemTime { public static void main( String[] args) { Date date = new Date(); System.out.println( “System time is “ + date.toString() + “!”); } Χρήση πακέτων Σχόλια Συνένωση συμβολοσειρών 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Μεταγλώττιση και Εκτέλεση Το αρχείο SystemTime.java πρέπει αν είναι στον κατάλογο gr/uoa/di/stoumpos/util. Εκτελούμε την κλάση δίνοντας το πλήρες όνομά της. $ javac gr/uoa/di/stoumpos/util/*.java $ ls gr/uoa/di/stoumpos/util/ SystemTime.class SystemTime.java $ java gr.uoa.di.stoumpos.util.SystemTime System time is Sun May 25 14:28:19 EEST 2003! $ 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Εισαγωγή στη Java για όσους γνωρίζουν C++ Ορισμός Classpath Classpath Κατά την εκτέλεση μιας κλάσης χρησιμοποιούνται άλλες κλάσεις. Οι κατάλογοι που μπορούν να βρεθούν κλάσεις ορίζονται στη μεταβλητή περιβάλλοντος CLASSPATH. Παράδειγμα 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Εισαγωγή στη Java για όσους γνωρίζουν C++ Ορισμός Classpath Classpath Για την VM οι κατάλογοι που μπορούν να βρεθούν κλάσεις ορίζονται στη μεταβλητή περιβάλλοντος CLASSPATH. $ java gr.uoa.di.stoumpos.util.SystemTime Exception in thread "main" java.lang.NoClassDefFoundError: gr/uoa/di/stoumpos/util/SystemTime $ java -classpath . gr.uoa.di.stoumpos.util.SystemTime System time is Sun May 25 14:28:19 EEST 2003! 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Εισαγωγή στη Java για όσους γνωρίζουν C++ Εργαλείο javadoc Στόχος: Αυτόματη δημιουργία τεκμηρίωσης αναφοράς (reference documentation). Κώδικας και τεκμηρίωση στο ίδιο σημείο, άρα πιο εύκολα συγχρονισμένοι. /** * Περιγραφή εδώ… * * @param arg Περιγραφή παραμέτρου. * @return Περιγραφή τιμής επιστροφής */ int foo(String arg, double d); Χρήση Τοποθέτηση javadoc σχολίων στο πρόγραμμα. HTML κέρματα (tags) επιτρέπονται. javadoc <αρχεία> 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Εισαγωγή στη Java για όσους γνωρίζουν C++ Εργαλείο jar Στόχος Σύνδεση κλάσεων, αρχείων κλπ. σε ένα συμπιεσμένο αρχείο. Αρχείο όμοιο με zip. Μπορεί να χρησιμοποιηθεί αυτούσιο στο CLASSPATH. Η ιεραρχία αρχείων είναι σημαντική και πρέπει να διατηρείται. Χρήση Όμοια με του εργαλείου tar (Unix). jar –cvf my-lib.jar <class files> set CLASSPATH=my-lib.jar:\ $CLASSPATH 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Εισαγωγή στη Java για όσους γνωρίζουν C++ Εργαλεία jdb και javap jdb Ο απλος Java αποσφαλματωτής (debuger). Έρχεται με τη Java και μοιάζει με τον gdb για C++. Λειτουργεί σε περιβάλλον κειμένου. Ο ddd έχει γραφικό περιβάλλον για τον jdb. javap Τα class files έχουν κώδικα για τη VM, όχι της πλατφόρμας (native). Bytecodes. Το javap μπορεί να εμφανίσει τα bytecodes. Χρησιμοποιείται είτε για εκπαιδευτικούς σκοπούς είτε για εξέταση παραγόμενου κώδικα. 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Εισαγωγή στη Java για όσους γνωρίζουν C++ Java Applets Τα Java Applets δεν είναι Java προγράμματα! Τα applets: χρησιμοποιούνται σε web εφαρμογές είναι υποκλάσεις της κλάσης java.applet.Applet ή javax.swing.Japplet δεν έχουν main αποτελούν περιεχόμενο web σελίδων και χρησιμοποιούνται από browsers 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Περιγραφή Παρουσίασης Πληροφορίες για τη Java Δομή Προγραμμάτων Χαρακτηριστικά Γλώσσας Τύποι δεδομένων. Μεταβλητές. Πράξεις. Δομές ελέγχου. Πίνακες. Αντικειμενοστραφές Μοντέλο στη Java Διαχείριση Μνήμης … 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Τύποι Δεδομένων στη Java Πρωτογενείς Τύποι (primitives) Ακέραιοι byte (1 byte) short (2 bytes) int (4 bytes) long (8 bytes) Πραγματικοί float (4 bytes) double (8 bytes) Άλλοι τύποι boolean (true/false) char (unicode) Αντικείμενα Ό,τι δεν είναι primitive είναι υποκλάση του java.lang.Object. Παραδείγματα: String HelloWorld Πίνακες Double Mέθοδοι String toString() boolean equals(Object o) 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Εισαγωγή στη Java για όσους γνωρίζουν C++ Μεταβλητές Κοινά με C++ Δηλώσεις, εμβέλεια και αρχικοποίηση μεταβλητών. Σταθερές με final. Αντικείμενα Οι μεταβλητές αντικειμένων είναι πάντα αναφορές στα πραγματικά αντικείμενα. «Κενή» αναφορά με null. final int i = 0; long l = 12; double d = 3.4; float f = 4.7f; String s = “foo”; String copy = s; s =s.toUpperCase(); copy = null; 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Εισαγωγή στη Java για όσους γνωρίζουν C++ Πράξεις Πράξεις κοινές με C++. Αλλαγή τύπου (type casting) μόνο χωρίς «απώλεια πληροφορίας». Αντικείμενα Έλεγχος ισότητας με «==» και «equals». Συνένωση συμβολοσειρών. int i = 42; int j = i; boolean b = i == j; // b == true Integer num = new Integer(3); Integer copy = b1 = num.equals(copy); b2 = (num == copy); // b1 == true != b2 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Εισαγωγή στη Java για όσους γνωρίζουν C++ Δομές Ελέγχου Αντίστοιχα με C++: Επαναλήψεις break και continue. Τύποι! Διακλαδώσεις switch (value) { case 1: //… break; case 2: default: } if (check) { //… } else { } while (!finished) { //… } for (i=0; i<n; i++) { //… } do { //… } while (!finished); 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++
Εισαγωγή στη Java για όσους γνωρίζουν C++ Πίνακες Αρίθμηση όμοια με C++. Ένας πίνακας είναι αντικείμενο. Γνωρίζουμε το μήκος του. Δεν επιτρέπεται να έχουμε αναφορά εκτός ορίων! String[] sArray = null; sArray = new String[10]; for (i=0; i<sArray.length; i++) { sArray[i] = “item “ + i; } // ArrayIndexOutOfBounds !!! stringArray[10] = “foo”; int[][] array = new int[2][]; array[0] = new int[100]; array[1] = new int[23]; 6/11/2018 Εισαγωγή στη Java για όσους γνωρίζουν C++