java:static_keyword
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
java:static_keyword [2016/02/19 13:35] – Added link for toc doufexi | java:static_keyword [2022/02/23 18:57] (current) – [Χρήση σταθερών - Constants] gthanos | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Στατικές μεταβλητές και μέθοδοι της κλάσης ====== | ====== Στατικές μεταβλητές και μέθοδοι της κλάσης ====== | ||
- | Μέχρι τώρα είδαμε ότι τα αντικείμενα αποτελούν υλοποιήσεις της | + | Μέχρι τώρα είδαμε ότι τα πεδία και οι μέθοδοι ανήκουν |
- | Εκτός από την παραπάνω θεώρηση είναι δυνατόν να έχουμε | + | <WRAP tip 80% center round> |
- | + | Εάν τα πεδία | |
- | Σε αυτή τη σελίδα αναλύουμε την χρήση του keyword **static** για την δημιουργία στατικών πεδίων και μεθόδων που ανήκουν στην κλάση και όχι σε συγκεκριμένα αντικείμενα της κλάσης. | + | </ |
===== Στατικές μεταβλητές της κλάσης ===== | ===== Στατικές μεταβλητές της κλάσης ===== | ||
Line 11: | Line 11: | ||
Ας θεωρήσουμε το παρακάτω παράδειγμα από τον κώδικα του παραλληλόγραμμου. | Ας θεωρήσουμε το παρακάτω παράδειγμα από τον κώδικα του παραλληλόγραμμου. | ||
<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, int height, Point origin) { |
this.width = width; | this.width = width; | ||
this.height = height; | this.height = height; | ||
this.origin = origin; | this.origin = origin; | ||
+ | this.id = ++numberOfRectangles; | ||
} | } | ||
- | | ||
- | // add an instance variable for the object ID | ||
- | private int id; | ||
| | ||
- | | + | |
- | | + | return id; |
- | | + | |
+ | |||
+ | | ||
+ | return | ||
+ | } | ||
+ | |||
| | ||
/* οι υπόλοιπες εντολές της κλάσης είναι όμοιες | /* οι υπόλοιπες εντολές της κλάσης είναι όμοιες | ||
Line 38: | Line 47: | ||
</ | </ | ||
- | Με τον ορισμό <code java> | + | Με τον ορισμό <code java> |
Για να προσπελάσουμε την τιμή της συγκεκριμένης μεταβλητής μπορούμε να το κάνουμε με τους εξής δύο τρόπους: | Για να προσπελάσουμε την τιμή της συγκεκριμένης μεταβλητής μπορούμε να το κάνουμε με τους εξής δύο τρόπους: | ||
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, int height, Point origin) { |
this.width = width; | this.width = width; | ||
this.height = height; | this.height = height; | ||
Line 61: | Line 70: | ||
| | ||
// 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 81: | Line 90: | ||
} | } | ||
</ | </ | ||
- | /* | + | |
- | Μπορείτε να κατεβάσετε τον πλήρη κώδικα της κλάσης μαζί με ένα παράδειγμα εκτέλεσης εδώ {{:java:bicycle-with-static-field.zip|}}. | + | Μπορείτε να κατεβάσετε τον πλήρη κώδικα της κλάσης εδώ {{:java:rectangle_example_with_static.zip|}}. |
- | */ | + | |
===== Στατικές μέθοδοι της κλάσης ===== | ===== Στατικές μέθοδοι της κλάσης ===== | ||
- | Σε αναλογία με τις μεταβλητές της κλάσης μπορούμε να έχουμε και μεθόδους | + | Σε αναλογία με τις στατικές μεταβλητές της κλάσης μπορούμε να έχουμε και |
<code java> | <code java> | ||
- | public | + | static int getNumberOfRectangles() { |
return numberOfRectangles; | return numberOfRectangles; | ||
} | } | ||
Line 99: | Line 108: | ||
- Με χρήση ενός αντικειμένου ως εξής '' | - Με χρήση ενός αντικειμένου ως εξής '' | ||
- | Οι στατικές μέθοδοι μπορούν να χρησιμοποιηθούν για να εκτελεστούν εργασίες που δεν συνδέονται με τα δεδομένα της κλάσης. Για παράδειγμα, | + | Οι στατικές μέθοδοι μπορούν να χρησιμοποιηθούν για να εκτελεστούν εργασίες που δεν συνδέονται με τα πεδία και τις μεθόδους των αντικειμένων της κλάσης. |
+ | |||
+ | Για παράδειγμα, | ||
<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 118: | 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 (0 - 100) | ||
Line 138: | 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(" | ||
+ | } | ||
+ | } | ||
</ | </ | ||
- | Η σταθερά | + | H σταθερά |
|Προηγούμενο: | |Προηγούμενο: |
java/static_keyword.1455888922.txt.gz · Last modified: 2016/02/19 13:35 by doufexi