java:static_keyword

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
java:static_keyword [2016/02/10 07:53]
gthanos [Στατικές μέθοδοι της κλάσης]
java:static_keyword [2017/02/16 10:57]
gthanos [Στατικές μεταβλητές και μέθοδοι της κλάσης]
Line 3: Line 3:
 Μέχρι τώρα είδαμε ότι τα αντικείμενα αποτελούν υλοποιήσεις της κλάσης που είναι το "​σχέδιο"​ των αντικειμένων που υλοποιούνται. Με την έννοια αυτή όλα τα πεδία και οι μέθοδοι της κλάσης ανήκουν τελικά στα επιμέρους αντικείμενα της κάθε κλάσης. Μέχρι τώρα είδαμε ότι τα αντικείμενα αποτελούν υλοποιήσεις της κλάσης που είναι το "​σχέδιο"​ των αντικειμένων που υλοποιούνται. Με την έννοια αυτή όλα τα πεδία και οι μέθοδοι της κλάσης ανήκουν τελικά στα επιμέρους αντικείμενα της κάθε κλάσης.
  
-Εκτός από την παραπάνω θεώρηση είναι δυνατόν να έχουμε πεδία και μεθόδους που δεν ανήκουν σε συγκεκριμένα αντικείμενα της κλάσης,​ αλλά στην κλάση. ​Με την έννοια αυτή οι συγκεκριμένος τύπος πεδίων ή μεθόδων είναι στατικές για τα αντικείμενα της κλάσης. Για παράδειγμα,​ αν προσπελάσουμε την τιμή ενός πεδίου που ανήκει στην κλάση από δύο διαφορετικά αντικείμενα της ίδιας κλάσης τότε θα διαβάσουμε ακριβώς την ίδια τιμή. +Εκτός από την παραπάνω θεώρηση είναι δυνατόν να έχουμε πεδία και μεθόδους που δεν ανήκουν σε συγκεκριμένα αντικείμενα της κλάσης,​ αλλά στην κλάση. Σε αυτή τη σελίδα αναλύουμε την χρήση του keyword **static** για την δημιουργία στατικών πεδίων και μεθόδων που ανήκουν στην κλάση και όχι σε συγκεκριμένα αντικείμενα της κλάσης.
- +
-Σε αυτή τη σελίδα αναλύουμε την χρήση του keyword **static** για την δημιουργία στατικών πεδίων και μεθόδων που ανήκουν στην κλάση και όχι σε συγκεκριμένα αντικείμενα της κλάσης.+
  
 +<WRAP tip 80% center round>
 +Εάν τα πεδία ή οι μέθοδοι ανήκουν στη κλάση και όχι στα αντικείμενα της τότε οι μέθοδοι και τα πεδία είναι στατικά για τα αντικείμενα της κλάσης. Για παράδειγμα,​ αν προσπελάσουμε την τιμή ενός πεδίου που ανήκει στην κλάση από δύο διαφορετικά αντικείμενα της κλάσης τότε θα διαβάσουμε ακριβώς την ίδια τιμή.
 +</​WRAP>​
 ===== Στατικές μεταβλητές της κλάσης ===== ===== Στατικές μεταβλητές της κλάσης =====
  
