This shows you the differences between two versions of the page.
|
java:member_initialization [2015/02/18 13:42] gthanos |
java:member_initialization [2022/02/24 12:39] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Αρχικοποίηση των μελών της κλάσης ====== | ||
| - | |||
| - | Στην γλώσσα προγραμματισμού Java μπορούμε να αρχικοποιήσουμε την τιμή ενός πεδίου στο σώμα της κλάσης, | ||
| - | |||
| - | <code java> | ||
| - | public class BedAndBreakfast { | ||
| - | |||
| - | // initialize to 10 | ||
| - | public static int capacity = 10; | ||
| - | |||
| - | // initialize to false | ||
| - | private boolean full = false; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Η παραπάνω μέθοδος αφορά **στατικά** (static) και **μη στατικά** πεδία, προϋποθέτει όμως ότι η ανάθεση της τιμής μπορεί αν γίνει μόνο με μία εντολή (όπως παραπάνω). Πιο σύνθετες μέθοδοι ανάθεσης (π.χ. πρέπει να γίνει αρχικοποίηση ενός πίνακα) μπορούν να γίνουν μέσα στους κατασκευαστές τις κλάσης, | ||
| - | |||
| - | Για την αρχικοποίηση πεδίων εκτός από τους κατασκευαστές έχουμε τις εξής επιλογές: | ||
| - | * για στατικά πεδία | ||
| - | * **static initialization blocks**. | ||
| - | * **static methods** (στατικές μέθοδοι). | ||
| - | * για μη-στατικά πεδία | ||
| - | * **initialization blocks** (non-static). | ||
| - | * **final methods** | ||
| - | |||
| - | ===== Αρχικοποιώντας στατικά πεδία ===== | ||
| - | |||
| - | ==== Static Initialization Blocks ==== | ||
| - | |||
| - | To //static initialization block// είναι ένα τμήμα κώδικα τοποθετημένο μέσα σε παρενθέσεις { } που προσδιορίζεται από το keyword static, όπως παρακάτω: | ||
| - | |||
| - | <code java> | ||
| - | static { | ||
| - | ... | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Κάθε κλάση μπορεί να έχει περισσότερα από ένα //static initialization blocks//, τα οποία μπορεί να βρίσκονται οπουδήποτε μέσα στο σώμα της. Τα block αυτά καλούνται κατά την αρχικοποίηση της κλάσης με τη σειρά που εμφανίζονται στο σώμα της. | ||
| - | |||
| - | ==== Στατικές Μέθοδοι ==== | ||
| - | |||
| - | Εναλλακτικά των //static initialization blocks// μπορούν να χρησιμοποιηθούν στατικές μέθοδοι, | ||
| - | <code java> | ||
| - | class MyClass { | ||
| - | public static varType myVar = initializeClassVariable(); | ||
| - | | ||
| - | private static varType initializeClassVariable() { | ||
| - | |||
| - | // initialization code goes here | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Το πλεονέκτημα των στατικών μεθόδων είναι ότι μπορούν να επαναχρησιμοποιηθούν σε περίπτωση που χρειαστεί να επανα-αρχικοποιηθεί η στατική μεταβλητή της κλάσης. | ||
| - | |||
| - | ===== Αρχικοποιώντας μη-στατικά πεδία ===== | ||
| - | |||
| - | ==== Initialization Blocks ==== | ||
| - | |||
| - | Τα // | ||
| - | |||
| - | ==== Final Methods ==== | ||
| - | |||
| - | Παρακάτω δίνεται ένα παράδειγμα χρήσης //final// μεθόδου για την αρχικοποίηση ενός μη στατικού πεδίου. Μία //final// μέθοδος δεν μπορεί να γίνει // | ||
| - | |||
| - | <code java> | ||
| - | class Whatever { | ||
| - | private varType myVar = initializeInstanceVariable(); | ||
| - | | ||
| - | protected final varType initializeInstanceVariable() { | ||
| - | |||
| - | // initialization code goes here | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Προφανώς η μέθοδος μπορεί να επαναχρησιμοποιηθεί και σε άλλα σημεία του κώδικα της κλάσης. Η χρήση //final// μεθόδου κρίνεται απαραίτητη για την αρχικοποίηση μη στατικών πεδίων, | ||
| - | |||
| - | <code java Bicycle.java> | ||
| - | public class Bicycle { | ||
| - | |||
| - | private int cadence; | ||
| - | private int gear; | ||
| - | private int speed; | ||
| - | |||
| - | private int id = initializeId(); | ||
| - | |||
| - | private static int numberOfBicycles = initNumberOfBicycles(); | ||
| - | |||
| - | public Bicycle(int startCadence, | ||
| - | int startSpeed, | ||
| - | int startGear){ | ||
| - | gear = startGear; | ||
| - | cadence = startCadence; | ||
| - | speed = startSpeed; | ||
| - | |||
| - | id = ++numberOfBicycles; | ||
| - | } | ||
| - | |||
| - | public int getID() { | ||
| - | return id; | ||
| - | } | ||
| - | | ||
| - | // static method for initializing static variable. | ||
| - | private static int initNumberOfBicycles() { | ||
| - | System.out.println(" | ||
| - | return 0; | ||
| - | } | ||
| - | |||
| - | //static initialization block | ||
| - | static { | ||
| - | System.out.println(" | ||
| - | numberOfBicycles = 0; | ||
| - | } | ||
| - | |||
| - | // | ||
| - | { | ||
| - | System.out.println(" | ||
| - | id = 100; | ||
| - | } | ||
| - | |||
| - | //final method | ||
| - | private final int initializeId() { | ||
| - | System.out.println(" | ||
| - | return 200; | ||
| - | } | ||
| - | | ||
| - | public static int getNumberOfBicycles() { | ||
| - | return numberOfBicycles; | ||
| - | } | ||
| - | |||
| - | public void setCadence(int newValue) { | ||
| - | cadence = newValue; | ||
| - | } | ||
| - | | ||
| - | public void setGear(int newValue) { | ||
| - | gear = newValue; | ||
| - | } | ||
| - | | ||
| - | public void applyBrake(int decrement) { | ||
| - | speed -= decrement; | ||
| - | } | ||
| - | | ||
| - | public void speedUp(int increment) { | ||
| - | speed += increment; | ||
| - | } | ||
| - | public String toString(String objName) { | ||
| - | return " | ||
| - | } | ||
| - | | ||
| - | public void printState(String objName) { | ||
| - | System.out.println( toString(objName) ); | ||
| - | } | ||
| - | | ||
| - | public static void main(String args[]) { | ||
| - | Bicycle myBike = new Bicycle(1, 4, 2); | ||
| - | Bicycle yourBike = new Bicycle(2, 3, 3); | ||
| - | myBike.printState(" | ||
| - | yourBike.printState(" | ||
| - | | ||
| - | System.out.println(" | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | |Προηγούμενο: | ||
| - | |||
| - | |||
| - | |||
| - | |||