====== Το περιβάλλον μεταγλώττισης και εκτέλεσης Java (JRE/JDK) ====== H Java είναι μία γλώσσα **υψηλού επιπέδου** η οποία όταν μεταγλωττίζεται παράγεται ένας ιδιαίτερος τύπος κώδικα **χαμηλού επιπέδου** που ονομάζεται [[wp>Java_bytecode|Java Byte Code]]. Το [[wp>Java_bytecode|Java Byte Code]] μοιάζει με assembly με την ιδιαιτερότητα όμως ότι δεν συμπίπτει με κάποια υφιστάμενη αρχιτεκτονική υπολογιστή. Ο κώδικας αυτός είναι εύκολο να μεταγλωττιστεί και να εκτελεστεί σε πραγματικό χρόνο από μία εικονική μηχανή εκτέλεσης κώδικα (Virtual Machine) στην γλώσσα μηχανής του κάθε υπολογιστή. Η διαδικασία μεταγλώττισης και εκτέλεσης ψευδο-κώδικα σε πραγματικό χρόνο ονομάζεται [[wp>Just-in-time_compilation]]. O κώδικας που προκύπτει από την μεταγλώττιση των προγραμμάτων Java, απαιτεί για την εκτέλεση του μία μηχανή εκτέλεσης κώδικα ([[wp>Java_bytecode|Java Byte Code]]), το λεγόμενο [[wp>Java_virtual_machine| Java Virtual Machine (JVM)]]. To [[wp>Java_virtual_machine| JVM ]] είναι μία εικονική μηχανή εκτέλεσης κώδικα (για αυτό και ο όρος Virtual). H μηχανή JVM δεν υλοποιείται σε υλικό (hardware) αλλά σε λογισμικό (software). Αν και η δομή του [[wp>Java_bytecode|Java Byte Code]] επιτρέπει την γρήγορη εκτέλεση του κώδικα **Java** σε οποιαδήποτε αρχιτεκτονική. Παρ' όλα αυτά, δεν πρέπει να ξεχνάμε ότι καθώς εμπλέκεται λογισμικό στην εκτέλεση του κώδικα (//αντί για εκτέλεση απευθείας πάνω στο υλισμικό//), η γλώσσα Java δεν μπορεί παρά να είναι πιο αργή στην εκτέλεση της από οποιαδήποτε γλώσσα που εκτελείται απευθείας στο hardware, όπως οι C/C++. Στα παρακάτω σχήματα απεικονίζεται η διαδικασία μεταγλώττισης και εκτέλεσης ενός προγράμματος **Java**. O κώδικας Java μεταγλωττίζεται σε διαδικά αρχεία **.class** τα οποία είναι εκτελέσιμα από το JVM. To JVM μπορεί να εκτελεστεί σε υπολογιστές διαφορετικής αρχιτεκτονικής. Συμπερασματικά, το ίδιο εκτελέσιμο αρχείο **.class** μπορεί να εκτελεστεί σε υπολογιστές διαφορετικής αρχιτεκτονικής, χωρίς να απαιτηθεί η επαναμεταγλώττιση του. | {{:java:java-code-lifecycle1.gif?390 |}} | {{:java:java-code-lifecycle2.gif?430 |}} | ==== Το περιβάλλον εκτέλεσης - Java Runtime Environment ==== {{ :java:jre-stack.png?250| Java Runtime Environment}} Το περιβάλλον εκτέλεσης οποιουδήποτε προγράμματος Java (Java Runtime Environment - JRE) αποτελείται από τα εξής: - Java Virtual Machine (JVM) - Java API classes (standard βιβλιοθήκη της Java) ===== Το περιβάλλον μεταγλώττισης ===== Το περιβάλλον μεταγλώττισης αποτελείται από το Java compiler (**javac**). Κάθε κλάση στη Java οφείλει να είναι ένα αυτόνομο αρχείο, του οποίου το όνομα να είναι ίδιο με το όνομα της κλάσης ακολουθούμενο από την κατάληξη **.java**. Για παράδειγμα, η κλάση **FirstProgram** πρέπει να είναι σε ένα αρχείο με όνομα **FirstProgram.java**. Κάθε κλάση μεταγλωττίζεται με την εντολή **javac** ακολουθούμενη από το όνομα του αρχείου όπου βρίσκεται η κλάση, δηλ javac FirstProgram.java Το αποτέλεσμα είναι ένα πρόγραμμα byte-code του οποίου το όνομα αρχείου είναι το ίδιο με το όνομα της κλάσης ακολουθούμενο από την κατάληξη **.class**, για το παραπάνω παράδειγμα, το εκτελέσιμο αρχείο έχει όνομα **FirstProgram.class**. /* ===== Το πρώτο μου πρόγραμμα ===== public class MyFirstProgram { public static void main(String args[]) { if( args.length > 0 ) { System.out.print("Hello "); System.out.print(args[0]); System.out.println("! Welcome to Java world."); } else { System.out.println("Hello! Welcome to Java world."); } } } Κατεβάστε και τρέξτε το παραπάνω αρχείο ακολουθώντας τις παραπάνω οδηγίες μεταγλώττισης και εκτέλεσης. */ | /*Προηγούμενο: [[java:| ]] |*/ [[:toc | Περιεχόμενα ]] | Επόμενο: [[netbeans:intro| Εγκατάσταση του περιβάλλοντος ανάπτυξης JDK/NetBeans]]|