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
java:static_keyword [2016/02/19 13:35]
doufexi Added link for toc
java:static_keyword [2017/03/03 16:36] (current)
gthanos [Στατικές μεταβλητές της κλάσης]
Line 3: Line 3:
 Μέχρι τώρα είδαμε ότι τα αντικείμενα αποτελούν υλοποιήσεις της κλάσης που είναι το "​σχέδιο"​ των αντικειμένων που υλοποιούνται. Με την έννοια αυτή όλα τα πεδία και οι μέθοδοι της κλάσης ανήκουν τελικά στα επιμέρους αντικείμενα της κάθε κλάσης. Μέχρι τώρα είδαμε ότι τα αντικείμενα αποτελούν υλοποιήσεις της κλάσης που είναι το "​σχέδιο"​ των αντικειμένων που υλοποιούνται. Με την έννοια αυτή όλα τα πεδία και οι μέθοδοι της κλάσης ανήκουν τελικά στα επιμέρους αντικείμενα της κάθε κλάσης.
  
-Εκτός από την παραπάνω θεώρηση είναι δυνατόν να έχουμε πεδία και μεθόδους που δεν ανήκουν σε συγκεκριμένα αντικείμενα της κλάσης,​ αλλά στην κλάση. ​Με την έννοια αυτή, οι συγκεκριμένες μέθοδοι και πεδία είναι στατικά για τα αντικείμενα της κλάσης. Για παράδειγμα,​ αν προσπελάσουμε την τιμή ενός πεδίου που ανήκει στην κλάση από δύο διαφορετικά αντικείμενα της ίδιας κλάσης τότε θα διαβάσουμε ακριβώς την ίδια τιμή. +Εκτός από την παραπάνω θεώρηση είναι δυνατόν να έχουμε πεδία και μεθόδους που δεν ανήκουν σε συγκεκριμένα αντικείμενα της κλάσης,​ αλλά στην κλάση. Σε αυτή τη σελίδα αναλύουμε την χρήση του keyword **static** για την δημιουργία στατικών πεδίων και μεθόδων που ανήκουν στην κλάση και όχι σε συγκεκριμένα αντικείμενα της κλάσης.
- +
-Σε αυτή τη σελίδα αναλύουμε την χρήση του keyword **static** για την δημιουργία στατικών πεδίων και μεθόδων που ανήκουν στην κλάση και όχι σε συγκεκριμένα αντικείμενα της κλάσης.+
  
 +<WRAP tip 80% center round>
 +Εάν τα πεδία ή οι μέθοδοι ανήκουν στη κλάση και όχι στα αντικείμενα της τότε οι μέθοδοι και τα πεδία είναι στατικά για τα αντικείμενα της κλάσης. Για παράδειγμα,​ αν προσπελάσουμε την τιμή ενός πεδίου που ανήκει στην κλάση από δύο διαφορετικά αντικείμενα της κλάσης τότε θα διαβάσουμε ακριβώς την ίδια τιμή.
 +</​WRAP>​
 ===== Στατικές μεταβλητές της κλάσης ===== ===== Στατικές μεταβλητές της κλάσης =====
  
Line 46: Line 47:
 Και οι δύο παραπάνω τρόποι προσπέλασης είναι ισοδύναμοι για τον compiler. Ο 2ος τρόπος προσπέλασης **ΔΕΝ** συνιστάται,​ καθώς δεν είναι σαφές αν πρόκειται για μεταβλητή που ανήκει στην κλάση ή στο αντικείμενο. Αντίθετα,​ ο 1ος τρόπος αφορά αποκλειστικά μεταβλητές που ανήκουν στην κλάση και για αυτό θεωρείται προγραμματιστικά ορθότερος. Δείτε τον κώδικα της κλάσης **Rectangle** όπως διαμορφώνεται με την χρήση των δύο επιπλέον πεδίων και την καταγραφή του αριθμού των αντικειμένων που δημιουργούνται. Και οι δύο παραπάνω τρόποι προσπέλασης είναι ισοδύναμοι για τον compiler. Ο 2ος τρόπος προσπέλασης **ΔΕΝ** συνιστάται,​ καθώς δεν είναι σαφές αν πρόκειται για μεταβλητή που ανήκει στην κλάση ή στο αντικείμενο. Αντίθετα,​ ο 1ος τρόπος αφορά αποκλειστικά μεταβλητές που ανήκουν στην κλάση και για αυτό θεωρείται προγραμματιστικά ορθότερος. Δείτε τον κώδικα της κλάσης **Rectangle** όπως διαμορφώνεται με την χρήση των δύο επιπλέον πεδίων και την καταγραφή του αριθμού των αντικειμένων που δημιουργούνται.
  
