BETA

Μαθαίνοντας την Java-LANGUAGE FUNDAMENTALS [μάθημα 6]

Εικόνα Michail

Συνεχίζουμε τα μαθήματα εκμάθησης της Java, έχοντας ήδη κάνει το πρώτο εισαγωγικό μάθημα και έχοντας δει,πως μπορουμε να εγκαταστήσουμε το NetBeans, προκειμένου να δημιουργήσουμε τις εφαρμογές μας και στη συνεχεια δημιουργώντας την πρωτη μας εφαρμογή.
Έχοντας δει κιόλας, σχετικά με τα LANGUAGE FUNDAMENTALS και τα σχετικά με την ονομασία των μεταβλητών, πάμε σήμερα να δούμε τις integer data types μεταβλητές.
[box color=blue]Σε αυτή την φάση για τα εκπαιδευτικά μαθήματα χρησιμοποιούμε το λειτουργικό σύστημα Windows, μα οι διαφορές είναι ελάχιστες, ως μηδαμινές και στα υπόλοιπα λειτουργικά[/box]
Στο προηγούμενο μάθημα μιλήσαμε γενικά για τις μεταβλητές και τον σωστό τρόπο ονομασίας τους.
Όμως ένας ολοκληρωμένος και σωστά αποδεκτός από την Java τρόπος ορίσματος μιας μεταβλητής περιλαμβάνει τόσο την σωστή ονομασία της μεταβλητής όσο και το είδος των δεδομένων που επιτρέπεται να αποθηκεύσει.
Στο σημερινό μάθημα θα αναφερθούμε στις integer data types μεταβλητές που μας δίνουν την δυνατότητα να αποθηκεύσουμε ακέραιους αριθμούς στο πρόγραμμα μας.
Αν και βρισκόμαστε στο κεφάλαιο Primitive Data Types του online tutorial της java, δεν θα το αναλύσουμε ολοκληρωτικά σήμερα, αλλά θα διαιρέσουμε το κεφάλαιο σε μικρότερες ενότητες έτσι ώστε να μπορέσουμε να δώσουμε επεξηγηματικά παραδείγματα που θα κάνουν ευκολότερη την κατανόηση της θεωρίας.

Η Java θεωρείται strongly-typed γλώσσα προγραμματισμού που σημαίνει ότι όλες οι μεταβλητές που πρόκειται να χρησιμοποιηθούν στο πρόγραμμα μας πρέπει πρώτα να οριστούν σωστά πριν τις καλέσουμε.
Αυτό σημαίνει ότι απαιτείται να δηλώσουμε το όνομα της μεταβλητής και μετά το είδος της πληροφορίας την οποία θα μπορεί να αποθηκεύσει και να διαχειριστεί. Ένα απλό παράδειγμα είναι το εξής:

int gear = 1;

Αυτή την δήλωση της μεταβλητής, ο compiler της Java το καταλαβαίνει ως μια μεταβλητή με το όνομα “gear”, η οποία δέχεται αποκλειστικά ακέραιους αριθμούς (int) και έχει αρχική τιμή ίσον με 1.
Το να δώσουμε αρχική τιμή στην μεταβλητή μας είναι εντελώς προαιρετικό.
Ο ορισμός της μεταβλητής σαν int (ακέραιος) δηλώνει όχι μόνο το είδος των αριθμών που μπορούν να αποθηκευτούν, αλλά και τι είδους πράξεις μπορούμε να κάνουμε με την ίδια την μεταβλητή.
Στην προκειμένη περίπτωση μπορούμε να εκτελέσουμε αριθμητικές πράξεις (πρόσθεση, αφαίρεση, κτλ).
Αν για παράδειγμα η μεταβλητή είχε οριστεί να αποθηκεύει ονόματα πελατών (String data type) τότε θα μπορούσαμε να εκτελέσουμε απλά κάποιες ενέργειες καταχώρισης και ταξινόμησης ονομάτων παρά αριθμητικών πράξεων.

Υπάρχουν συνολικά οκτώ διαφορετικές κατηγορίες (data types) που μπορούμε να χρησιμοποιήσουμε για την αποθήκευση δεδομένων.
Ονομαστικά αυτές οι κατηγορίες είναι: byte, short, int, long, float, double, boolean και char.
Ονομάζονται primitive data types γιατί είναι προκαθορισμένα ήδη από την ίδια την αρχιτεκτονική δομή της java και δεν έχουν τις δυνατότητες του αντικειμενοστραφή προγραμματισμού.
Οι διαφορές θα γίνουν πιο εμφανής όταν φτάσουμε στην ενότητα που θα αναλύσουμε τις κλάσεις και τα παράγωγά τους που είναι τα αντικείμενα.
Στην σημερινή ενότητα θα ασχοληθούμε με τις τέσσερις κατηγορίες που αναφέρονται αποκλειστικά στους ακέραιους αριθμούς: byte, short, int και long.

