variables (Μεταβλητεσ)
Οπως μάθαμε ήδη τα αντικείμενα αποθηκεύουν την κατάσταση τους σε πεδία. Σε προηγούμενο παράδειγμα ορίσαμε τα ακόλουθα int (integer= ακέραιος) πεδία:
int cadence = 0;
int speed = 0;
int gear = 1;
Υπάρχουν και άλλοι τύποι πεδίων. Τα πεδία έχουν εξ ορισμού αρχική τιμή αλλά μπορούμε να τους αναθέσουμε και εμείς αρχική τιμή και να αλλάξουμε την τιμή τους κατά την εκτέλεση ενός προγράμματος. Επίσης τα πεδία περιορίζονται όπως θα δούμε πιο κάτω και σε μέγεθος σε σχέση με τον τύπο δεδομένων που αποθηκεύουν.
Συχνά στην Java υπάρχει σύγχυση μεταξύ του όρου πεδίο και μεταβλητής. Όπως θα δούμε ενώ όλα τα πεδία είναι και μεταβλητές δεν είναι όλες οι μεταβλητές και πεδία.
Στην Java ορίζονται οι ακόλουθες μεταβλητές :
Από εδώ και μπρος όποτε αναφερόμαστε σε πεδία δεν εννοούμε ποτέ τοπικές μεταβλητές και παραμέτρους ενώ όταν αναφερόμαστε σε μεταβλητές εννοούμε όλα τα παραπάνω. Επίσης μερικές φορές χρησιμοποιείται ο όρος member (μέλος) μιας κλάσης. Με τον όρο αυτό εννοούμε όλα τα πεδία, μεθόδους και «φωλιασμένα» πεδία μίας κλάσης.
Primitive Data Types (Απλοί Τύποι Δεδομένων)
Ειδαμε στην αρχή της σελίδας πως ορίζουμε ένα πεδίο και κατ' επέκταση μια μεταβλητή. Εδώ παραθέτονται όλες οι απλές μεταβλητές της Java. Οι τύποι μεταβλητών γράφονται με όλους τους χαρακτήρες μικρούς.
int cadence = 0;
int speed = 0;
int gear = 1;
Υπάρχουν και άλλοι τύποι πεδίων. Τα πεδία έχουν εξ ορισμού αρχική τιμή αλλά μπορούμε να τους αναθέσουμε και εμείς αρχική τιμή και να αλλάξουμε την τιμή τους κατά την εκτέλεση ενός προγράμματος. Επίσης τα πεδία περιορίζονται όπως θα δούμε πιο κάτω και σε μέγεθος σε σχέση με τον τύπο δεδομένων που αποθηκεύουν.
Συχνά στην Java υπάρχει σύγχυση μεταξύ του όρου πεδίο και μεταβλητής. Όπως θα δούμε ενώ όλα τα πεδία είναι και μεταβλητές δεν είναι όλες οι μεταβλητές και πεδία.
Στην Java ορίζονται οι ακόλουθες μεταβλητές :
- Instance Variables (Non-Static Fields) Μεταβλητές Στιγμιότυπου (Μη-στατικά πεδία) Τα αντικείμενα αποθηκεύουν την ατομική τους κατάσταση σε μη στατικά πεδία (δηλαδή πεδία χωρίς την ένδειξη static πριν τον ορισμό τους). Τα πεδία αυτά είναι γνωστά και σαν μεταβλητές στιγμιότυπου γιατί ή τιμές τους είναι μοναδικές για κάθε στιγμιότυπο μίας κλάσης(κάθε αντικείμενο)π.χ. το currentSpeed του Bicycle είναι ανεξάρτητο από το currentSpeed ενός άλλου Bicycle.
- Class Variables (Static Fields) Μεταβλητές Κλάσης(Στατικά πεδία) Είναι οποιοδήποτε πεδίο με την λέξη static μπροστά του. Η λέξη κλειδί static ορίζει ότι κατά την εκτέλεση του προγράμματος μας η στατική μεταβλητή υπάρχει μόνο σε ένα αντίγραφο κοινό για όλα τα στιγμιότυπα μιας κλάσης. Ο κώδικας static int numGears = 6; δημιουργεί ένα τέτοιο στατικό πεδίο. Όλα τα ποδήλατα ενός τύπου θα έχουν τον ίδιο αριθμό ταχυτήτων. Επίσης προσθέτοντας μπροστά από τον όρο static τον όρο final ορίζουμε ότι η τιμή του πεδίου δεν αλλάζει ποτέ (σταθερά) final static int numGears = 6;.
- Local Variables Τοπικές Μεταβλητές. Όπως ένα αντικείμενο αποθηκεύει την κατάσταση του σε πεδία έτσι και μία μέθοδος μπορεί να αποθηκεύει την προσωρινή της κατάσταση σε τοπικές μεταβλητές. Η σύνταξη είναι η ίδια με τον ορισμό ενός πεδίου (π.χ. int count = 0;). Δεν υπάρχει ειδικός όρος για να ξεχωρίσει μια τοπική μεταβλητή από ένα πεδίο. Οι τοπικές μεταβλητές ξεχωρίζουν από τα πεδία γιατί ορίζονται μέσα στο block {} των μεθόδων (φώλιασμα), είναι προσβάσιμες μόνο εντός του block που ορίστηκαν και διατηρούν τις τιμές τους μόνο κατά τη διάρκεια της εκτέλεσης μιας μεθόδου.
- Parameters Παράμετροι. Έχουμε ήδη δει παραμέτρους στον ορισμό της μεθόδου main της Hello World εφαρμογής. Θυμηθείτε το όρισμα public static void main(String[] args) όπου η args είναι παράμετρος τύπου String[](εξήγηση αργότερα). Όλες οι παράμετροι είναι μεταβλητές, χρησιμοποιούνται μόνο για να περάσουν τιμές σε μεθόδους και είναι ορατές μόνο στο σώμα της μεθόδου.
Από εδώ και μπρος όποτε αναφερόμαστε σε πεδία δεν εννοούμε ποτέ τοπικές μεταβλητές και παραμέτρους ενώ όταν αναφερόμαστε σε μεταβλητές εννοούμε όλα τα παραπάνω. Επίσης μερικές φορές χρησιμοποιείται ο όρος member (μέλος) μιας κλάσης. Με τον όρο αυτό εννοούμε όλα τα πεδία, μεθόδους και «φωλιασμένα» πεδία μίας κλάσης.
Primitive Data Types (Απλοί Τύποι Δεδομένων)
Ειδαμε στην αρχή της σελίδας πως ορίζουμε ένα πεδίο και κατ' επέκταση μια μεταβλητή. Εδώ παραθέτονται όλες οι απλές μεταβλητές της Java. Οι τύποι μεταβλητών γράφονται με όλους τους χαρακτήρες μικρούς.
Παραδειγμα ορισμού και αρχικοποίησης
boolean result = true;
char capitalC = 'C';
byte b = 100;
short s = 10000;
int i = 100000;
double d1 = 123.4;
// ίδιο με d1, αλλά με επιστημονική έκφραση
d2 = 1.234e2;
float f1 = 123.4f;
boolean result = true;
char capitalC = 'C';
byte b = 100;
short s = 10000;
int i = 100000;
double d1 = 123.4;
// ίδιο με d1, αλλά με επιστημονική έκφραση
d2 = 1.234e2;
float f1 = 123.4f;
Σημειωση: Για την αλλαγή τιμής απο την αρχική η σύνταξη έχει ως εξής στα προηγούμενα παραδείγματα.
result = false;
capitalC = 'A';
b = 200;
s=100;
i=1;
χωρίς να ορίσουμε ξανά τον τύπο της μεταβλητής.
Strings (Κείμενο)
Τα Strings είναι μια σειρά από char και είναι πολύ χρήσιμος τύπος δεδομένων στην Java. Το String δεν αναφέρεται στους απλούς τύπους δεδομένων γιατί απλά δεν είναι απλός τύπος δεδομένων. Από το όνομα του καταλαβαίνουμε ότι αναφερόμαστε σε κλάση αλλά το χρησιμοποιούμε και ως απλό τύπο και ως κλάση.
Δημιουργία ενός String:
String greeting = "Hello world!";
Σε αυτό το παράδειγμα, το "Hello world!" είναι ένα λεκτικό κειμένου- δηλαδή μια σειρά απο χαρακτήρες μέσα στον κώδικά που περικλείονται από εισαγωγικά ( " "). Οταν ο compiler το συναντήσει δημιουργεί ένα αντικείμενο τύπου String με τιμή
"Hello world!".
Όπως και με άλλα αντικείμενα, μπορείτε να δημιουργήσετε αντικείμενα χρησιμοποιώντας την λέξη κλειδί new(Θα εξηγηθεί αναλυτικά σε επόμενο κεφάλαιο):
char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.' };
String helloString = new String(helloArray);
System.out.println(helloString);
Περισσότερα για String εδώ.
http://docs.oracle.com/javase/tutorial/java/data/strings.html
Arrays (Πινακες)
Ένας πίνακας είναι ένα αντικείμενο που μπορεί να αποθηκεύει ένα συγκεκριμένο αριθμό τιμών ενός μόνο τύπου. Το μήκος ενός πίνακα ορίζεται όταν δημιουργείται και παραμένει πάντα σταθερό.
// η παρακάτω κλήση δηλώνει
// ένα πίνακα από ακέραιους
int[] anArray;
result = false;
capitalC = 'A';
b = 200;
s=100;
i=1;
χωρίς να ορίσουμε ξανά τον τύπο της μεταβλητής.
Strings (Κείμενο)
Τα Strings είναι μια σειρά από char και είναι πολύ χρήσιμος τύπος δεδομένων στην Java. Το String δεν αναφέρεται στους απλούς τύπους δεδομένων γιατί απλά δεν είναι απλός τύπος δεδομένων. Από το όνομα του καταλαβαίνουμε ότι αναφερόμαστε σε κλάση αλλά το χρησιμοποιούμε και ως απλό τύπο και ως κλάση.
Δημιουργία ενός String:
String greeting = "Hello world!";
Σε αυτό το παράδειγμα, το "Hello world!" είναι ένα λεκτικό κειμένου- δηλαδή μια σειρά απο χαρακτήρες μέσα στον κώδικά που περικλείονται από εισαγωγικά ( " "). Οταν ο compiler το συναντήσει δημιουργεί ένα αντικείμενο τύπου String με τιμή
"Hello world!".
Όπως και με άλλα αντικείμενα, μπορείτε να δημιουργήσετε αντικείμενα χρησιμοποιώντας την λέξη κλειδί new(Θα εξηγηθεί αναλυτικά σε επόμενο κεφάλαιο):
char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.' };
String helloString = new String(helloArray);
System.out.println(helloString);
Περισσότερα για String εδώ.
http://docs.oracle.com/javase/tutorial/java/data/strings.html
Arrays (Πινακες)
Ένας πίνακας είναι ένα αντικείμενο που μπορεί να αποθηκεύει ένα συγκεκριμένο αριθμό τιμών ενός μόνο τύπου. Το μήκος ενός πίνακα ορίζεται όταν δημιουργείται και παραμένει πάντα σταθερό.
// η παρακάτω κλήση δηλώνει
// ένα πίνακα από ακέραιους
int[] anArray;
Κάθε τιμή του πίνακα ονομάζεται στοιχείο, και κάθε στοιχείο του πίνακα μπορεί να ανασυρθεί από τον πίνακα με το αριθμό του δείκτη του (αριθμός θέσης). Στο παραπάνω παράδειγμα αναπαράστασης ενός πίνακα βλέπουμε ότι οι αριθμοί θέσεων αρχίζουν από το 0, που είναι η θέση του πρώτου στοιχείου, και συνεχίζουν ως το 9, που είναι ο δείκτης του 10ου στοιχείου.
Όπως είπαμε πιο πάνω, ο πίνακας είναι ένα αντικείμενο. Για να τον χρησιμοποιήσουμε καλούμε:
int[] anArray = new int[10];
ή και
int[] anArray = {1,2,3,4,5,6,7,8,9,10};
Στο παρακάτω πρόγραμμα ArrayDemo μπορείτε να δείτε πώς χρησιμοποιείται ένας πίνακας ακεραίων , πώς δημιουργείται, πώς εισαγάγουμε τιμές σε αυτόν και πώς τις ανασύρουμε .
class ArrayDemo {
public static void main(String[] args) {
// δηλώνει ένα πίνακα ακεραίων
int[] anArray;
// δεσμεύει χώρο για 10 ακέραιους
anArray = new int[10];
// αρχικοποίηση πρώτου στοιχείου
anArray[0] = 100;
// αρχικοποίηση δεύτερου στοιχείου
anArray[1] = 200;
// κτλ.
anArray[2] = 300;
anArray[3] = 400;
anArray[4] = 500;
anArray[5] = 600;
anArray[6] = 700;
anArray[7] = 800;
anArray[8] = 900;
anArray[9] = 1000;
System.out.println("Element at index 0: "
+ anArray[0]);
System.out.println("Element at index 1: "
+ anArray[1]);
System.out.println("Element at index 2: "
+ anArray[2]);
System.out.println("Element at index 3: "
+ anArray[3]);
System.out.println("Element at index 4: "
+ anArray[4]);
System.out.println("Element at index 5: "
+ anArray[5]);
System.out.println("Element at index 6: "
+ anArray[6]);
System.out.println("Element at index 7: "
+ anArray[7]);
System.out.println("Element at index 8: "
+ anArray[8]);
System.out.println("Element at index 9: "
+ anArray[9]);
}
}
H έξοδος του προγράμματος έχει ως εξής:
Element at index 0: 100
Element at index 1: 200
Element at index 2: 300
Element at index 3: 400
Element at index 4: 500
Element at index 5: 600
Element at index 6: 700
Element at index 7: 800
Element at index 8: 900
Element at index 9: 1000
Σε επόμενα παραδείγματα θα δούμε πώς χρησιμοποιούμε έναν πίνακα πιο αποτελεσματικά.
Αντίστοιχα δημιουργούμε πίνακες και για τους άλλους τύπους δεδομένων:
byte[] anArrayOfBytes;
short[] anArrayOfShorts;
long[] anArrayOfLongs;
float[] anArrayOfFloats;
double[] anArrayOfDoubles;
boolean[] anArrayOfBooleans;
char[] anArrayOfChars;
String[] anArrayOfStrings;
Το String που είδαμε πιο πάνω είναι στην ουσία ένας πίνακας από χαρακτήρες char[]
char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.' };
Από το παράδειγμα με το String μπορούμε πλέον να υποπτευθούμε ότι μπορεί κανείς να δημιουργήσει πίνακα αντικειμένων. Προηγουμένως αναφέραμε ότι το String είναι κλάση. Στην Java οποιαδήποτε στιγμιότυπο δικής μας κλάσης μπορεί να αποτελέσει στοιχείο ενός πίνακα, πέρα από τους βασικούς τύπους δεδομένων:
Bicycle[] myBicycles;
Τέλος γυρνώντας στο παράδειγμα HelloWorld θυμηθείτε το όρισμα της main που παίρνει ως παράμετρο μια μεταβλητή πίνακα String
public static void main (String args[])
το οποίο θα δούμε αργότερα πώς χρησιμοποιείται.
Περισσότερα για πίνακες εδώ:
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
Σημείωση: Ενας πίνακας έχει όλα τα στοιχεία του ίσα με την κενή τιμή null οταν δημιουργείται.
Όπως είπαμε πιο πάνω, ο πίνακας είναι ένα αντικείμενο. Για να τον χρησιμοποιήσουμε καλούμε:
int[] anArray = new int[10];
ή και
int[] anArray = {1,2,3,4,5,6,7,8,9,10};
Στο παρακάτω πρόγραμμα ArrayDemo μπορείτε να δείτε πώς χρησιμοποιείται ένας πίνακας ακεραίων , πώς δημιουργείται, πώς εισαγάγουμε τιμές σε αυτόν και πώς τις ανασύρουμε .
class ArrayDemo {
public static void main(String[] args) {
// δηλώνει ένα πίνακα ακεραίων
int[] anArray;
// δεσμεύει χώρο για 10 ακέραιους
anArray = new int[10];
// αρχικοποίηση πρώτου στοιχείου
anArray[0] = 100;
// αρχικοποίηση δεύτερου στοιχείου
anArray[1] = 200;
// κτλ.
anArray[2] = 300;
anArray[3] = 400;
anArray[4] = 500;
anArray[5] = 600;
anArray[6] = 700;
anArray[7] = 800;
anArray[8] = 900;
anArray[9] = 1000;
System.out.println("Element at index 0: "
+ anArray[0]);
System.out.println("Element at index 1: "
+ anArray[1]);
System.out.println("Element at index 2: "
+ anArray[2]);
System.out.println("Element at index 3: "
+ anArray[3]);
System.out.println("Element at index 4: "
+ anArray[4]);
System.out.println("Element at index 5: "
+ anArray[5]);
System.out.println("Element at index 6: "
+ anArray[6]);
System.out.println("Element at index 7: "
+ anArray[7]);
System.out.println("Element at index 8: "
+ anArray[8]);
System.out.println("Element at index 9: "
+ anArray[9]);
}
}
H έξοδος του προγράμματος έχει ως εξής:
Element at index 0: 100
Element at index 1: 200
Element at index 2: 300
Element at index 3: 400
Element at index 4: 500
Element at index 5: 600
Element at index 6: 700
Element at index 7: 800
Element at index 8: 900
Element at index 9: 1000
Σε επόμενα παραδείγματα θα δούμε πώς χρησιμοποιούμε έναν πίνακα πιο αποτελεσματικά.
Αντίστοιχα δημιουργούμε πίνακες και για τους άλλους τύπους δεδομένων:
byte[] anArrayOfBytes;
short[] anArrayOfShorts;
long[] anArrayOfLongs;
float[] anArrayOfFloats;
double[] anArrayOfDoubles;
boolean[] anArrayOfBooleans;
char[] anArrayOfChars;
String[] anArrayOfStrings;
Το String που είδαμε πιο πάνω είναι στην ουσία ένας πίνακας από χαρακτήρες char[]
char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.' };
Από το παράδειγμα με το String μπορούμε πλέον να υποπτευθούμε ότι μπορεί κανείς να δημιουργήσει πίνακα αντικειμένων. Προηγουμένως αναφέραμε ότι το String είναι κλάση. Στην Java οποιαδήποτε στιγμιότυπο δικής μας κλάσης μπορεί να αποτελέσει στοιχείο ενός πίνακα, πέρα από τους βασικούς τύπους δεδομένων:
Bicycle[] myBicycles;
Τέλος γυρνώντας στο παράδειγμα HelloWorld θυμηθείτε το όρισμα της main που παίρνει ως παράμετρο μια μεταβλητή πίνακα String
public static void main (String args[])
το οποίο θα δούμε αργότερα πώς χρησιμοποιείται.
Περισσότερα για πίνακες εδώ:
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
Σημείωση: Ενας πίνακας έχει όλα τα στοιχεία του ίσα με την κενή τιμή null οταν δημιουργείται.