-<code java>+<​code ​java Rectangle.java>
 public class Rectangle { public class Rectangle {
- +     
 +  // fields
   private int width;   private int width;
   private int height;   private int height;
   private Point origin;   private Point origin;
-  
-  // the Rectangle class has one constructor 
-  public Rectangle(int width, int height, Point origin) { 
-    this.width = width; 
-    this.height = height; 
-    this.origin = origin; 
-  } 
-        ​ 
   // add an instance variable for the object ID   // add an instance variable for the object ID
   private int id;   private int id;
Line 66: Line 60:
   // number of Rectangle objects instantiated   // number of Rectangle objects instantiated
   private static int numberOfRectangles = 0;   private static int numberOfRectangles = 0;
 +
 +  // constructors
 +  public Rectangle(int initWidth, int initHeight, Point initOrigin) {
 +    width = initWidth;
 +    height = initHeight;
 +    origin = initOrigin;
 +    id = ++numberOfRectangles;​
 +  }
  
   public int getID() {   public int getID() {
Line 74: Line 76:
     return numberOfRectangles;​     return numberOfRectangles;​
   }   }
- +    ​ 
-  /* Ο κώδικας από εδώ και κάτω είναι ίδιος με προηγούμενες +  // methods 
-   * εκδόσεις τις κλάσης και παραλείπεται για λόγους οικονομίας +  ​public void setWidth(int newWidth ) { 
-   ​χώρου. +    width = newWidth; 
-   */+  } 
 +   
 +  public int getWidth() { 
 +    return width; 
 +  } 
 +     
 +  public void setHeight(int newHeight ) { 
 +    height = newHeight;​ 
 +  } 
 +   
 +  public int getHeight() { 
 +    return height; 
 +  } 
 +     
 +  public void setOrigin(Point newOrigin) { 
 +    origin = newOrigin;​ 
 +  } 
 +   
 +  public Point getOrigin() { 
 +    return origin; 
 +  } 
 +   
 +  public int getArea() { 
 +       ​return width height; 
 +  } 
 +    
 +  ​// Move rectangle origin by dx,dy 
 +  public void move(int dx, int dy) { 
 +    origin.setX( origin.getX() + dx ); 
 +    origin.setY( origin.getY() + dy ); 
 +  }
 } }
 </​code>​ </​code>​
-/* + 
-Μπορείτε να κατεβάσετε τον πλήρη κώδικα της κλάσης μαζί με ένα παράδειγμα εκτέλεσης εδώ {{:java:bicycle-with-static-field.zip|}}. +Μπορείτε να κατεβάσετε τον πλήρη κώδικα της κλάσης εδώ {{:java:rectangle_example_with_static.zip|}}. 
-*/+
  
 ===== Στατικές μέθοδοι της κλάσης ===== ===== Στατικές μέθοδοι της κλάσης =====
Line 142: Line 174:
   * Στατικές μέθοδοι **ΜΠΟΡΟΥΝ** να προσπελάσουν στατικά πεδία.   * Στατικές μέθοδοι **ΜΠΟΡΟΥΝ** να προσπελάσουν στατικά πεδία.
   * Στατικές μέθοδοι **ΔΕΝ ΜΠΟΡΟΥΝ **  να προσπελάσουν μη στατικά πεδία.   * Στατικές μέθοδοι **ΔΕΝ ΜΠΟΡΟΥΝ **  να προσπελάσουν μη στατικά πεδία.
-    * το παραπάνω είναι λογικό αν αναλογιστείτε ότι μία στατική μέθοδος (που ανήκει συνολικά στην κλάση) δεν μπορέι να γνωρίζει το αντικείμενο στο οποίο ανήκει ένα μη στατικό πεδίο.+    * το παραπάνω είναι λογικό αν αναλογιστείτε ότι μία στατική μέθοδος (που ανήκει συνολικά στην κλάση) δεν μπορεί να γνωρίζει το αντικείμενο στο οποίο ανήκει ένα μη στατικό πεδίο.
  
 ===== Χρήση σταθερών - Constants ===== ===== Χρήση σταθερών - Constants =====
java/static_keyword.1455888922.txt.gz · Last modified: 2016/02/26 11:15 (external edit)