This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
|
java:static_keyword [2016/02/10 08:07] gthanos [Στατικές μέθοδοι της κλάσης] |
java:static_keyword [2022/02/23 18:56] gthanos [Συνδυασμοί πρόσβασης στατικών/μη στατικών πεδίων από στατικές/μη στατικές μεθόδους] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Στατικές μεταβλητές και μέθοδοι της κλάσης ====== | ====== Στατικές μεταβλητές και μέθοδοι της κλάσης ====== | ||
| - | Μέχρι τώρα είδαμε ότι τα αντικείμενα αποτελούν υλοποιήσεις της | + | Μέχρι τώρα είδαμε ότι τα πεδία και οι μέθοδοι ανήκουν |
| - | Εκτός από την παραπάνω θεώρηση είναι δυνατόν να έχουμε | + | <WRAP tip 80% center round> |
| - | + | Εάν τα πεδία | |
| - | Σε αυτή τη σελίδα αναλύουμε την χρήση του keyword **static** για την δημιουργία στατικών πεδίων και μεθόδων που ανήκουν στην κλάση και όχι σε συγκεκριμένα αντικείμενα της κλάσης. | + | </ |
| ===== Στατικές μεταβλητές της κλάσης ===== | ===== Στατικές μεταβλητές της κλάσης ===== | ||
| - | Ας θεωρήσουμε το παρακάτω παράδειγμα από τον κώδικα του ποδηλάτου. | + | Ας θεωρήσουμε το παρακάτω παράδειγμα από τον κώδικα του παραλληλόγραμμου. |
| <code java> | <code java> | ||
| - | public | + | class Rectangle { |
| - | | + | int width; |
| - | | + | int height; |
| - | | + | 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 | ||
| - | | + | Rectangle(int |
| - | width = setWidth; | + | |
| - | height = setHeight; | + | |
| - | origin = o; | + | |
| + | this.id = ++numberOfRectangles; | ||
| } | } | ||
| - | | ||
| - | // add an instance variable for the object ID | ||
| - | private int id; | ||
| | | ||
| - | | + | |
| - | | + | return id; |
| - | | + | |
| + | |||
| + | | ||
| + | return | ||
| + | } | ||
| + | |||
| | | ||
| /* οι υπόλοιπες εντολές της κλάσης είναι όμοιες | /* οι υπόλοιπες εντολές της κλάσης είναι όμοιες | ||
| Line 38: | Line 47: | ||
| </ | </ | ||
| - | Προσθέτοντας την | + | Με τον |
| Για να προσπελάσουμε την τιμή της συγκεκριμένης μεταβλητής μπορούμε να το κάνουμε με τους εξής δύο τρόπους: | Για να προσπελάσουμε την τιμή της συγκεκριμένης μεταβλητής μπορούμε να το κάνουμε με τους εξής δύο τρόπους: | ||
| Line 44: | Line 53: | ||
| - Με χρήση ενός αντικειμένου ως εξής '' | - Με χρήση ενός αντικειμένου ως εξής '' | ||
| - | Και οι δύο παραπάνω τρόποι προσπέλασης είναι ισοδύναμοι για τον compiler. | + | Και οι δύο παραπάνω τρόποι προσπέλασης είναι ισοδύναμοι για τον compiler. |
| <code java> | <code java> | ||
| - | public | + | class Rectangle { |
| - | | + | int width; |
| - | | + | int height; |
| - | | + | Point origin; |
| // the Rectangle class has one constructor | // the Rectangle class has one constructor | ||
| - | | + | Rectangle(int |
| - | width = setWidth; | + | |
| - | height = setHeight; | + | |
| - | origin = o; | + | |
| } | } | ||
| | | ||
| // add an instance variable for the object ID | // add an instance variable for the object ID | ||
| - | | + | int id; |
| | | ||
| // add a class variable for the | // add a class variable for the | ||
| // number of Rectangle objects instantiated | // number of Rectangle objects instantiated | ||
| - | | + | static int numberOfRectangles = 0; |
| - | | + | int getID() { |
| return id; | return id; | ||
| } | } | ||
| - | | + | static int getNumberOfRectangles() { |
| return numberOfRectangles; | return numberOfRectangles; | ||
| } | } | ||
| Line 82: | Line 91: | ||
| </ | </ | ||
| - | Μπορείτε να κατεβάσετε τον πλήρη κώδικα της κλάσης μαζί με ένα παράδειγμα εκτέλεσης εδώ {{:java:bicycle-with-static-field.zip|}}. | + | Μπορείτε να κατεβάσετε τον πλήρη κώδικα της κλάσης εδώ {{:java:rectangle_example_with_static.zip|}}. |
| ===== Στατικές μέθοδοι της κλάσης ===== | ===== Στατικές μέθοδοι της κλάσης ===== | ||
| - | Σε αναλογία με τις μεταβλητές της κλάσης μπορούμε να έχουμε και μεθόδους | + | Σε αναλογία με τις στατικές μεταβλητές της κλάσης μπορούμε να έχουμε και |
| <code java> | <code java> | ||
| - | public | + | static int getNumberOfRectangles() { |
| return numberOfRectangles; | return numberOfRectangles; | ||
| } | } | ||
| </ | </ | ||
| - | Για να καλέσουμε στατικές μεθόδους σε αναλογία με τα πεδία έχουμε τις εξής επιλογές | + | Για να καλέσουμε στατικές μεθόδους σε αναλογία με τα πεδία έχουμε τις εξής επιλογές: |
| - | - Με χρήση του ονόματος της κλάσης '' | + | - Με χρήση του ονόματος της κλάσης '' |
| - | - Με χρήση ενός αντικειμένου ως εξής '' | + | - Με χρήση ενός αντικειμένου ως εξής '' |
| - | Οι στατικές μέθοδοι μπορούν να χρησιμοποιηθούν για να εκτελεστούν εργασίες που δεν συνδέονται με τα δεδομένα της κλάσης. Για παράδειγμα, | + | Οι στατικές μέθοδοι μπορούν να χρησιμοποιηθούν για να εκτελεστούν εργασίες που δεν συνδέονται με τα πεδία και τις μεθόδους των αντικειμένων της κλάσης. |
| + | |||
| + | Για παράδειγμα, | ||
| <code java Sort.java> | <code java Sort.java> | ||
| - | public | + | class Sort { |
| - | | + | |
| String temp; | String temp; | ||
| for(int i=left; i<right; i++) { | for(int i=left; i<right; i++) { | ||
| Line 117: | Line 129: | ||
| </ | </ | ||
| - | Επίσης, μέσα σε μία στατική μέθοδο μπορούμε να δημιουργήσουμε αντικείμενα οποιασδήποτε κλάσης. Παράδειγμα στατικής μεθόδου είναι η μέθοδος **main()** από την οποία ξεκινάει κάθε πρόγραμμα. Δείτε την παρακάτω μέθοδο η οποία παράγει αρχικοποιημένα με τυχαίες τιμές | + | Επιπλέον, μέσα σε μία στατική μέθοδο μπορούμε να δημιουργήσουμε αντικείμενα οποιασδήποτε κλάσης. Παράδειγμα στατικής μεθόδου είναι η μέθοδος **main()** από την οποία ξεκινάει κάθε πρόγραμμα. Δείτε την παρακάτω μέθοδο η οποία παράγει |
| <code java> | <code java> | ||
| - | /* η παράμετρος seed αρχικοποιεί την γεννήτρια τυχαίων | + | /* η παράμετρος seed αρχικοποιεί την γεννήτρια τυχαίων αριθμών. |
| - | | + | |
| */ | */ | ||
| - | public | + | static Rectangle randomRectangle(int seed) { |
| java.util.Random rand = new java.util.Random(seed); | java.util.Random rand = new java.util.Random(seed); | ||
| - | // εύρος τιμής randWidth 0 - 100 | + | // εύρος τιμής randWidth |
| int randWidth = rand.nextInt(100); | int randWidth = rand.nextInt(100); | ||
| - | // εύρος τιμής randHeight 0 - 100 | + | // εύρος τιμής randHeight |
| int randHeight = rand.nextInt(100); | int randHeight = rand.nextInt(100); | ||
| Rectangle rect = new Rectangle(randWidth, | Rectangle rect = new Rectangle(randWidth, | ||
| Line 137: | Line 148: | ||
| Συνολικά οι επιτρεπόμενοι συνδυασμοί μεταξύ στατικών και μη στατικών μεθόδων και μεταβλητών είναι οι εξής: | Συνολικά οι επιτρεπόμενοι συνδυασμοί μεταξύ στατικών και μη στατικών μεθόδων και μεταβλητών είναι οι εξής: | ||
| - | * Μη στατικές μέθοδοι **ΜΠΟΡΟΥΝ** να προσπελάσουν μη στατικά πεδία. | + | |
| - | * Μη στατικές μέθοδοι **ΜΠΟΡΟΥΝ** να προσπελάσουν | + | | ^ Στατικά πεδία |
| - | | + | ^ Στατικές |
| - | | + | ^ Μη Στατικές |
| - | * το παραπάνω είναι | + | |
| ===== Χρήση σταθερών - Constants ===== | ===== Χρήση σταθερών - Constants ===== | ||
| - | H δημιουργία σταθερών επιτυγχάνεται με χρήση του συνδυασμού των keywords **static final**. Για παράδειγμα, | + | H δημιουργία σταθερών επιτυγχάνεται με χρήση του συνδυασμού των keywords **static final**. Για παράδειγμα, |
| - | <code java> | + | < |
| - | static final double PI = 3.141592653589793; | + | class Circle { |
| + | | ||
| + | int radius; | ||
| + | |||
| + | Circle(int 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; | ||
| + | Circle circle = new Circle(radius); | ||
| + | System.out.println(" | ||
| + | System.out.println(" | ||
| + | System.out.println(" | ||
| + | } | ||
| + | } | ||
| </ | </ | ||
| - | Η σταθερά θα πρέπει να ανήκει σε μία κλάση σε αναλογία με τις στατικές μεταβλητές της κλάσης που ορίσαμε παραπάνω και δεν μπορεί να οριστεί αυτόνομα. | + | Παρατηρήστε ότι η σταθερά θα πρέπει να αποτελεί πεδίο κάποιας κλάσης, σε αναλογία με τις στατικές μεταβλητές της κλάσης που ορίσαμε παραπάνω και δεν μπορεί να οριστεί αυτόνομα. |
| - | |Προηγούμενο: | + | |Προηγούμενο: |