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 [2018/02/07 14:29] – [Στατικές μέθοδοι της κλάσης] gthanos | java:static_keyword [2022/02/23 18:57] (current) – [Χρήση σταθερών - Constants] gthanos | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Στατικές μεταβλητές και μέθοδοι της κλάσης ====== | ====== Στατικές μεταβλητές και μέθοδοι της κλάσης ====== | ||
- | Μέχρι τώρα είδαμε ότι τα πεδία και οι μέθοδοι ανήκουν στα επιμέρους αντικείμενα της κάθε κλάσης. Εκτός από την παραπάνω θεώρηση είναι δυνατόν να έχουμε πεδία και μεθόδους που δεν ανήκουν σε συγκεκριμένα | + | Μέχρι τώρα είδαμε ότι τα πεδία και οι μέθοδοι ανήκουν στα επιμέρους αντικείμενα της κάθε κλάσης. Εκτός από την παραπάνω θεώρηση είναι δυνατόν να έχουμε πεδία και μεθόδους που δεν ανήκουν σε αντικείμενα της κλάσης, |
<WRAP tip 80% center round> | <WRAP tip 80% center round> | ||
- | Εάν τα πεδία ή οι μέθοδοι ανήκουν στη κλάση και όχι στα αντικείμενα της τότε οι μέθοδοι και τα πεδία είναι στατικά για τα αντικείμενα της κλάσης. Για παράδειγμα, αν προσπελάσουμε την τιμή ενός στατικού πεδίου από δύο διαφορετικά αντικείμενα της κλάσης τότε θα διαβάσουμε ακριβώς την ίδια τιμή. | + | Εάν τα πεδία ή οι μέθοδοι ανήκουν στη κλάση και όχι στα αντικείμενα της τότε οι μέθοδοι και τα πεδία είναι κοινά για τα αντικείμενα της κλάσης |
</ | </ | ||
+ | |||
===== Στατικές μεταβλητές της κλάσης ===== | ===== Στατικές μεταβλητές της κλάσης ===== | ||
Ας θεωρήσουμε το παρακάτω παράδειγμα από τον κώδικα του παραλληλόγραμμου. | Ας θεωρήσουμε το παρακάτω παράδειγμα από τον κώδικα του παραλληλόγραμμου. | ||
<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 37: | Line 47: | ||
</ | </ | ||
- | Με τον ορισμό <code java> | + | Με τον ορισμό <code java> |
Για να προσπελάσουμε την τιμή της συγκεκριμένης μεταβλητής μπορούμε να το κάνουμε με τους εξής δύο τρόπους: | Για να προσπελάσουμε την τιμή της συγκεκριμένης μεταβλητής μπορούμε να το κάνουμε με τους εξής δύο τρόπους: | ||
Line 43: | 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 60: | 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 86: | Line 96: | ||
===== Στατικές μέθοδοι της κλάσης ===== | ===== Στατικές μέθοδοι της κλάσης ===== | ||
- | Σε αναλογία με τις μεταβλητές της κλάσης μπορούμε να έχουμε και μεθόδους | + | Σε αναλογία με τις στατικές μεταβλητές της κλάσης μπορούμε να έχουμε και |
<code java> | <code java> | ||
- | public | + | static int getNumberOfRectangles() { |
return numberOfRectangles; | return numberOfRectangles; | ||
} | } | ||
Line 98: | Line 108: | ||
- Με χρήση ενός αντικειμένου ως εξής '' | - Με χρήση ενός αντικειμένου ως εξής '' | ||
- | Οι στατικές μέθοδοι μπορούν να χρησιμοποιηθούν για να εκτελεστούν εργασίες που δεν συνδέονται με τα δεδομένα της κλάσης. Για παράδειγμα, | + | Οι στατικές μέθοδοι μπορούν να χρησιμοποιηθούν για να εκτελεστούν εργασίες που δεν συνδέονται με τα πεδία και τις μεθόδους των αντικειμένων της κλάσης. |
+ | |||
+ | Για παράδειγμα, | ||
<code java Sort.java> | <code java Sort.java> | ||
- | public | + | class Sort { |
- | | + | static void bubbleSort(String a[], int left, int right) { |
String temp; | String temp; | ||
for(int i=left; i<right; i++) { | for(int i=left; i<right; i++) { | ||
Line 117: | Line 129: | ||
</ | </ | ||
- | Επίσης, μέσα σε μία στατική μέθοδο μπορούμε να δημιουργήσουμε αντικείμενα | + | Επιπλέον, μέσα σε μία στατική μέθοδο μπορούμε να δημιουργήσουμε αντικείμενα |
<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 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(" | ||
+ | } | ||
+ | } | ||
</ | </ | ||
- | Η σταθερά | + | H σταθερά |
|Προηγούμενο: | |Προηγούμενο: |
java/static_keyword.1518013753.txt.gz · Last modified: 2018/02/07 14:29 (external edit)