Εισαγωγή στην Java - κεφ. 2

...ασύγχρονα μαθήματα γλώσσας Java

Εισαγωγή στην Java - κεφ. 2

Δημοσίευσηαπό alkismavridis » 25 Απρ 2012, 23:32

Προηγούμενο: Εισαγωγή
Επόμενο: Βασικοί τύποι δεδομένων

Το πρώτο μας πρόγραμμα


Στόχος αυτού του κεφαλαίου είναι να γράψουμε, να κάνουμε compile και να τρέξουμε το πρώτο μας πρόγραμμα.
Ανοίγουμε ένα απλό κειμενογράφο (όπως ο gedit) και το τερματικό.

Βήμα 1: Γράφουμε τον κώδικα
Γράφουμε το εξής κείμενο
(συνηστώ να αποφύγετε το copy-paste και να αφιερώσετε μερικά λεπτά να γράψετε με το χέρι)
Μορφοποιημένος Κώδικας: Επιλογή όλων
//αρχείο MyProgram.java
public class MyProgram {

public static void main(String[] args) {
System.out.print("Χαίρε κόσμε!\n");
}//main

}//class



Σώζουμε το παραπάνω σε αρχείο με το όνομα της κλάσης σαν όνομα και κατάληξη .java, δηλαδή MyProgram.java


Βήμα 2: Κάνουμε compile
πηγαίνουμε με το τερματικό στον φάκελο που το σώσαμε (με την εντολή cd) και πατάμε το εξής

open-jdk: javac MyProgram.java
gcj: gcj --main=MyProgram -o onoma MyProgram.java <-- (το onoma μπορεί να είναι οτιδήποτε θέλετε!)

Εάν έχετε κάνει κάποιο «ορθογραφικό» λάθος, τότε ο compiler θα παραπονεθεί, υποδεικνύοντάς σας το λάθος αυτό. Αν όχι η εντολή θα εκτελεστεί χωρίς να τυπώσει οτιδήποτε άλλο στην οθόνη (σε αυτή την περίπτωση το compile έγινε κανονικά).

Κώδικας: Επιλογή όλων
alkis@Alkis:~/Programs/java/Tutorial$ javac MyProgram.java
alkis@Alkis:~/Programs/java/Tutorial$

Το open-jdk θα δημιουργήσει το bytecode (με όνομα MyProgram.class) και ο gcj το εκτελέσιμο με όνομα onoma. Τα αρχεία αυτά θα πρέπει να εμφανιστούν στον ίδιο φάκελο με τον πηγαίο κώδικα.

Βήμα 3: Εκτελούμε το πρόγραμμα!
Πατάμε στο τερματικό:

bytecode: java MyProgram <-- Καλεί το jre να εκτελέσει το bytecode, δηλαδή το .class αρχείο
εκτελέσιμο: ./onoma όπως θα κάναμε με κάθε άλλο εκτελέσιμο στο linux!

Αυτό που θα δούμε είναι το εξής:
Κώδικας: Επιλογή όλων
alkis@Alkis:~/Programs/java/Tutorial$ java MyProgram
Χαίρε κόσμε!
alkis@Alkis:~/Programs/java/Tutorial$


Κάτι που κάνει τη ζωή μας πιο εύκολη: Όταν γράφουμε μία εντολή στο τερματικό, τις περισσότερες φορές δεν είναι ανάγκη να τη γράφουμε ολόκληρη. Πχ. στα παραπάνω αρκεί να γράψουμε "javac M" και να πατήσουμε το tab, και το τερματικό θα μας βγάλει την εντολή μόνο του! Το ίδιο με την "java M" και tab.
Επίσης με τα βέλη «πάνω» και «κάτω» του πληκτρολογίου, μπορούμε να βρούμε τις εντολές που γράψαμε πιο πρόσφατα και να τις τρέξουμε αμέσως :)


Βήμα 4: Κατανοούμε το πρόγραμμα!
Ας δούμε λοιπόν τι σημαίνουν αυτά τα Java-νέζικα!


