ΑΝΑΚΕΦΑΛΑΙΩΣΗ. Τα βασικά για την γλώσσα Java



Σχετικά έγγραφα
Reference. Thinking in Java, Bruce Eckel,

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

Τι χρειάζεται ένας φοιτητής για τη σωστή παρακολούθηση και συμμετοχή στο μαθημα;

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07

Εισαγωγή στη γλώσσα προγραμματισμού JAVA. Δομές Δεδομένων Διδάσκων: Π.Α. Μήτκας Τομέας Ηλεκτρονικής και Υπολογιστών

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

Κλάσεις και Αντικείµενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εξαιρέσεις

Αντικείμενα στη Java. Παύλος Εφραιμίδης. Java Αντικείμενα στη Java 1

Διάλεξη 5: Κλάσεις και Αντικείμενα. Διδάσκων: Παναγιώτης Ανδρέου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

ΕΞΑΙΡΕΣΕΙΣ. Εξαιρέσεις προκαλούνται. από το σύστηµα. από το πρόγραµµα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Constructors, equals, tostring Αντικείμενα ως παράμετροι

Αντικειµενοστρεφής Προγραµµατισµός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα μέσα σε αντικείμενα Αντικείμενα ως επιστρεφόμενες τιμές Αντικείμενα με πίνακες

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Constructors Υπερφόρτωση Αντικείμενα ως παράμετροι

Αντικείμενα (Objects) στην Java. Αντικείμενα στη Java. Δημιουργία Αντικειμένων. Δηλώσεις Μεταβλητών (2) Ο τελεστής new (1)

Αντικειμενοστραφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #13

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Οντοκεντρικός Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Μνήμης Αντικείμενα ως ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπερφόρτωση Αντικείμενα σαν ορίσματα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Μέθοδοι που επιστρέφουν αντικείμενα Deep and Shallow Copies

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #1 ο : Εισαγωγή στο Περιβάλλον Ανάπτυξης (IDE)

Πρόγραµµα 9.1 Πέρασµα δεδοµένων στην µνήµη

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #1 ο : Εισαγωγή στο Περιβάλλον Ανάπτυξης (IDE)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες Μέθοδοι tostring και equals Αντικείμενα μέσα σε αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Αντικειμενοστρεφής Προγραμματισμός

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning

Αντικειμενοστρεφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Εισαγωγή στη JAVA. Εισαγωγή στη Java. Η Java είναι δημιούργημα της SUN MICROSYSTEMS.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα

2.1 Αντικειµενοστρεφής προγραµµατισµός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Έλεγχος ισότητας String Interning Αποαναφοροποίηση - dereferencing

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 6 : ΠΙΝΑΚΕΣ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων Constructors

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πολυμορφισμός Αφηρημένες κλάσεις Interfaces (διεπαφές)

2 ΓΡΑΜΜΙΚΕΣ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

Wrapper Classes, Abstract Classes and Interfaces

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 9 : ΕΞΑΙΡΕΣΕΙΣ ΚΑΙ Ο ΧΕΙΡΙΣΜΟΣ ΤΟΥΣ

Οντοκεντρικός Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός

Κλάσεις. Τροποποιητές, ιασυνδέσεις, Πακέτα. Τροποποιητές ελέγχου προσπέλασης µεταβλητών και µεθόδων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Περισσότερα για τις Κλάσεις, τα Αντικείμενα και τις Μεθόδους

Ειδικά Θέματα Προγραμματισμού

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

NATIONAL & KAPODISTRIAN UNIVERSITY OF ATHENS. Διαχείριση Δικτύων. Nikolas Bompetsis

9:00-10:00 π.μ. (60 λεπτά) Παρασκευή, 14 Οκτωβρίου, 2016

Προγραμματισμός ΙΙ (Java) 4. Διαχείριση εξαιρέσεων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Copy Constructor Deep and Shallow Copies

Τμήμα Πολιτικών Μηχανικών και Μηχανικών Περιβάλλοντος ΠΠΜ 401: Ανάπτυξη Λογισμικού Εφαρμογών Μηχανικής, :00-10:00 π.μ.

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός. Παναγιώτης Σφέτσος

Εισαγωγή στη γλώσσα προγραμματισμού C++

Προγραμματισμός 2 Σημειώσεις εργαστηρίου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι String Interning

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #4 ο : Αποσφαλμάτωση (debugging), μετατροπές

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

Πακέτα (Packages) Φωλιασμένες ή Εσωτερικές Κλάσεις (Inner Classes) Παναγιώτης Σφέτσος, PhD

