| Both sides previous revision
Previous revision
Next revision
|
Previous revision
Next revision
Both sides next revision
|
java:static_keyword [2022/02/23 18:20] gthanos [Στατικές μεταβλητές και μέθοδοι της κλάσης] |
java:static_keyword [2022/02/23 18:45] gthanos [Στατικές μεταβλητές της κλάσης] |
| 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 |
| 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; | |
| | |
| // add a class variable for the | public int getID() { |
| // number of Rectangle objects instantiated | return id; |
| static int numberOfRectangles = 0; | } |
| | |
| | public static int getNumberOfRectangles() { |
| | return numberOfRectangles; |
| | } |
| | |
| | |
| /* οι υπόλοιπες εντολές της κλάσης είναι όμοιες | /* οι υπόλοιπες εντολές της κλάσης είναι όμοιες |
| </code> | </code> |
| |
| Με τον ορισμό <code java>private static int numberOfRectangles = 0;</code> δημιουργούμε μία μεταβλητή που έχει ενιαία τιμή για όλα τα αντικείμενα της κλάσης. Η μεταβλητή αυτή δεν ανήκει σε κάποιο από τα αντικείμενα, αλλά ΜΟΝΟ στην κλάση. Για τα αντικείμενα της κλάσης **Rectangle**, η συγκεκριμένη μεταβλητή μπορεί να θεωρηθεί στατική (για αυτό και η χρήση του //keyword static//). | Με τον ορισμό <code java>private static int numberOfRectangles = 0;</code> δημιουργούμε μία μεταβλητή που έχει ενιαία τιμή για όλα τα αντικείμενα της κλάσης. Η μεταβλητή αυτή δεν ανήκει σε κάποιο από τα αντικείμενα, αλλά ΜΟΝΟ στην κλάση. Για τα αντικείμενα της κλάσης **Rectangle**, η συγκεκριμένη μεταβλητή είναι κοινή. |
| |
| Για να προσπελάσουμε την τιμή της συγκεκριμένης μεταβλητής μπορούμε να το κάνουμε με τους εξής δύο τρόπους: | Για να προσπελάσουμε την τιμή της συγκεκριμένης μεταβλητής μπορούμε να το κάνουμε με τους εξής δύο τρόπους: |
| - Με χρήση ενός αντικειμένου ως εξής ''Rectangle myRectangle = new Rectangle(); myRectangle.numberOfRectangles++;''. | - Με χρήση ενός αντικειμένου ως εξής ''Rectangle myRectangle = new Rectangle(); myRectangle.numberOfRectangles++;''. |
| |
| Και οι δύο παραπάνω τρόποι προσπέλασης είναι ισοδύναμοι για τον compiler. Ο 2ος τρόπος προσπέλασης **ΔΕΝ** συνιστάται, καθώς διαβάζοντας τον κώδικα δεν είναι σαφές αν πρόκειται για μεταβλητή που ανήκει στην κλάση ή στο αντικείμενο. Αντίθετα, ο 1ος τρόπος αφορά αποκλειστικά μεταβλητές που ανήκουν στην κλάση και για αυτό θεωρείται ορθότερος. Δείτε τον κώδικα της κλάσης **Rectangle** όπως διαμορφώνεται με την χρήση των δύο επιπλέον πεδίων και την καταγραφή του αριθμού των αντικειμένων που δημιουργούνται. | Και οι δύο παραπάνω τρόποι προσπέλασης είναι ισοδύναμοι για τον compiler. Όμως, ο 2ος τρόπος προσπέλασης **ΔΕΝ** συνιστάται, καθώς διαβάζοντας τη συγκεκριμένη γραμμή δεν είναι σαφές αν πρόκειται για μεταβλητή που ανήκει στην κλάση ή στο αντικείμενο. Αντίθετα, ο πρώτος τρόπος αφορά μεταβλητές που ανήκουν στην κλάση και για αυτό θεωρείται ορθότερος. Δείτε τον κώδικα της κλάσης **Rectangle** όπως διαμορφώνεται με την χρήση των δύο επιπλέον πεδίων και την καταγραφή του αριθμού των αντικειμένων που δημιουργούνται. |
| |
| <code java> | <code java> |
| - Με χρήση ενός αντικειμένου ως εξής ''Rectangle myRectangle = new Rectangle(); myRectangle.getNumberOfRectangles();'' | - Με χρήση ενός αντικειμένου ως εξής ''Rectangle myRectangle = new Rectangle(); myRectangle.getNumberOfRectangles();'' |
| |
| Οι στατικές μέθοδοι μπορούν να χρησιμοποιηθούν για να εκτελεστούν εργασίες που δεν συνδέονται με τα δεδομένα της κλάσης. Για παράδειγμα, η παρακάτω στατική μέθοδος υλοποιεί τον αλγόριθμο ταξινόμησης Bubble Sort μέσα σε μία κλάση με το όνομα Sort. Ο πίνακας προς ταξινόμηση και τα όρια ταξινόμησης του πίνακα λαμβάνονται ως ορίσματα στη μέθοδο. Η μέθοδος δε χρειάζεται να έχει πρόσβαση σε πεδία της κλάσης και για αυτό μπορεί να δηλωθεί ως στατική. | Οι στατικές μέθοδοι μπορούν να χρησιμοποιηθούν για να εκτελεστούν εργασίες που δεν συνδέονται με τα πεδία και τις μεθόδους των αντικειμένων της κλάσης. Για παράδειγμα, η παρακάτω στατική μέθοδος υλοποιεί τον αλγόριθμο ταξινόμησης Bubble Sort μέσα σε μία κλάση με το όνομα Sort. Ο πίνακας προς ταξινόμηση και τα όρια ταξινόμησης του πίνακα λαμβάνονται ως ορίσματα στη μέθοδο. Η μέθοδος δε χρειάζεται να έχει πρόσβαση σε πεδία της κλάσης και για αυτό μπορεί να δηλωθεί ως στατική. |
| |
| <code java Sort.java> | <code java Sort.java> |