1.Ο προγραμματισμός δουλεύει με εντολές! Στην Java κάθε εντολή τελειώνει με το ελληνικό ερωτηματικό ';'
Όταν βλέπετε το ; θα καταλαβαίνετε ότι μόλις δηλώσαμε μια εντολή!

2.Όταν βλέπετε το σύμβολο // σημαίνει ότι ό,τι ακολουθεί (ως το τέλος της σειράς) είναι σχόλιο. Δηλαδή εκεί γράφετε ό,τι θέλετε για να κάνετε το κείμενο πιο ευανάγνωστο και για να εξηγήσετε σε άλλους που θα δουν το πρόγραμμά σας διάφορα πράγματα (ή και στον εαυτό σας όταν ξεσκονίζετε το πρόγραμμα στο μέλλον). Ο compiler αγνοεί τα σχόλια, είναι καθαρά προς «ανθρώπινη» χρήση!

Μπορούμε επίσης να γράψουμε σχόλια που πιάνουν περισσότερες από μία γραμμές, χωρίς να γράφουμε σε κάθε γραμμή το //
Πώς; Απλά για να αρχίσουμε το μεγάλο σχόλιό μας γράφουμε /* και για να το κλείσουμε γράφουμε */


Ας αρχίσουμε την ανάλυση του προγράμματος!
Πρώτη γραμμή:
//αρχείο MyProgram.java
Ένα απλό σχόλιο.

Δεύτερη γραμμή:
public class MyProgram {
Δηλώνουμε μία κλάση. Το πρόθεμα public δηλώνει ότι η κλάση μας είναι ορατή και διαθέσιμη από παντού. Ακολουθεί το όνομα της κλάσης, και η αγκύλη { που σηματοδοτεί την έναρξη της κλάσης. Τέλος, η κλάση τελειώνει με την αγκύλη } στην τελευταία σειρά. Η κλάση περιέχει όλο μας το πρόγραμμα!

Πέμπτη γραμμή:
public static void main(String[] args) {
Εδώ δηλώνουμε μία μέθοδο. Μέθοδοι μπορούν να υπάρχουν μόνο μέσα σε κλάσεις (οι κλάσεις είναι το «σπίτι» που φιλοξενεί κάθε τι στην Java!). Η μέθοδος έχει διάφορα προθέματα όπως public (εξηγήθηκε πριν) static και void, που θα αναλύσουμε όταν μιλήσουμε περισσότερο για αντικείμενα. Ακολουθεί το όνομα της μεθόδου και σε παρένθεση τα ορίσματά της (εδώ είναι ένας πίνακας από αντικείμενα String, προς το παρόν αγνοείστε αυτή την παράμετρο). Τέλος, όπως και στις κλάσεις, η μέθοδος αρχίζει και τελειώνει με τις αγκύλες { και }.
Θυμιθείτε: Οι μέθοδοι ακολουθούνται πάντα από παρενθέσεις που εσωκλείουν τα ορίσματά τους. Έτσι ξεχωρίζουμε ότι κάτι είναι μέθοδος!

Έκτη γραμμή:
System.out.print("Χαίρε κόσμε!\n");
Εδώ καλούμε μία μέθοδο, την System.out.print με όρισμα ένα String (όπως βλέπετε το όρισμα βρίσκεται εντός παρενθέσεων). String ονομάζουμε ένα αντικείμενο που παριστάνει μία σειρά από χαρακτήρες κειμένου - δηλαδή ένα κείμενο. Τα String τα δηλώνουμε εσωκλείοντας το κείμενό τους σε " ", δηλαδή διπλές αποστρόφους. Τέλος να πούμε ότι ο συνδιασμός \n σημαίνει "άλλαξε σειρά"!!
Η δουλειά της System.out.print(...) είναι να τυπώνει στην οθόνη μας το κείμενο που της δίνουμε ως όρισμα!
Δοκιμάστε αντί του "Χαίρε κόσμε!\n" να γράψετε κάτι άλλο (για πείραμα μπορείτε να αφαιρέστε το \n να δείτε τι θα γίνει). Κάντε compile και τρέξτε το πρόγραμμά σας!

Τέτοιου είδους πειράματα είναι ο καλύερος τρόπος να μάθετε προγραμματισμό!



Έβδομη γραμμή:
}//main
Με αυτή την αγκύλη κλείνουμε την main. Τα υπόλοιπα είναι απλώς σχόλειο για να δείξουμε τι ρόλο παίζει αυτή η αγκύλη. Είναι καθαρά για εμάς.

Σας συμβουλεύω πάντα όταν κλείνεται μία αγκύλη να της βάζετε και ένα σχόλειο που θα λέει τι κλείνει αυτή η αγκύλη!

Θα κάνετε τη ζωή σας πολύ πιο εύκολη, ειδικά όταν θα φτιάξετε μεγάλα προγράμματα (σας το εύχομαι!) που θα ανοίγετε και θα κλείνετε ένα κάρο αγκύλες!
Και ένα ακόμα κολπάκι εδώ: ο gedit έχει στις Προτιμήσεις μία πολύ ωραία επιλογή που λεέι «Επισήμανση παρενθέσεων που ταιριάζουν». Αν δεν είναι ήδη μαρκαρισμένο, μαρκάρετέ το! Δεν ταιριάζει απλώς τις παρενθέσεις, αλλά και αγκύλες και άλλα τέτοια...

Ένατη γραμμή:
}//class
Ακριβώς η ίδια λογική. Εδώ τελειώνει η κλάση και το πρόγραμμά μας