Ευφυείς Τεχνολογίες ----Πράκτορες

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Στατικές μέθοδοι και μεταβλητές Εσωτερικές κλάσεις


Βασικά Στοιχεία της Java

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 4 : CLASSES

ΕΠΛ233 ΠΛΗΡΟΦΟΡΙΑ ΤΥΠΟΥ. Type Information. Μ. Δικαιάκος

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #4 ο : Αποσφαλμάτωση (debugging), μετατροπές

(Διαφάνειες Νίκου Βιδάκη)

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστραφής Προγραμματισμός

Transcript:

JAVA, NETBEANS

ΑΝΑΚΕΦΑΛΑΙΩΣΗ Τα βασικά για την γλώσσα Java

Java portability Το μεγαλύτερο πλεονέκτημα της Java είναι η μεταφερσιμότητα: ο κώδικας μπορεί να τρέξει πάνω σε οποιαδήποτε πλατφόρμα. Write-Once-Run-Anywhere μοντέλο, σε αντίθεση με το σύνηθες Write-Once-Compile-Anywhere μοντέλο. Αυτό επιτυγχάνεται δημιουργώντας ένα ενδιάμεσο κώδικα (bytecode) ο οποίος μετά τρέχει πάνω σε μια εικονική μηχανή (Java Virtual Machine) η οποία το μεταφράζει σε γλώσσα μηχανής. Οι προγραμματιστές πλέον γράφουν κώδικα για την εικονική μηχανή, η οποία δημιουργείται για οποιαδήποτε πλατφόρμα.

X.java java X class loader JVM javac X.class compiler bytecode verifier interpreter runtime support Operating System

Δομή προγράμματος Γενικά ένα απλό πρόγραμμα υλοποιείται σε ένα αρχείο Χ.java αποτελείται από Ένα βασικό δομικό στοιχείο κλάση - που ορίζεται ως public class Χ και περιλαμβάνει τον κώδικα της main του προγράμματος. όνομα κλάσης == όνομα αρχειου!! πρέπει η main να δηλωθεί ως static void. δέχεται σαν παραμέτρους από τη γραμμή εντολών ένα πίνακα από String. το αρχείο μπορεί να περιέχει και άλλες μεθόδους άλλα επιπλέον δομικά στοιχεία κλάσεις - που ορίζονται ως non public κλάσεις που υλοποιούν τον υπόλοιπο κώδικα του προγράμματος. Τα πάντα υλοποιούνται μέσα σε κλάσεις.

Compilation and Execution Compilation javac TestPerson.java Παράγει το μεταγλωττισμένο αρχείο TestPerson.class Execution java TestPerson 70 170 80 160 Εκτελεί το πρόγραμμα με παραμέτρους εισόδου 70 170 80 160

Κοινές μέθοδοι Όλες οι κλάσεις στην Java έχουν κοινό πρόγονο την κλάση Object, η οποία είναι στην κορυφή της ιεραρχίας της Java. H κλάση Object έχει κάποιες μεθόδους τις οποίες κληρονομούν όλες οι κλάσεις. Δύο από αυτές που είναι χρήσιμες: tostring(): μετατρέπει ένα αντικείμενο σε αλφαριθμητικό. Δεν έχει πάντα νόημα, αλλά σε ορισμένες περιπτώσεις είναι πολύ βολικό. equals(object): ελέγχει για ισότητα μεταξύ δύο αντικειμένων του ίδιου τύπου.

