java:jre

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

java:jre [2021/02/18 12:05]
gthanos
java:jre [2021/02/18 12:05]
Line 1: Line 1:
-====== Το περιβάλλον μεταγλώττισης και εκτέλεσης 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 είναι διαθέσιμο για διαφορετρικά λειτουργικά συστήματα (π.χ. Windows και Unix/Linux) και για διαφορετικές αρχιτεκτονικές υλισμικού (ARM, i386 κ.α.). Με τη βοήθεια του 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** ακολουθούμενη από το όνομα του αρχείου όπου βρίσκεται η κλάση, δηλαδή 
-<code> 
-javac FirstProgram.java 
-</code> 
- 
-Το αποτέλεσμα είναι ένα πρόγραμμα byte-code του οποίου το όνομα αρχείου είναι το ίδιο με το όνομα της κλάσης ακολουθούμενο από την κατάληξη **.class**, για το παραπάνω παράδειγμα, το εκτελέσιμο αρχείο έχει όνομα **FirstProgram.class**. 
- 
-===== Το πρώτο μου πρόγραμμα ===== 
- 
-<code java MyFirstProgram.java> 
- 
-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."); 
-    } 
-  } 
-} 
-</code> 
- 
-Ο παραπάνω κώδικας μεταγλωττίζεται ως εξής:  
-<code> 
-javac MyFirstProgram.java 
-</code> 
- 
-και εκτελείται ως εξής:  
-<code> 
-java MyFirstProgram 
-ή  
-java MyFirstProgram <YourName> 
-</code> 
- 
-Παρατηρήστε ότι εκτελούμε καλώντας το όνομα της κλάσης. Απαραίτητη προϋπόθεση για την εκτέλεση ενός προγράμματος Java είναι η ύπαρξη της μεθόδου **main** μέσα στην κλάση την οποία επιχειρούμε να εκτελέσουμε. Η μέθοδος **main** ορίζεται ως εξής: 
- 
-<code java> 
-public static void main(String args[]) { 
-   ...  
-   σώμα της main  
-   ... 
-} 
-</code> 
- 
-όπου ''String args[]'' είναι ένας πίνακας από ορίσματα τύπου [[ http://docs.oracle.com/javase/7/docs/api/java/lang/String.html |java.lang.String]], τα οποία λαμβάνει το πρόγραμμα από την γραμμή εντολών. Αναλυτικότερα τα ορίσματα έχουν ως εξής. 
-  - args[0]: το 1ο όρισμα 
-  - args[1]: το 2ο όρισμα 
-  - args[N-1]: το N-οστό όρισμα. 
- 
-<WRAP center round todo 60%> 
-Κατεβάστε και τρέξτε το παραπάνω αρχείο ακολουθώντας τις παραπάνω οδηγίες μεταγλώττισης και εκτέλεσης. 
-</WRAP> 
- 
-|Προηγούμενο: [[java:toc|Table of Contents ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[java:install|Εγκατάσταση JDK/NetBeans]]| 
java/jre.txt · Last modified: 2021/02/18 12:05 (external edit)