Θα κλείσουμε το κεφάλαιο με δύο πληροφορίες γενικού ενδιαφέροντος:

1. Περί gcj και bytecode
Ένα σχόλειο περί compiler και jre. O gcj μπορεί και αυτός να δημιουργίσει bytecode όπως και ο javac. Γράφοντας την παράμετρο -C.
πχ gcj -C MyProgram.java
Επίσης έχει δικό του jre. Αντί για java χρησιμοποιείστε την εντολή gij. πχ gij MyProgram.

Σας συνιστώ να αφιερώσετε λίγο χρόνο στο manual του compiler και του jre που χρησιμοποιείτε!


Απλώς πατήστε μία από τις: man javac, man gcj, man java, man gij
Μη σκοτωθείτε και στο διάβασμα, επανέλθετε κατά καιρούς που θα έχετε περισσότερες γνώσεις, αλλά μην το αμελήσετε: θα μάθετε πολλά ωραία!

:!: :!: :!:2. Για εύκολη εκτέλεση bytecode, με ένα διπλό κλικ!
Αυτή η πληροφορία δεν καμία σχέση με την γλώσσα Java (πιο πολύ είναι ένα απλή πρακτική του linux για να κάνουμε τη ζωή μας εύκολη), και μπορεί να παρακαμφθεί αν δε σας ενδιαφέρει.
Κανονικά τα bytecode εκτελούνται με την εντολή java ή gij, οι οποίες τρέχουν μόνο μέσω τερματικού.
Άρα για να τρέξω το προγραμματάκι Java που έφτιαξα πρέπει κάθε φορά να ανοίγω το τερματικό και να πατάω
Κώδικας: Επιλογή όλων
cd .../.../.../...
java ToProgrammaMou
Σωστά;

Όχι!!
Γιατί απλά υπάρχουν τα bash script! Σε περίπτωση που δεν ξέρετε τι είναι αυτό σας συνιστώ να το ψάξετε περισσότερο! Η ιδέα είναι η εξής:
Μπορούμε αντί να γράφουμε τις εντολές χειροκίνητα στο τερματικό κάθε φορά, να τις γράφουμε μία φορά σε ένα αρχείο, και μετά κάνοντας διπλό κλικ σε αυτό το αρχείο οι εντολές να εκτελούνται! Ας πούμε εγώ έχω αποθηκεύσει το MyProgram.class στον φάκελο ~/Programs/java/Tutorial
Τι θα έγραφα στο τερματικό για να το τρέξω; Κάτι σαν αυτό:
Κώδικας: Επιλογή όλων
cd ~/Programs/java/Tutorial
java MyProgram   #(ή gij MyProgram)