Ας ρίξουμε μια γρήγορη ματιά στα integer data types, στον αριθμό των bits που χρησιμοποιούν για να αποθηκεύσουν αριθμούς και το εύρος τιμών που έχουν την δυνατότητα να επικαλεστούν.
Οι τέσσερις κατηγορίες των ακεραίων αριθμών είναι signed – δηλαδή μπορούν να αποθηκεύσουν και αρνητικές όσο και θετικές τιμές αριθμών.
Διαφέρουν όμως μεταξύ τους στο εύρος των τιμών που μπορούν να δεχτούν οπότε η απόφαση για το πιο είδος αριθμών είναι κατάλληλο για το πρόγραμμα μας βασίζεται στο εύρος των αριθμών που χρειάζεται να καλύψουμε.

Το πλεονέκτημα που έχει η Java είναι ότι το εύρος των integer type αριθμών δεν εξαρτάται από τον υπολογιστή στον οποίο τρέχει το πρόγραμμα.
Αυτό εξαλείφει τα προβλήματα που τυχόν μπορεί να υπάρξουν κατά την μετακίνηση ή εγκατάσταση εφαρμογής σε διαφορετικές πλατφόρμες ή διαφορετικά λειτουργικά συστήματα.

Ας πάμε πίσω να μιλήσουμε για τις μεταβλητές και να ολοκληρώσουμε τον ορισμό τους.
Στην Java, κάθε μεταβλητή πρέπει να δηλώνεται και αυτό περιλαμβάνει δύο βήματα – το όνομα της μεταβλητής και το είδος των δεδομένων το οποίο θα αποθηκεύει. Πιο κάτω ακολουθούν παραδείγματα δηλώσεων μεταβλητών

int x;

long salary;

Ο όρος μεταβλητή χρησιμοποιείται διότι τα δεδομένα που αποθηκεύει μπορεί να αλλάξουν.
Με άλλα λόγια, επιτρέπεται να αλλάξετε την αρχική τιμή που δώσατε την μεταβλητή οποιαδήποτε στιγμή κατά την διάρκεια εκτέλεσης του προγράμματος. Ο τελεστής = χρησιμοποιείται για την ανάθεση τιμής σε μεταβλητή.
Το πιο κάτω παράδειγμα δηλώνει την μεταβλητή x και αναθέτει σε αυτήν την αρχική τιμή 12.

int x;

x=12;

Μπορούμε επίσης να δηλώσουμε και να αναθέσουμε τιμή στην ίδια γραμμή κώδικα.

int x = 12;

Η Java έχει προκαθορίσει ότι κάθε αριθμός ορίζεται ως ακολουθία δεκαδικών ψηφίων είναι είδος int.
Εάν θέλουμε να ορίσουμε ένα ακέραιο αριθμό είδος long θα πρέπει να προσθέσουμε το γράμμα L στο τέλος του αριθμού – πχ 123456789L.
Ας προσέξουμε λίγο αυτό το σημείο, γιατί ένας ακέραιος αριθμός χωρίς κατάληξη L θεωρείται int από την java.
Αυτό σημαίνει ότι ο αριθμός 99885577668888 θα προκαλέσει λάθος στο πρόγραμμα σας γιατί θα θεωρηθεί σαν int έξω από το επιτρεπτό όριο των int αριθμών που μπορεί να καταχωρήσει η Java.

long x = 99885577668888; //wrong!!

Για να διορθώσετε το πρόβλημα προσθέστε το L στο τέλος του αριθμού

long x = 99885577668888L; //correct!!

Σημειώστε επίσης ότι εάν προσπαθήσετε να χρησιμοποιήσετε μια μεταβλητή σε ένα υπολογισμό που δεν της έχει ακόμα ανατεθεί τιμή, τότε ο compiler της java θα παραπονεθεί και το πρόγραμμα σας δεν θα εκτελεστεί.
Μπορείτε να δηλώσετε μια μεταβλητή οπουδήποτε θελήσετε μέσα στο πρόγραμμα σας, αρκεί να έχει οριστεί πριν την καλέσετε για υπολογισμό.
Τέλος, φροντίστε κατά την ανάθεση τιμών σε μεταβλητές να μην ξεπερνάτε το εύρος που ορίζει το κάθε data type. Για παράδειγμα εάν ορίσετε μια μεταβλητή σαν byte που έχει ανώτατο όριο το 127 και αναθέσετε μια τιμή 500 σε αυτήν τότε ο compiler θα δηλώσει σφάλμα γιατί ο αριθμός 500 δεν είναι αποδεκτός για το byte data type.