-Ας θεωρήσουμε το παρακάτω παράδειγμα από τον κώδικα του ποδηλάτου.+Ας θεωρήσουμε το παρακάτω παράδειγμα από τον κώδικα του παραλληλόγραμμου.
 <code java> <code java>
 public class Rectangle { public class Rectangle {
Line 18: Line 19:
    
   // the Rectangle class has one constructor   // the Rectangle class has one constructor
-  public Rectangle(int ​setWidth, int setHeight, Point o) { +  public Rectangle(int ​width, int height, Point origin) { 
-    width = setWidth+    ​this.width = width
-    height = setHeight+    ​this.height = height
-    origin = o;+    ​this.origin = origin;
   }   }
         ​         ​
Line 38: Line 39:
 </​code>​ </​code>​
  
-Προσθέτοντας την ​μεταβλητή ​<code java>​private static int numberOfRectangles = 0;</​code>​ δημιουργούμε μία μεταβλητή που έχει ενιαία τιμή για όλες τα αντικείμενα της κλάσης μας. Η μεταβλητή αυτή δεν ανήκει σε κάποιο από τα αντικείμενα,​ αλλά ανήκει στην κλάση. Επομένως,​ για τα αντικείμενα της κλάσης αυτής, η συγκεκριμένη μεταβλητή μπορεί να θεωρηθεί στατική (για αυτό και η χρήση του //keyword static//).+Με τον ​ορισμό <code java>​private static int numberOfRectangles = 0;</​code>​ δημιουργούμε μία μεταβλητή που έχει ενιαία τιμή για όλες τα αντικείμενα της κλάσης μας. Η μεταβλητή αυτή δεν ανήκει σε κάποιο από τα αντικείμενα,​ αλλά ανήκει στην κλάση. Επομένως,​ για τα αντικείμενα της κλάσης αυτής, η συγκεκριμένη μεταβλητή μπορεί να θεωρηθεί στατική (για αυτό και η χρήση του //keyword static//).
  
 Για να προσπελάσουμε την τιμή της συγκεκριμένης μεταβλητής μπορούμε να το κάνουμε με τους εξής δύο τρόπους:​ Για να προσπελάσουμε την τιμή της συγκεκριμένης μεταβλητής μπορούμε να το κάνουμε με τους εξής δύο τρόπους:​
Line 54: Line 55:
    
   // the Rectangle class has one constructor   // the Rectangle class has one constructor
-  public Rectangle(int ​setWidth, int setHeight, Point o) { +  public Rectangle(int ​width, int height, Point origin) { 
-    width = setWidth+    ​this.width = width
-    height = setHeight+    ​this.height = height
-    origin = o;+    ​this.origin = origin;
   }   }
         ​         ​
Line 82: Line 83:
 </​code>​ </​code>​
  
-Μπορείτε να κατεβάσετε τον πλήρη κώδικα της κλάσης μαζί με ένα παράδειγμα εκτέλεσης εδώ {{:java:bicycle-with-static-field.zip|}}.+Μπορείτε να κατεβάσετε τον πλήρη κώδικα της κλάσης εδώ {{:java:rectangle_example_with_static.zip|}}. 
  
 ===== Στατικές μέθοδοι της κλάσης ===== ===== Στατικές μέθοδοι της κλάσης =====
Line 89: Line 91:
  
 <code java> <code java>
-public static int getNumberOfBicycles() { +public static int getNumberOfRectangles() { 
-    return ​numberOfBicycles;+    return ​numberOfRectangles;
 } }
 </​code>​ </​code>​
  
-Για να καλέσουμε στατικές μεθόδους σε αναλογία με τα πεδία έχουμε τις εξής επιλογές +Για να καλέσουμε στατικές μεθόδους σε αναλογία με τα πεδία έχουμε τις εξής επιλογές: 
-  - Με χρήση του ονόματος της κλάσης ''​Bicycle.getNumberOfBicycles();''​.. +  - Με χρήση του ονόματος της κλάσης ''​Rectangle.getNumberOfRectangles();''​ 
-  - Με χρήση ενός αντικειμένου ως εξής ''​Bicycle myBike ​= new Bicycle(); myBike.getNumberOfBicycles();''​.+  - Με χρήση ενός αντικειμένου ως εξής ''​Rectangle myRectangle ​= new Rectangle(); myRectangle.getNumberOfRectangles();''​
  
 Οι στατικές μέθοδοι μπορούν να χρησιμοποιηθούν για να εκτελεστούν εργασίες που δεν συνδέονται με τα δεδομένα της κλάσης. Για παράδειγμα,​ η παρακάτω στατική μέθοδος υλοποιεί τον αλγόριθμο Bubble Sort μέσα σε μία κλάση με το όνομα Sort. Ο πίνακας προς ταξινόμηση λαμβάνεται ως όρισμα στη μέθοδο Οι στατικές μέθοδοι μπορούν να χρησιμοποιηθούν για να εκτελεστούν εργασίες που δεν συνδέονται με τα δεδομένα της κλάσης. Για παράδειγμα,​ η παρακάτω στατική μέθοδος υλοποιεί τον αλγόριθμο Bubble Sort μέσα σε μία κλάση με το όνομα Sort. Ο πίνακας προς ταξινόμηση λαμβάνεται ως όρισμα στη μέθοδο
Line 120: Line 122:
  
 <code java> <code java>
 +/* η παράμετρος seed αρχικοποιεί την γεννήτρια τυχαίων ​
 + * αριθμών.
 + */
 public static Rectangle randomRectangle(int 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);​
-  int randWidth = rand.nextInt(1000); +  ​// εύρος τιμής randWidth (0 - 100) 
-  int randHeight = rand.nextInt(1000);+  ​int randWidth = rand.nextInt(100); 
 +  // εύρος τιμής randHeight (0 - 100) 
 +  int randHeight = rand.nextInt(100);
   Rectangle rect = new Rectangle(randWidth,​randHeight);​   Rectangle rect = new Rectangle(randWidth,​randHeight);​
   return rect;   return rect;
Line 136: Line 143:
   * Στατικές μέθοδοι **ΜΠΟΡΟΥΝ** να προσπελάσουν στατικά πεδία.   * Στατικές μέθοδοι **ΜΠΟΡΟΥΝ** να προσπελάσουν στατικά πεδία.
   * Στατικές μέθοδοι **ΔΕΝ ΜΠΟΡΟΥΝ **  να προσπελάσουν μη στατικά πεδία.   * Στατικές μέθοδοι **ΔΕΝ ΜΠΟΡΟΥΝ **  να προσπελάσουν μη στατικά πεδία.
-    * το παραπάνω είναι λογικό αν αναλογιστείτε ότι μία στατική μέθοδος (που ανήκει συνολικά στην κλάση) δεν μπορέι να γνωρίζει το αντικείμενο στο οποίο ανήκει ένα μη στατικό πεδίο.+    * το παραπάνω είναι λογικό αν αναλογιστείτε ότι μία στατική μέθοδος (που ανήκει συνολικά στην κλάση) δεν μπορεί να γνωρίζει το αντικείμενο στο οποίο ανήκει ένα μη στατικό πεδίο.
  
 ===== Χρήση σταθερών - Constants ===== ===== Χρήση σταθερών - Constants =====
Line 147: Line 154:
 Η σταθερά θα πρέπει να ανήκει σε μία κλάση σε αναλογία με τις στατικές μεταβλητές της κλάσης που ορίσαμε παραπάνω και δεν μπορεί να οριστεί αυτόνομα. Η σταθερά θα πρέπει να ανήκει σε μία κλάση σε αναλογία με τις στατικές μεταβλητές της κλάσης που ορίσαμε παραπάνω και δεν μπορεί να οριστεί αυτόνομα.
  
-|Προηγούμενο:​ [[:​java:​this_operator | Ο τελεστής this ]] | Επόμενο:​ [[ java:​member_initialization | Αρχικοποίηση των μελών της κλάσης ]]|+|Προηγούμενο:​ [[:​java:​this_operator | Ο τελεστής this ]] | [[ :toc | Περιεχόμενα ​]] | Επόμενο:​ [[ java:​member_initialization | Αρχικοποίηση των μελών της κλάσης ]]|
  
  
  
  
java/static_keyword.txt · Last modified: 2017/03/03 16:36 by gthanos