Φτιάχνω λοιπόν ένα αρχείο (με οποιοδήποτε όνομα ή κατάληξη θέλω, ας πούμε myScript) και γράφω ακριβώς αυτά, προσθέτοντας στην αρχή τη γραμμή #!/bin/bash για να πω στο λειτουργικό ότι το myScript θα εκτελεστεί με το πρόγραμμα bash:

Κώδικας: Επιλογή όλων
#!/bin/bash
cd ~/Programs/java/Tutorial
java MyProgram
read -n 1 -s


Μόλις σώσουμε το αρχείο, πρέπει να το κάνουμε εκτελέσιμο. Αυτό γίνεται είναι είτε από δεξί κλικ - ιδιότητες, είτε με την εντολή chmod από το τερματικό:
Κώδικας: Επιλογή όλων
chmod 755 myScript

Από εδώ και πέρα μπορούμε να εκτελούμε το πρόγραμμά μας κάνοντας διπλό κλικ στο myScript και διαλέγοντας «Εκτέλεση» αν δε μας ενδιαφέρει το πρόγραμμα να τυπώνει κάτι στην οθόνη, ή «Εκτέλεση από Τερματικό» για να δούμε το πρόγραμμά μας όπως θα το τρέχαμε από γραμμή εντολών!

Η τελευταία γραμμή του myScript είναι προαιρετική, όμως πολύ χρήσιμη: Αν κάνουμε διπλό κλικ στο myScript και διαλέξουμε «Εκτέλεση από Τερματικό», όταν και η τελευταία εντολή (πχ η java MyProgram) τελειώσει, το τερματικό θα κλείσει αυτόματα. Αν όμως το πρόγραμμά μας τυπώνει κάτι στην οθόνη στο τέλος, δε θα προλάβουμε να το δούμε. Η read -n 1 -s λέει στο τερματικό να περιμένει να πατήσουμε ένα κουμπί από το πληκτρολόγιο, και μετά να κλείσει!



Το πρώτο μας μάθημα ήρθε επιτέλους στο τέλος του. Μετά από όλα αυτά θα έχουν γεννηθεί σίγουρα πολλές απορίες, ίσως περισσότερες από όσες απαντήθηκαν!

Τι είναι κλάση;
Τι είναι μέθοδος;
Εκτός από αυτά τα... πως τα είπαμε;... String! υπάρχει τίποτα άλλο χρήσιμο;
Και εντάξει! Εκτώς από μηνύματα σε μία μαύρη οθόνη τι άλλο μπορώ να κάνω με τη Java;
Τα προθέματα public, static κτλ τι κάνουν; Υπάρχουν και άλλα σαν αυτά;
...και άλλα τέτοια...
Για να απαντήσουμε σε όλα αυτά οι επόμενες παράγραφοι θα πρέπει να είναι (δυστυχώς!) αρκετά θεωρητικές.
Σας συνιστώ επίσης μετά από κάθε μία που θα διαβάζετε, να φτιάχνετε αρκετά προγράμματα με τα εργαλεία που μόλις μάθατε. Και να θυμάστε: ο compiler είναι ο καλύτερος δάσκαλος! Η διαδικασία του στυλ:
«φτου, μου πετάει error, τι να αλλάξω; αχα! ίσως αυτό... μμ, ξανά, άλλο error... ίσως και αυτό... ναι! δούλεψε!»
είναι ο τρόπος να μάθετε προγραμματισμό! Αν τώρα ένα error επιμένει, εδώ είμαστε για να σας βοηθήσουμε. Γράψτε την απορία που σας βασανίζει και είμαι σίγουρος ότι κάποιος (είτε εγώ είτε άλλος) θα σας βοηθίσει!

