© Γιάννης Κωστάρας
Σε αυτήν την ενότητα θα μάθουμε:
- πώς να γράψουμε το πρώτο μας εκτελέσιμο πρόγραμμα Java με έναν απλό κειμενογράφο καθώς και με ΟΠΕ
- πώς να μεταγλωττίσουμε και να εκτελέσουμε το πρόγραμμά μας
- πώς να διαβάζουμε τα ορίσματα γραμμής εντολών που περνά στο πρόγραμμά μας ο χρήστης
Μέχρι τώρα γνωρίσαμε τις εντολές της γλώσσας Java μέσα από το JShell. Αλλά τα πραγματικά προγράμματα Java δεν τα τρέχουμε μέσα από το JShell. Μπορούμε να χρησιμοποιήσουμε έναν απλό κειμενογράφο όπως το Notepad, Notepad++, Sublime, TextMate, Vi, Emacs κλπ. ή μπορούμε να χρησιμοποιήσουμε ένα Ολοκληρωμένο Περιβάλλον Εργασίας (ΟΠΕ ή Integrated Development Environment, IDE).
Ανοίξτε τον αγαπημένο σας κειμενογράφο (προσοχή θέλουμε έναν κειμενογράφο που μπορεί να αποθηκεύει απλό κείμενο, π.χ. το Word δεν μας βοηθάει), και γράψτε το παρακάτω πρόγραμμα:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Αναγνωρίζετε ίσως την εντολή System.out.println("Hello, World!");
. Τα πάντα στην Java είναι κλάσεις (class). Θα μιλήσουμε για τις κλάσεις στα μαθήματα της επόμενης εβδομάδας. Ορίζουμε μια κλάση με την δεσμευμένη λέξη class
και το όνομα της κλάσης HelloWorld
. Για την ονομασία των κλάσεων (αλλά και όλων των ονομάτων που ορίζουμε εμείς στο πρόγραμμα), ακολουθείται, εκ συμβάσεως, ο "τρόπος καμήλας" (Camel case), δηλ. όταν ξεκινά μια νέα λέξη αυτή ξεκινά με κεφαλαίο γράμμα. Έτσι, π.χ. το όνομα της κλάσης μας αποτελείται από δυο λέξης Hello και World και ακολουθώντας τον τρόπο καμήλας την ονομάζουμε HelloWorld. Σε άλλες γλώσσες προγραμματισμού που χρησιμοποιείται π.χ. ο χαρακτήρας κάτω παύλα (_
) θα ονομαζόταν Hello_world
, αλλά αυτό δε συνιστάται στη Java.
Το public
δηλώνει ότι αυτή η κλάση είναι δημόσια, δηλ. προσβάσιμη από οπουδήποτε στο πρόγραμμα αλλά και από την ΕΜ (JVM). Τα προγράμματα Java αποτελούνται από δεκάδες, εκατοντάδες ή και χιλιάδες κλάσεις.
Όπως έχουμε ήδη δει, ένα μπλοκ κώδικα περικλείεται μέσα σε άγκιστρα {}
, οπότε τα άγκιστρα ορίζουν την αρχή και το τέλος της κλάσης. Μέσα σε μια κλάση ορίζουμε μεθόδους. Η κλάση μας περιέχει μια μόνο μέθοδο με όνομα main()
που έχει ως παράμετρο μια συστοιχία τύπου String[]
με όνομα args
(φυσικά μπορείτε να ονομάσετε την παράμετρο όπως εσείς θέλετε αλλά συνηθίζεται να την ονομάζουμε args
) και η οποία δεν επιστρέφει κάποια τιμή (void
). Η παράμετρος args
περιέχει τα ορίσματα εισόδου της γραμμής εντολών που πληκτρολογεί ο χρήστης όταν καλεί το πρόγραμμα. Έχετε δει π.χ. εντολές του Linux ή του DOS όπως cp file1 dir1
που αντιγράφει το αρχείο file1
στο φάκελο dir1
. Τα file1
και dir1
είναι ορίσματα εισόδου της εντολής cp
. Αν η εντολή cp
ήταν γραμμένη σε Java, τότε αυτές θα αποθηκεύονταν στην παράμετρο args
και θα ήταν διαθέσιμα στη main()
. Θα δούμε ένα παράδειγμα παρακάτω.
Η main()
έχει μια ιδιαίτερη σημασία στη Java. Όπως και στη C/C++ και άλλες γλώσσες προγραμματισμού, δηλώνει την αρχή του προγράμματός μας. Κάθε πρόγραμμα Java πρέπει να περιέχει μια μέθοδο main()
μέσα σε μια κλάση η οποία εκτελείται πρώτη από την ΕΜ της Java. Είναι το σημείο εκκίνησης του προγράμματός σας.
Πριν την εμφάνιση του jshell στην έκδοση 9 της Java, όλα τα βιβλία Java ξεκινούσαν με το παραπάνω πρόγραμμα καθώς δεν υπήρχε η δυνατότητα να εκτελέσει κανείς προγράμματα Java παρά μόνο μέσα από μια κλάση με μια μέθοδο main()
.
Αποθηκεύστε το πρόγραμμα σε ένα αρχείο με όνομα HelloWorld.java
. Συνίσταται να αποθηκεύουμε το αρχείο με το ίδιο όνομα όπως και η κλάση μας. Στη συνέχεια ανοίξτε μια γραμμή εντολών DOS ή ένα κέλυφος shell και δώστε την εντολή:
$ java Helloworld.java
Hello, World!
Από την έκδοση 11 και μετά μπορούμε να εκτελέσουμε ένα πρόγραμμα Java που περιορίζεται σε ένα μόνο αρχείο με την εντολή java
όπως είδαμε παραπάνω. Προσοχή όμως, αυτό ισχύει για ένα μόνο αρχείο .java
. Αν το πρόγραμμά σας αποτελείται από πολλά αρχεία .java
, η εντολή αυτή δε θα δουλέψει. Μπορείτε όμως να ορίσετε πολλές κλάσεις σ' ένα αρχείο .java
αρκεί η κλάση που περιέχει τη μέθοδο main()
να ορίζεται πρώτη στο αρχείο. Διαβάστε περισσότερα εδώ.
Πριν την έκδοση 11, έπρεπε πρώτα να μεταγλωττίσουμε τον πηγαίο κώδικα παράγοντας το αρχείο HelloWorld.class
και στη συνέχεια να εκτελέσουμε το .class
αρχείο:
$ javac Helloworld.java
$ ls
HelloWorld.class HelloWorld.java
$ java HelloWorld
Hello, World!
Τροποποιήστε τώρα το πρόγραμμα όπως παρακάτω:
public class HelloWorld {
public static void main(String[] args) {
if (args.length == 1) {
System.out.println("Hello " + args[0]);
} else {
System.out.println("Hello, World!");
}
}
}
και εκτελέστε το ως εξής:
$ java Helloworld.java Γιάννης
Hello Γιάννης
Μπορούμε επομένως να διαβάσουμε δεδομένα από το χρήστη με δυο τρόπους:
- Περνώντας ορίσματα γραμμής εντολών κατά την εκτέλεση του προγράμματος
- Με την
Scanner
όπως είδαμε στα προηγούμενα μαθήματα
Άσκηση: Τροποποιήστε το παραπάνω πρόγραμμα ώστε να εμφανίζει στην έξοδο τις παραμέτρους γραμμής εντολής που εισήγαγε ο χρήστης σε διαφορετικές γραμμές. Π.χ.:
$ java HelloWorld Δευτέρα Τρίτη Τετάρτη
Δευτέρα
Τρίτη
Τετάρτη
Αν και μπορείτε κάλλιστα να αναπτύξετε προγράμματα, να τα μεταγλωττίσετε και να τα εκτελέσετε όπως περιγράψαμε προηγουμένως, δηλ. χρησιμοποιώντας τη γραμμή εντολών, ένα ΟΠΕ σας βοηθάει να αναπτύξετε προγράμματα ευκολότερα και γρηγορότερα.
Ας δούμε πώς μπορούμε να γράψουμε το παραπάνω πρόγραμμα στο NetBeans. Κατ' αρχήν θα πρέπει να δημιουργήσουμε ένα νέο έργο (project). Από το μενού File -> New Project επιλέξτε την κατηγορία Java και το Project Java Application, όπως φαίνεται στην παρακάτω εικόνα, και πατήστε Next.
Εικόνα 2.6.1 Δημιουργία νέου έργου Java (Βήμα 1)
Δώστε το όνομα HelloWorld για το έργο και επιλέξτε το φάκελο στον οποίο θα αποθηκευθεί (βλ. Εικόνα 2).
Εικόνα 2.6.2 Δημιουργία νέου έργου Java (Βήμα 2)
Όπως βλέπετε στην εικόνα 3, έχει δημιουργηθεί μια νέα κλάση Main
η οποία περιλαμβάνει τη στατική μέθοδο main()
.
Εικόνα 2.6.3 Δημιουργία κενού έργου Java
Συμβουλή για NetBeans Πληκτρολογήστε psvm
και Tab
για να εμφανίσει το NetBeans public static void main(String[] args) {}
.
Επικολλήστε τον παρακάτω κώδικα μέσα στη μέθοδο main()
:
System.out.println("Hello, World!");
Συμβουλή για NetBeans H συντομογραφία sout
και Tab
εκτυπώνει την εντολή System.out.println
.
Για να μεταγλωττίσετε το αρχείο HelloWorld.java
και να το εκτελέσετε, πατήστε απλά το κουμπί Run
όπως φαίνεται στην παραπάνω εικόνα.
Φυσικά μπορείτε να γράψετε όσες εντολές θέλετε μέσα στα άγκιστρα της main()
μεθόδου.
Τροποποιήστε το πρόγραμμα όπως παρακάτω:
public class HelloWorld {
public static void main(String[] args) {
if (args.length == 1) {
System.out.println("Hello " + args[0]);
} else {
System.out.println("Hello, World!");
}
}
}
Για να περάσετε ένα όρισμα γραμμής εντολών στο πρόγραμμα:
- Επιλέξτε την πτυσσόμενη λίστα default config από τη γραμμή εργαλείων και επιλέξτε Customize
- Στο παράθυρο που εμφανίζεται, εισάγετε το όνομά σας στο πλαίσιο κειμένου με ετικέτα "Arguments" (βλ. Εικόνα 2.6.4)
- Πατήστε ΟΚ και εκτελέστε πάλι το πρόγραμμα.
- Θα δείτε στο κάτω μέρος (παράθυρο Output) την έξοδο:
Hello Γιάννης
.
Εικόνα 2.6.4 Πέρασμα ορισμάτων γραμμής εντολών στο NetBeans
- Δημιουργήστε ένα νέο φάκελο όπου θα αποθηκεύσετε το έργο σας (project).
- Στο Visual Studio Code (VS Code) βεβαιωθείτε ότι έχετε εγκαταστήσει το "Extension Pack for Java" πατώντας στο κουμπί Extensions από τη γραμμή εργαλείων στα αριστερά και πληκτρολογώντας
java
στο πλαίσιο κειμένου αναζήτησης. - Από το VS Code ανοίξτε τον φάκελο που δημιουργήσατε στο βήμα 1 από το μενού File -> Open Folder...
- Επιλέξτε το μενού View -> Command Palette και πληκτρολογήστε
java
. - Στη συνέχεια επιλέξτε από το ίδιο μενού Java: Create Java Project...
- Από τις εμφανιζόμενες επιλογές, επιλέξτε No build tools.
- Πατήστε Select the project location για να επιβεβαιώσετε ότι το έργο θα δημιουργηθεί στον φάκελο που έχετε ήδη ανοίξει.
- Δώστε ένα όνομα για το έργο, π.χ.
HelloWorld
- Δημιουργήθηκε ένα νέο έργο (βλ. Εικόνα 2.6.4) το οποίο περιέχει την κλάση
App
και τη μέθοδοmain()
κατά τα γνωστά. - Για να το εκτελέσετε πατήστε το κουμπί Run ή τον υπερσύνδεσμο Run main πάνω από την μέθοδο
main()
.
Εικόνα 2.6.5 Νέο έργο Java στο Visual Studio Code
Τροποποιήστε το πρόγραμμα όπως παρακάτω:
public class HelloWorld {
public static void main(String[] args) {
if (args.length == 1) {
System.out.println("Hello " + args[0]);
} else {
System.out.println("Hello, World!");
}
}
}
Επ' ευκαιρία, ελέγξτε και το Denigma πατώντας στο κουμπί Explain (Denigma) στη γραμμή κατάστασης στο κάτω μέρος του VS Code (ή δεξί κλικ και Explain (Denigma)). Να το αποτέλεσμα για το παραπάνω πρόγραμμα:
Code Explanation by Denigma
The code is a class that prints "Hello, World!"
to the console.
The main method is called when the program starts up and it has two possible outcomes: if there's only one argument passed in, then it prints "Hello" followed by whatever was passed in; otherwise, it prints "Hello, World!
".
The code is used to print "Hello, World!"
on the console.
- Εκκινήστε το BlueJ
- Επιλέξτε το μενού Project -> New Project
- Δώστε ένα όνομα για το έργο,
HelloWorld
και επιλέξτε την τοποθεσία (Location) που θα αποθηκευθεί και πατήστε ΟΚ. - Πατήστε στο κουμπί New Class και ονομάστε τη
HelloWorld
- Θα πρέπει να βλέπετε την ίδια εικόνα με τη 2.6.6.
- Κάντε διπλό κλικ πάνω στην κλάση
HelloWorld
για να ανοίξει ο κειμενογράφος.
Εικόνα 2.6.6 Νέο έργο Java στο BlueJ με την κλάση HelloWorld
Επιλέξτε στον κειμενογράφο όλο το πρόγραμμα που δημιούργησε το BlueJ και αντικαταστήστε το με το παρακάτω:
public class HelloWorld {
public static void main(String[] args) {
if (args.length == 1) {
System.out.println("Hello " + args[0]);
} else {
System.out.println("Hello, World!");
}
}
}
- Πατήστε το κουμπί Compile για να το μεταγλωττίσετε.
- Όταν τελειώσει η μεταγλώττιση, κάντε δεξί κλικ στην κλάση
HelloWorld
στο κυρίως παράθυρο και επιλέξτε void main(String[] ...) από το μενού που εμφανίζεται. - Στο παράθυρο που εμφανίζεται, εισάγετε μέσα στα άγκιστρα το όνομά σας μέσα σε εισαγωγικά, π.χ.
{"Γιάννης"}
.
Θα ανοίξει ένα άλλο παράθυρο το οποίο θα εμφανίσει:
Hello Γιάννης
Σημείωση Μπορείτε να αλλάξετε τη γλώσσα διεπαφής του BlueJ από το μενού Preferences και καρτέλα Interface.
Σε αυτό το μάθημα δημιουργήσαμε την πρώτη μας εκτελέσιμη κλάση Java:
- σε έναν απλό κειμενογράφο
- στο Apache NetBeans
- στο Microsoft Visual Studio
- στο BlueJ
και μάθαμε πώς να την εκτελούμε. Επίσης μάθαμε πώς να διαβάζουμε ορίσματα που περνάμε στη γραμμή εντολών κατά την εκτέλεση του προγράμματός μας.
Αφού πλέον μάθατε πώς να εκτελείτε προγράμματα Java με τον παραδοσιακό τρόπο, θα μπορούσατε να κάνετε μια επανάληψη των όσων μάθαμε δημιουργώντας εκτελέσιμα προγράμματα χρησιμοποιώντας ένα από τα παραπάνω ΟΠΕ.
- Barnes D.J. & Kolling M. (2012), Objects First with Java™ A Practical Introduction Using BlueJ, 5th Edition, Pearson.
- Caure B., How to Use Visual Studio Code with Java?.
- Εκπαιδευτικό εγχειρίδιο Java με το NetBeans.
- Κασάπογλου Μ., Εισαγωγή στην Java με VS Code
- Kolling M. (μετάφραση Ζερβός Τ.) (), Το εγχειρίδιο του BlueJ, έκδοση 1.4, University of Southern Denmark.