This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
java:member_initialization [2015/02/06 07:30] gthanos [Final Methods] |
java:member_initialization [2022/02/24 12:39] gthanos [Παράδειγμα αρχικοποίησης στατικών και μη στατικών πεδίων] |
||
|---|---|---|---|
| Line 14: | Line 14: | ||
| </ | </ | ||
| - | Η παραπάνω μέθοδος αφορά **στατικά** (static) και **μη στατικά** πεδία, προϋποθέτει όμως ότι η ανάθεση της τιμής μπορεί αν γίνει μόνο με μία εντολή (όπως παραπάνω). Πιο σύνθετες μέθοδοι ανάθεσης (π.χ. | + | Η παραπάνω μέθοδος αφορά **στατικά** (static) και **μη στατικά** πεδία, προϋποθέτει όμως ότι η ανάθεση της τιμής μπορεί αν γίνει μόνο με μία εντολή (όπως παραπάνω). Πιο σύνθετες μέθοδοι ανάθεσης (π.χ. αρχικοποίηση πινάκων) μπορούν να γίνουν μέσα στους κατασκευαστές τις κλάσης για |
| - | Για την αρχικοποίηση πεδίων εκτός από τους κατασκευαστές έχουμε τις εξής επιλογές: | + | Για την αρχικοποίηση πεδίων εκτός από τους κατασκευαστές έχουμε τις εξής |
| * για στατικά πεδία | * για στατικά πεδία | ||
| * **static initialization blocks**. | * **static initialization blocks**. | ||
| Line 28: | Line 28: | ||
| ==== Static Initialization Blocks ==== | ==== Static Initialization Blocks ==== | ||
| - | To //static initialization block// είναι ένα τμήμα κώδικα τοποθετημένο μέσα σε παρενθέσεις | + | To //static initialization block// είναι ένα τμήμα κώδικα τοποθετημένο μέσα σε άγκιστρα { } που προσδιορίζεται από τη λέξη //static//, όπως παρακάτω: |
| <code java> | <code java> | ||
| Line 52: | Line 52: | ||
| </ | </ | ||
| - | Το πλεονέκτημα των στατικών μεθόδων είναι ότι μπορούν να επαναχρησιμοποιηθούν σε περίπτωση που χρειαστεί να επανα-αρχικοποιηθεί η στατική μεταβλητή της κλάσης. | + | <WRAP tip 80% center round> |
| + | Το πλεονέκτημα των στατικών μεθόδων είναι ότι μπορούν να επαναχρησιμοποιηθούν σε περίπτωση που χρειαστεί να αρχικοποιηθεί | ||
| + | </ | ||
| ===== Αρχικοποιώντας μη-στατικά πεδία ===== | ===== Αρχικοποιώντας μη-στατικά πεδία ===== | ||
| Line 58: | Line 60: | ||
| ==== Initialization Blocks ==== | ==== Initialization Blocks ==== | ||
| - | Τα // | + | Τα // |
| ==== Final Methods ==== | ==== Final Methods ==== | ||
| - | Παρακάτω δίνεται ένα παράδειγμα χρήσης //final// μεθόδου για την αρχικοποίηση ενός μη στατικού πεδίου. Μία //final// μέθοδος δεν μπορεί να γίνει // | + | Παρακάτω δίνεται ένα παράδειγμα χρήσης //final// μεθόδου για την αρχικοποίηση ενός μη στατικού πεδίου. Μία //final// μέθοδος δεν μπορεί να γίνει // |
| <code java> | <code java> | ||
| Line 75: | Line 77: | ||
| </ | </ | ||
| - | Προφανώς | + | Προφανώς |
| - | |Προηγούμενο: [[: | + | ===== Παράδειγμα |
| + | <code java Rectangle.java> | ||
| + | class Rectangle { | ||
| + | | ||
| + | // the Rectangle class has 3 fields | ||
| + | int width; | ||
| + | int height; | ||
| + | Point origin; | ||
| + | | ||
| + | int id = initializeId(); | ||
| + | |||
| + | // add a class variable for the | ||
| + | // number of Rectangle objects instantiated | ||
| + | static int numberOfRectangles = initNumberOfRectangles(); | ||
| + | | ||
| + | Rectangle(int initWidth, int initHeight, Point initOrigin) { | ||
| + | this(initWidth, | ||
| + | origin = initOrigin; | ||
| + | } | ||
| + | | ||
| + | Rectangle(int initWidth, int initHeight) { | ||
| + | width = initWidth; | ||
| + | height = initHeight; | ||
| + | origin = new Point(0,0); | ||
| + | id = ++numberOfRectangles; | ||
| + | System.out.println(" | ||
| + | } | ||
| + | | ||
| + | | ||
| + | // static method for initializing static variable. | ||
| + | static int initNumberOfRectangles() { | ||
| + | System.out.println(" | ||
| + | return 0; | ||
| + | } | ||
| + | //static initialization block | ||
| + | static { | ||
| + | System.out.println(" | ||
| + | numberOfRectangles = 0; | ||
| + | } | ||
| + | // | ||
| + | { | ||
| + | id = 100; | ||
| + | System.out.println(" | ||
| + | } | ||
| + | | ||
| + | //final method | ||
| + | final int initializeId() { | ||
| + | int _id = 200; | ||
| + | System.out.println(" | ||
| + | return _id; | ||
| + | } | ||
| + | | ||
| + | int getID() { | ||
| + | return id; | ||
| + | } | ||
| + | |||
| + | static int getNumberOfRectangles() { | ||
| + | return numberOfRectangles; | ||
| + | } | ||
| + | | ||
| + | void setWidth(int newWidth ) { | ||
| + | width = newWidth; | ||
| + | } | ||
| + | | ||
| + | int getWidth() { | ||
| + | return width; | ||
| + | } | ||
| + | | ||
| + | void setHeight(int newHeight ) { | ||
| + | height = newHeight; | ||
| + | } | ||
| + | | ||
| + | int getHeight() { | ||
| + | return height; | ||
| + | } | ||
| + | | ||
| + | void setOrigin(Point newOrigin) { | ||
| + | origin = newOrigin; | ||
| + | } | ||
| + | | ||
| + | Point getOrigin() { | ||
| + | return origin; | ||
| + | } | ||
| + | | ||
| + | int getArea() { | ||
| + | | ||
| + | } | ||
| + | | ||
| + | String description(String objName) { | ||
| + | return " | ||
| + | } | ||
| + | | ||
| + | public static void main(String []args) { | ||
| + | System.out.println(" | ||
| + | Point p = new Point(10, | ||
| + | | ||
| + | Rectangle rectOne = new Rectangle(30, | ||
| + | System.out.println(" | ||
| + | System.out.println(rectOne.description(" | ||
| + | System.out.println(" | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Το αποτέλεσμα εκτέλεσης του παραπάνω κώδικα είναι το παρακάτω: | ||
| + | < | ||
| + | $ java Rectangle | ||
| + | initialize numberOfRectangles in static method | ||
| + | initialize numberOfRectangles in static block | ||
| + | ------------------------------- | ||
| + | initialize objectId in final method, id: 200 | ||
| + | initialize objectId in block, id: 100 | ||
| + | Initialized object id in constructor, | ||
| + | ------------------------------- | ||
| + | [rectOne] (id: 1) Width: 30, Height: 40 | ||
| + | Number of Rectangles: 1 | ||
| + | </ | ||
| + | |||
| + | <WRAP tip 80% center round> | ||
| + | Από τα παραπάνω προκύπτει ότι η σειρά εκτέλεσης μεταξύ στατικών και μη στατικών μεθόδων, | ||
| + | - Στατικές μέθοδοι | ||
| + | - Στατικά μπλοκ | ||
| + | - Μη στατικές //final// μέθοδοι | ||
| + | - Μη στατικά μπλοκ | ||
| + | - Κατασκευαστές της κλάσης | ||
| + | </ | ||
| + | |Προηγούμενο: | ||