Άσκηση: Φτιάξτε ένα πρόγραμμα που να τυπώνει την πρόταση: «Ο προγραμματισμός είναι ωραίος!», χωρίς τα «», και με μία λέξη σε κάθε σειρά.
Χρησιμοποιείστε μία εντολή System.out.print(...). Μην ξεχάσετε να αλλάξετε γραμμή και στο τέλος!

Λύση:
Spoiler: show
public class Whatever {

public static void main(String[] args) {
System.out.print("Ο\nπρογραμματισμός\nείναι\nωραίος!!\n");
}//main
}//class


Πάρτε βαθιές ανάσες τώρα, και ετοιμαστείτε να γνωριστείτε με αρκετές βασικές έννοιες της Java...

Προηγούμενο: Εισαγωγή
Επόμενο: Βασικοί τύποι δεδομένων

Creative Commons License
Η εργασία υπάγεται στην άδεια Creative Commons Αναφορά-Παρόμοια διανομή 3.0 Ελλάδα
Γνώσεις ⇛ Linux: Μέτριο┃ Προγραμματισμός: Java, Assembly, Fortran, μαθαίνω C/X11┃ Αγγλικά: Μέτρια
Λειτουργικό σε Η/Υ ϰ μοντέλο: Ubuntu 14.04 64-bit ┃ Τρόπος εγκατάστασης: Live USB
Προδιαγραφές ⇛ Desktop: Intel i5 2320 3.00GHz.┃ MotherBoard: Asus p8h61 -m pro
Προδιαγραφές ⇛ RAM: 4GB ┃ Τροφοδοτικό Corsair CX430

GPU: Intel 2nd Generation Core Processor Family Integrated Graphics Controller [8086:0102] {i915}
5 eth0: Realtek RTL8111/8168B PCI Express Gigabit Ethernet controller [10ec:8168] (rev 06) ⋮ wlan0: 0b05:1723 ASUS WL-167G v2 802.11g Adapter [Ralink RT2571W]
Οθόνη Schaub Lorenz (Tv)
alkismavridis
punkTUX
punkTUX
 
Δημοσιεύσεις: 273
Εγγραφή: 18 Μαρ 2009, 18:46
Εκτύπωση

Re: Εισαγωγή στην Java - κεφ. 2

Δημοσίευσηαπό Vegeta » 30 Δεκ 2014, 07:22

εντύπωση μου κάνει που καλούμε την print χωρίς να κάνουμε import κάποια βιβλιοθήκη...
σε άλλες γλώσσες κάνουμε: #include <stdio.h>
θα περίμενα εδώ κάτι του τύπου: import java.io.*;

στο: System.out.print(...)
το "System" υποτίθεται ότι είναι μία κλάση η οποία γίνεται import αυτόματα?
αν ναι, ποίες κλάσεις γίνονται import από μόνες τους?
Linux: Καλά | Προγραμματισμός: Καλά | Αγγικά: Καλά
Asus TUF Gaming A15 FA506IV-HN216T (Ryzen 9-4900H/16GB/512GB/GeForce RTX 2060/FHD/W10)
Ubuntu 20.04.1 LTS
Άβαταρ μέλους
Vegeta
babeTUX
babeTUX
 
Δημοσιεύσεις: 83
Εγγραφή: 25 Μαρ 2010, 13:49
Εκτύπωση

Re: Εισαγωγή στην Java - κεφ. 2

Δημοσίευσηαπό Ilias95 » 30 Δεκ 2014, 13:59

Στην java γίνεται αυτόματα import μόνο το java.lang.* στο οποίο περιέχεται και το System.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση


  • ΣΧΕΤΙΚΑ ΘΕΜΑΤΑ
    ΑΠΑΝΤΗΣΕΙΣ
    ΠΡΟΒΟΛΕΣ
    ΣΥΓΓΡΑΦΕΑΣ

Επιστροφή στο Μαθήματα Java