This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
|
java:static_keyword [2020/02/21 12:25] gthanos |
java:static_keyword [2022/02/23 18:45] gthanos [Στατικές μεταβλητές της κλάσης] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Στατικές μεταβλητές και μέθοδοι της κλάσης ====== | ====== Στατικές μεταβλητές και μέθοδοι της κλάσης ====== | ||
| - | Μέχρι τώρα είδαμε ότι τα πεδία και οι μέθοδοι ανήκουν στα επιμέρους αντικείμενα της κάθε κλάσης. Εκτός από την παραπάνω θεώρηση είναι δυνατόν να έχουμε πεδία και μεθόδους που δεν ανήκουν σε συγκεκριμένα | + | Μέχρι τώρα είδαμε ότι τα πεδία και οι μέθοδοι ανήκουν στα επιμέρους αντικείμενα της κάθε κλάσης. Εκτός από την παραπάνω θεώρηση είναι δυνατόν να έχουμε πεδία και μεθόδους που δεν ανήκουν σε αντικείμενα της κλάσης, |
| <WRAP tip 80% center round> | <WRAP tip 80% center round> | ||
| - | Εάν τα πεδία ή οι μέθοδοι ανήκουν στη κλάση και όχι στα αντικείμενα της τότε οι μέθοδοι και τα πεδία είναι στατικά για τα αντικείμενα της κλάσης. Για παράδειγμα, αν προσπελάσουμε την τιμή ενός στατικού πεδίου από δύο διαφορετικά αντικείμενα της κλάσης τότε θα διαβάσουμε ακριβώς την ίδια τιμή. | + | Εάν τα πεδία ή οι μέθοδοι ανήκουν στη κλάση και όχι στα αντικείμενα της τότε οι μέθοδοι και τα πεδία είναι κοινά για τα αντικείμενα της κλάσης |
| </ | </ | ||
| Line 16: | Line 16: | ||
| int height; | int height; | ||
| Point origin; | Point origin; | ||
| + | // add an instance variable for the object ID | ||
| + | int id; | ||
| + | | ||
| + | // add a class variable for the | ||
| + | // number of Rectangle objects instantiated | ||
| + | static int numberOfRectangles = 0; | ||
| // the Rectangle class has one constructor | // the Rectangle class has one constructor | ||
| Line 22: | Line 28: | ||
| this.height = height; | this.height = height; | ||
| this.origin = origin; | this.origin = origin; | ||
| + | this.id = ++numberOfRectangles; | ||
| } | } | ||
| - | | ||
| - | // add an instance variable for the object ID | ||
| - | int id; | ||
| | | ||
| - | | + | |
| - | | + | return id; |
| - | static int numberOfRectangles | + | |
| + | |||
| + | | ||
| + | return | ||
| + | } | ||
| + | |||
| | | ||
| /* οι υπόλοιπες εντολές της κλάσης είναι όμοιες | /* οι υπόλοιπες εντολές της κλάσης είναι όμοιες | ||
| Line 38: | Line 47: | ||
| </ | </ | ||
| - | Με τον ορισμό <code java> | + | Με τον ορισμό <code java> |
| Για να προσπελάσουμε την τιμή της συγκεκριμένης μεταβλητής μπορούμε να το κάνουμε με τους εξής δύο τρόπους: | Για να προσπελάσουμε την τιμή της συγκεκριμένης μεταβλητής μπορούμε να το κάνουμε με τους εξής δύο τρόπους: | ||
| Line 44: | Line 53: | ||
| - Με χρήση ενός αντικειμένου ως εξής '' | - Με χρήση ενός αντικειμένου ως εξής '' | ||
| - | Και οι δύο παραπάνω τρόποι προσπέλασης είναι ισοδύναμοι για τον compiler. | + | Και οι δύο παραπάνω τρόποι προσπέλασης είναι ισοδύναμοι για τον compiler. |
| <code java> | <code java> | ||
| Line 99: | Line 108: | ||
| - Με χρήση ενός αντικειμένου ως εξής '' | - Με χρήση ενός αντικειμένου ως εξής '' | ||
| - | Οι στατικές μέθοδοι μπορούν να χρησιμοποιηθούν για να εκτελεστούν εργασίες που δεν συνδέονται με τα δεδομένα της κλάσης. Για παράδειγμα, | + | Οι στατικές μέθοδοι μπορούν να χρησιμοποιηθούν για να εκτελεστούν εργασίες που δεν συνδέονται με τα πεδία και τις μεθόδους των αντικειμένων της κλάσης. Για παράδειγμα, |
| <code java Sort.java> | <code java Sort.java> | ||
| Line 147: | Line 156: | ||
| H δημιουργία σταθερών επιτυγχάνεται με χρήση του συνδυασμού των keywords **static final**. Για παράδειγμα, | H δημιουργία σταθερών επιτυγχάνεται με χρήση του συνδυασμού των keywords **static final**. Για παράδειγμα, | ||
| <code java Circle.java> | <code java Circle.java> | ||
| - | + | class Circle { | |
| - | public | + | |
| static final double PI = 3.141592653589793; | static final double PI = 3.141592653589793; | ||
| - | | + | int radius; |
| | | ||
| - | | + | Circle(int radius) { |
| this.radius = radius; | this.radius = radius; | ||
| } | } | ||
| | | ||
| - | | + | int getRadius() { return radius; } |
| - | | + | void setRadius(int radius) { this.radius = radius; } |
| - | | + | double getArea() { return PI * radius * radius; } |
| - | | + | double getPerimeter() { return 2 * PI * radius; } |
| | | ||
| - | | + | static void main(String []args) { |
| int radius = 3; | int radius = 3; | ||
| Circle circle = new Circle(radius); | Circle circle = new Circle(radius); | ||
| Line 172: | Line 180: | ||
| </ | </ | ||
| - | Παρατηρήστε ότι η σταθερά θα πρέπει να αποτελεί πεδίο κάποιας κλάσης σε αναλογία με τις στατικές μεταβλητές της κλάσης που ορίσαμε παραπάνω και δεν μπορεί να οριστεί αυτόνομα. | + | Παρατηρήστε ότι η σταθερά θα πρέπει να αποτελεί πεδίο κάποιας κλάσης, σε αναλογία με τις στατικές μεταβλητές της κλάσης που ορίσαμε παραπάνω και δεν μπορεί να οριστεί αυτόνομα. |
| |Προηγούμενο: | |Προηγούμενο: | ||