Ορισμός κλάσεων Ο ορισμός των μεθόδων και των πεδίων γίνεται μαζί με τη δήλωση. class Person { private int weight = 4; private int height = 50; public Person(int w, int h) { // Constructor weight = w; height = h; public void statistics(){ // Computes Ratio System.out.println( "Statistics for person : " + height/weight); Δεν χρειάζεται ;

Μεταβλητές Εκτός από τις μεταβλητές βασικού τύπου δεδομένων, όλες οι υπόλοιπες μεταβλητές είναι Αναφορές σε αντικείμενα κλάσης που προσφέρεται από τη Java (πχ String) κλάσης του προγράμματος που κατασκευάζουμε εμείς Διεύθυνση πίνακα Όλες οι μεταβλητές αρχικοποιούνται αυτόματα εκτός και αν τις αρχικοποιήσουμε κατά τη δήλωση Οι μεταβλητές βασικού τύπου σε μηδέν. Οι μεταβλητές μη βασικού τύπου σε null. Αρχικοποιούνται σε οποιοδήποτε σημείο του κώδικα, είτε με χρήση της new που δεσμεύει χώρο για ένα νέο αντικείμενο, πίνακα, string είτε με εκχώρηση της διεύθυνσης που περιέχεται σε μια άλλη μεταβλητή του ίδιου τύπου. Εκτός από τις μεταβλητές βασικού τύπου οι υπόλοιπες μεταβλητές δεσμεύουν χώρο από το heap και όχι το stack της μνήμης.

Wrapper Classes H Java ορίζει wrapper classes για τους βασικούς τύπους δεδομένων. Integer για τον int Float για το float κλπ Οι κλάσεις αυτές μας δίνουν επιπλέον ευελιξία στον χειρισμό των βασικών τύπων. public String ratio(){ // makes string out of Ratio Integer w = weight; Integer h = height; String s = h.tostring() + / + w.tostring(); return s;

Constructors Όπως και στην C++ αν δεν προσδιορίσουμε τον Constructor, τότε χρησιμοποιείται ο default. Στην περίπτωση της Java, ο default constructor κάνει κάτι: αρχικοποιεί όλα τα πεδία σε «μηδενική» τιμή. Όπως και στην C++ αν ορίσουμε ένα constructor, τότε ο default παύει να υφίσταται.

Destructors? Στην Java δεν χρειαζόμαστε destructors! H αποδέσμευση της μνήμης γίνεται αυτόματα από το garbage collector ο οποίος φροντίζει για τη διαγραφή των αντικειμένων που δεν χρησιμοποιούνται πλέον. Αν ο χρήστης θέλει να δώσει μια ένδειξη στον garbage collector μπορεί να χρησιμοποιήσει την εντολή finalize().

Παράδειγμα Θα κατασκευάσουμε σε java to παράδειγμα από την διάλεξη 2: Δύο οχήματα κινούνται πάνω σε μία ευθεία. Σε κάθε βήμα διαλέγουν τυχαία, αν θα πάνε αριστερά, δεξιά, ή θα μείνουν στην ίδια θέση. Η προσομοίωση τελειώνει όταν συγκρουστούν.

import java.lang.* ; import java.util.* ; class Car { private int pos; public Car() { pos = 0; public Car(int x) { pos = x; public void move() { Random r = new Random(); pos += r.nextint(2) - 1; public int GetPos() { return pos;

public class CarGame{ private static Car x = new Car(); private static Car y = new Car(); H δήλωση της main πρέπει να είναι ακριβώς έτσι public static void main(string[] args) { int iter = 1; x.move(); y.move(); while (x.getpos()!= y.getpos()){ x.move(); y.move(); iter ++; System.out.println("Colision after " + iter + "moves at position " + x.getpos());

import java.lang.* ; import java.util.* ; class Car { private int pos; Αρχείο CarGame.java public Car(){ pos = 0; public Car(int x){ pos = x; public void move(){ Random r = new Random(); pos += r.nextint(2) - 1; public int GetPos(){ return pos; public class CarGame{ private static Car x = new Car(); private static Car y = new Car(); public static void main(string[] args){ int iter = 1; x.move(); y.move(); while (x.getpos()!= y.getpos()){ x.move(); y.move(); iter ++; System.out.println("Colision after " + iter + "moves at position " + x.getpos());

NETBEANS

IDEs IDE: Integrated Development Environment Ένα πρόγραμμα που για τη δημιουργία λογισμικού. Παρέχει τις εξής λειτουργίες: Code Editor Compliler/Interpreter Build Enviroment Debugger Συνήθως, τα IDEs χρειάζονται κάποιο χρόνο για να τα μάθεις αλλά όταν εξοικειωθείς με αυτά ο προγραμματισμός γίνεται πολύ πιο εύκολος (και το debugging ακόμη περισσότερο). Μειονέκτημα: Είναι λίγο φασαρία για την δημιουργία απλών μικρών προγραμμάτων. Γνωστά IDEs: Microsoft Visual Studio, Eclipse, Netbeans

Netbeans Ο κώδικας είναι οργανωμένος σε projects, στα οποία προσθέτουμε κλάσεις, ή βιβλιοθήκες. Για κάθε project δημιουργείται ένα folder το οποίο περιέχει τα αρχεία του project και το αποτέλεσμα του compilation src folder: περιέχει τα.java αρχεία με τον πηγαίο κώδικα. build folder: περιέχει τα.class αρχεία με τον ενδιάμεσο κώδικα. dist folder: περιέχει ένα.jar αρχείο το οποίο μπορουμε να κάνουμε distribute.

Λειτουργίες Build: Κάνει compile το project. Run: Τρέχει τον κώδικα Για τον ορισμό των παραμέτρων του προγράμματος (line arguments): Δεξί κλικ στο project -> Properties -> Run -> Arguments Debug: Μας επιτρέπει να τρέξουμε το πρόγραμμα γραμμή γραμμή για να βρούμε λάθη. Refactor: Επιτρέπει εύκολα αλλαγές στον κώδικα Π.χ. αλλαγή ονόματος μεταβλητών. Profile: Μας βοηθάει να δούμε που καταναλώνονται τα resources του προγράμματος

ΕΠΙΠΛΕΟΝ ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ JAVA Interfaces, Containers

Εξαιρέσεις Ένα exception είναι ένα αντικείμενο της κλάσης Exception (ή παραγόμενων κλάσεων). Το αντικείμενο δημιουργείται και επιστρέφεται με την εντολή throw (αντί της return) από μία μέθοδο όταν προκύπτει μια μη φυσιολογική κατάσταση η οποία επιβάλει να διακοπεί η εκτέλεση αυτής της μεθόδου. Π.χ. Διαίρεση με το μηδέν Πρόσβαση μίας null αναφοράς Λάθος σε Ι/Ο Εκτός από τις εξαιρέσεις που «πετάνε» οι μέθοδοι της Java, o χρήστης μπορεί πετάει και δικά του exceptions.

Χειρισμός εξαιρέσεων To try-catch block try{ // Κώδικας που μπορεί να πετάξει καποια εξαίρεση catch (Exception e){ System.out( caught the exception ); Μπορούμε να έχουμε ξεχωριστά catch για διαφορετικούς τύπους εξαιρέσεων. IOException NullPointerException IllegalArgumentException RunTimeException

Χειρισμός εξαιρέσεων Μία εξαίρεση μπορούμε να την χειριστούμε επί τόπου, είτε να την κάνουμε rethrow στη μέθοδο που κάλεσε τη δική μας μέθοδο. Δεν είναι απαραίτητο να χειριστούμε όλες τις πιθανές εξαιρέσεις (αν και πρέπει γιατί αλλιώς το πρόγραμμα μας δεν θα είναι ασφαλές), αλλά υπάρχουν κάποιες για τις οποίες η Java απαιτεί να τις χειριστούμε (αλλιώς ο compiler χτυπάει λάθος) Τα IOExceptions είναι ένα παράδειγμα εξαιρέσεων που πρέπει να χειριστουμε οπωσδηποτε.

IO Read/Write lines from/to Standard Input/Output import java.lang.*; import java.io.*; public class IOReadlines { public static void main (String args[]){ try{ InputStreamReader BufferedReader br ir = new BufferedReader( InputStreamReader(System.in); BufferedReader br = new BufferedReader(ir); String line; while ((line = br.readline())!= null){ System.out.println(line); catch (IOException e) { System.out.println("Input error"); System.exit(1); Υποχρωτικά μέσα σε try-catch block new InputStreamReader(System.in));

IO Read/Write lines from/to Files import java.io.*; public class Main { public static void main(string[] args) { try{ BufferedReader FileReader fr = inreader new FileReader("Files/in.txt"); = new BufferedReader( BufferedReader inreader = new new BufferedReader(fr); FileReader("Files/in.txt")); PrintWriter FileWriter fw outwriter = new FileWriter("Files/out.txt"); = new PrintWriter( PrintWriter outwriter = new new PrintWriter(fw); FileWriter("Files/out.txt")); String line; while((string line = inreader.readline())!=null){ outwriter.println(line); System.out.println(line); outwriter.close(); catch(ioexception ex){ System.out.println("IO Error" + ex);

Κληρονομικότητα και πολυμορφισμός Η κληρονομικότητα ορίζεται με το keyword extends class Employee extends Person { Πολυμορφισμός: το late binding είναι η default συμπεριφορά του JVM στην εκτέλεση των προγραμμάτων. Η κλάση του αντικειμένου εξαρτάται από την κλάση του αντικειμένου που χρησιμοποιούμε και όχι από την κλάση του αντικειμένου στον ορισμό

Παράδειγμα import java.lang.*; import java.io.*; class Person{ private String fname; private String lname; public Person(String fn, String ln){ fname = fn; lname = ln; public String getpersonaldetails(){ return fname + lname;

Παράδειγμα class Employee extends Person { private int basicsalary; public Employee( String fn, String ln, int sal){ super(fn, ln); basicsalary = sal; public int getsalary(){ return basicsalary;

Abstract Classes Παρόμοια με τις virtual classes στην C++, αν ορίσω μία μέθοδο ως abstract, τότε όλη η κλάση γίνεται abstract και πλέον δεν μπορώ να ορίσω αντικείμενα αυτής της κλάσης.

Παράδειγμα import java.lang.*; import java.io.*; abstract class Person{ private String fname; private String lname; public Person(String fn, String ln){ fname = fn; lname = ln; public abstract String getpersonaldetails();

Παράδειγμα class Employee extends Person { private int basicsalary; public Employee( String fn, String ln, int sal){ super(fn, ln); basicsalary = sal; public int getsalary(){ return basicsalary; public String getpersonaldetails(){ return fname + + lname + + basicsalary.tostring();

Interfaces Τα Interfaces πηγαίνουν την ιδέα της αφηρημένης κλάσης ένα βήμα παραπέρα. Σε ένα Interface έχουμε μόνο: Ορισμούς μεθόδων χωρίς την υλοποίηση. Οι μέθοδοι είναι by default public Ορισμούς μεταβλητών οι οποίες είναι by default static. Συντακτικό: interface INTERFACE_NAME { methods

Παράδειγμα import java.lang.*; import java.io.*; H κλάση Employee implements το interface Person Interface Person{ String getpersonaldetails(); class Employee implements Person { private int basicsalary; private String fname, lname; public Employee( String fn, String ln, int sal){ fname = fn; lname = ln; basicsalary = sal; public String getpersonaldetails(){ return fname + + lname + + basicsalary.tostring();

Παράδειγμα class Employee extends Person { private int basicsalary; public Employee( String fn, String ln, int sal){ super(fn, ln); basicsalary = sal; public int getsalary(){ return basicsalary; public String getpersonaldetails(){ return fname + + lname + + basicsalary.tostring();

Containers Παρόμοια με την C++ η Java έχει μια βιβλιοθήκη από Containers την οποία μπορούμε να χρησιμοποιήσουμε για να αποθηκεύουμε και να επεξεργαζόμαστε δεδομένα. Array ArrayList LinkedList Set Map PriorityQueue

ArrayList O Container ArrayList κληρονομει από το List και αυτό από το Collection. Προσφέρει σειριακή αποθήκευση δεδομένων και έχει όλα τα πλεονεκτήματα και μειονεκτήματα του vector στην C++. Στην Java δεν επιτρέπεται υπερφόρτωση τελεστών οπότε χρησιμοποιούμε την μέθοδο get(index) για να διαβάσουμε ένα στοιχείο. Διάσχιση του ArrayList με την foreach εντολή είναι πιο απλή απ ότι με τον iterator.

import java.io.*; import java.util.*; public class arraylist { public static void main(string[] args) { ArrayList<Integer> A = new ArrayList<Integer>(); for (int i = 0; i < 10; i ++){ Random r = new Random(); A.add(r.nextInt(100)); System.out.println(A.get(i)); Collections.sort(A); System.out.println(""); for (int x: A){ System.out.println(x); System.out.println(""); System.out.println(A.toString());

HashMap To HashMap ορίζει ένα συνειρμικό αποθηκευτή (associative container) ο οποίος συσχετίζει κλειδιά με τιμές, κληρονομεί από την πιο γενική κλάση Map. Π.χ., ο βαθμός ενός φοιτητή, η συχνότητα με την οποία εμφανίζεται μια λέξη σε ένα κείμενο. H βιβλιοθήκη της Java μας δίνει πιο εύκολη πρόσβαση στα κλειδιά και τις τιμές του map. Χρήσιμες μέθοδοι: put(key,value): προσθέτει ένα νέο key-value ζεύγος containskey(key): επιστρέφει αληθές αν υπάρχει το κλειδί containsvalue(value): επιστρέφει αληθές αν υπάρχει η τιμή values(): επιστρέφει ένα Collection με τις τιμές keyset(): επιστρέφει ένα Set με τις τιμές.

import java.io.*; import java.util.*; public class mapexample { public static void main(string[] args) { String line; Map<String,Integer> namesgrades = new HashMap<String,Integer>(); try{ FileReader fr = new FileReader("Files/in.txt"); BufferedReader inreader = new BufferedReader(fr); while((line = inreader.readline())!=null){ System.out.println(line); String [] words = line.split("\t"); Integer grade = Integer.parseInt(words[1]); namesgrades.put(words[0],grade); catch(ioexception ex){ System.out.println("IO Error" + ex); for(string x: namesgrades.keyset()){ System.out.println(x + " -- " + namesgrades.get(x));