byte x = 500; //wrong!!

Ας δούμε ένα ολοκληρωμένο java πρόγραμμα που δηλώνει ξεκάθαρα την χρήση των integral types.

Line 8 – Αναθέτουμε τον αριθμό 250 σε μια int μεταβλητή με το όνομα x.

Line 9 – Εμφανίζουμε την τρέχουμε τιμή της μεταβλητής x.

Line 11- Μπορούμε να δηλώσουμε περισσότερες από μια μεταβλητή στην ίδια δήλωση αρκεί οι μεταβλητές να ανήκουν στο ίδιο data type.

Line 14 – Ας μην ξεχνάμε ότι η Java πάντα εκτελεί αριθμητικές πράξεις σε int επίπεδο.
Με αυτή την λογική η πρόσθεση b+c επιστρέφει int τιμή. Αυτό σημαίνει ότι αποτέλεσμα της πρόσθεσης πρέπει να το μετατρέψουμε (cast) σε int τιμή πριν το αναθέσουμε στην μεταβλητή a που αναμένει μια short τιμή και όχι int.
Ο τελεστής cast λειτουργεί ως εξής: μπροστά από την τιμή που θέλουμε να μετατρέψουμε βάζουμε σε παρένθεση το καινούργιο data type στο οποίο θέλουμε να αλλάξει η τιμή πριν ανατεθεί στην μεταβλητή.
Στο συγκεκριμένο παράδειγμα το αποτέλεσμα της πρόσθεσης (b+c) από int έπρεπε να αλλάξει σε short πριν αναθέσουμε την τιμή στην μεταβλητή a.

Line 17 – Η μεταβλητή y έχει δηλωθεί σαν long και έχει τιμή που περιγράφεται με περισσότερα από 32 bits.
Οπότε στην τιμή προσθέτουμε το γράμμα L για να δηλώσουμε ότι η τιμή πρέπει να ληφθεί σαν long.

Line 21 – Η μεταβλητή y είναι είδος long ενώ η μεταβλητή x είναι είδος int.
Αν και αυτές οι δύο μεταβλητές έχουν διαφορετικά data types δεν χρησιμοποιείται η διαδικασία του casting.
Αυτό συμβαίνει γιατί ένας αριθμός είδους int (32 bits) χωράει σε έναν αριθμό long (64 bits) χωρίς καμία απώλεια δεδομένων. Όταν αναθέτουμε την τιμή της μεταβλητής x στην τιμή του y, η τιμή του x αυτόματα μετατρέπεται και αποθηκεύεται σαν long.

Line 23 – Η διαδικασία ανάθεση της τιμής της μεταβλητής short c στην byte s θα χρειαστεί το τελεστή cast. Η short c μεταβλητή είναι 16 its και η byte s είναι μόνο 8 bits οπότε υπάρχει κίνδυνος απώλειας δεδομένων.

Στην εμπειρία σας σαν προγραμματιστής, το δεκαδικό σύστημα πολύ πιθανόν να είναι το μόνο σύστημα αριθμών που θα χρειαστείτε για να αναπτύξετε τις εφαρμογές σας.
Ωστόσο, εάν θέλετε να χρησιμοποιήσετε και άλλο αριθμητικό σύστημα μπορείτε κάλλιστα να το κάνετε με την Java 7.
Το πρόθεμα 0x δηλώνει δεκαεξαδικό αριθμό και το 0b δυαδικό αριθμό.

int decVal = 26; //The number 26, in decimal

int hexVal = 0x1a; //The number 26, in hexadecimal

int binVal = 0b11010; //The number 26, in binary

  • Δεκαδικό: είναι αριθμητικό σύστημα με βάση το 10 και με εύρος αριθμών από το 0 μέχρι το 9.
    Αυτό είναι το καθημερινό μας αριθμητικό σύστημα.
  • Δεκαεξαδικό: είναι αριθμητικό σύστημα με βάση το 16 και αποτελείται από τους αριθμούς από 0 έως 9 και από το A μέχρι το F.
  • Δυαδικό: είναι αριθμητικό σύστημα με βάση το 2 και αποτελείται αποκλειστικά από τους αριθμούς 0 και 1. Με την Java 7 μπορείτε να δημιουργήσετε binary αριθμούς.

Μιχάλης Κασάπογλου(http://kassapoglou.com)

  • Σχόλια

0 Comments:

Scroll to Top