Μπορούν να υπάρχουν φορές που είναι χρήσιμο να υπάρχουν τιμές που μοιράζονται σε όλες τις περιπτώσεις μιας συγκεκριμένης κλάσης. Στατικά πεδία και σταθερές σταθερές να ενεργοποιήσετε αυτόν τον τύπο κοινής χρήσης αν ανήκετε στο τάξη και όχι στα πραγματικά αντικείμενα.
Ο στατικός τροποποιητής
Κανονικά τα πεδία και οι μέθοδοι που ορίζονται σε μια κλάση μπορούν να χρησιμοποιηθούν μόνο όταν έχει δημιουργηθεί ένα αντικείμενο αυτού του τύπου κλάσης. Για παράδειγμα, σκεφτείτε μια απλή κλάση στοιχείων που παρακολουθεί τα εμπορεύματα σε ένα κατάστημα:
δημόσια τάξη Στοιχείο {
ιδιωτική στοιχειοσειρά στοιχείο όνομα;
δημόσιο στοιχείο (συμβολοσειρά στοιχείου_ετικειμένου)
{
this.itemName = itemName;
}
public String getItemName ()
{
Επιστροφή itemName;
}
}
Για να μπορέσουμε να χρησιμοποιήσουμε τη μέθοδο getItemName (), πρέπει πρώτα να δημιουργήσουμε ένα αντικείμενο στοιχείου, στην περίπτωση αυτή catFood:
δημόσια τάξη StaticExample {
δημόσιο static κενό main (String [] args) {
Στοιχείο catFood = νέο στοιχείο ("Whiskas");
System.out.println (catFood.getItemName ());
}
}
Ωστόσο, εάν ο στατικός τροποποιητής περιλαμβάνεται σε δήλωση πεδίου ή μεθόδου, δεν υπάρχει περίπτωση της κλάσης που απαιτούνται για τη χρήση του πεδίου ή της μεθόδου - συνδέονται με την τάξη και όχι με ένα άτομο αντικείμενο. Αν κοιτάξετε πίσω στο παραπάνω παράδειγμα, θα δείτε ότι ο στατικός τροποποιητής χρησιμοποιείται ήδη στο κύρια δήλωση μεθόδου:
δημόσιο στατικός κενό κύρια (String [] args) {
ο κύρια μέθοδος είναι ένα στατική μέθοδο που δεν απαιτεί να υπάρχει κάποιο αντικείμενο πριν να μπορεί να καλείται. Δεδομένου ότι το main () είναι το σημείο εκκίνησης για οποιαδήποτε εφαρμογή Java, στην πραγματικότητα δεν υπάρχουν ήδη αντικείμενα που να την καλούν. Θα μπορούσατε, αν θελήσατε να έχετε ένα πρόγραμμα που ονομάζεται συνεχώς, κάντε το εξής:
δημόσια τάξη StaticExample {
δημόσιο static κενό main (String [] args) {
Σειρά [] s = {"τυχαία", "συμβολοσειρά"}}.
StaticExample.main (s);
}
}
Δεν είναι πολύ χρήσιμο, αλλά παρατηρήστε πώς μπορεί να ονομάζεται η μέθοδος main () χωρίς μια παρουσία μιας κλάσης StaticExample.
Τι είναι ένα στατικό πεδίο;
Τα στατικά πεδία είναι επίσης γνωστά ως πεδία κλάσης. Είναι απλά πεδία που έχουν στατικό τους τροποποιητές στις δηλώσεις τους. Για παράδειγμα, να επιστρέψουμε στην κλάση Στοιχείου και να προσθέσουμε ένα στατικό πεδίο:
δημόσια τάξη Στοιχείο {
// static field uniqueId
ιδιωτική στατική int uniqueId = 1;
ιδιωτικό στοιχείο int int;
ιδιωτική στοιχειοσειρά στοιχείο όνομα;
δημόσιο στοιχείο (συμβολοσειρά στοιχείου_ετικειμένου)
{
this.itemName = itemName;
itemId = uniqueId;
uniqueId ++;
}
}
Τα πεδία itemId και itemName είναι κανονικά μη στατικά πεδία. Όταν δημιουργηθεί μια εμφάνιση μιας κλάσης στοιχείου, αυτά τα πεδία θα έχουν τιμές που διατηρούνται μέσα σε αυτό το αντικείμενο. Αν δημιουργηθεί ένα άλλο στοιχείο αντικειμένου, θα έχει επίσης πεδία itemId και itemName για την αποθήκευση τιμών.
Ωστόσο, το static field uniqueId διατηρεί μια τιμή που θα είναι η ίδια σε όλα τα αντικείμενα αντικειμένων. Αν υπάρχουν 100 αντικείμενα αντικειμένων, θα υπάρχουν 100 εμφανίσεις των πεδίων itemId και itemName, αλλά μόνο ένα static field uniqueId.
Στο παραπάνω παράδειγμα, το uniqueId χρησιμοποιείται για να δώσει σε κάθε στοιχείο του αντικειμένου έναν μοναδικό αριθμό. Αυτό είναι εύκολο να γίνει αν κάθε αντικείμενο αντικειμένου που δημιουργείται παίρνει την τρέχουσα τιμή στο static field uniqueId και στη συνέχεια αυξάνει κατά ένα. Η χρήση ενός στατικού πεδίου σημαίνει ότι κάθε αντικείμενο δεν χρειάζεται να γνωρίζει τα άλλα αντικείμενα για να πάρει ένα μοναδική ταυτότητα. Αυτό θα μπορούσε να είναι χρήσιμο αν θέλετε να μάθετε τη σειρά με την οποία δημιουργήθηκαν τα αντικείμενα αντικειμένων.
Τι είναι μια στατική σταθερά;
Οι στατικές σταθερές είναι ακριβώς όπως τα στατικά πεδία εκτός από το ότι οι τιμές τους δεν μπορούν να αλλάξουν. Στη δήλωση πεδίου, το τελικός και στατικός χρησιμοποιούνται και οι τροποποιητές. Για παράδειγμα, ίσως η κλάση Στοιχείου θα πρέπει να επιβάλει περιορισμό στο μήκος του itemName. Θα μπορούσαμε να δημιουργήσουμε μια στατική σταθερή maxItemNameLength:
δημόσια τάξη Στοιχείο {
ιδιωτικό στατικό int id = 1;
δημόσια στατική τελική int maxItemNameLength = 20;
ιδιωτικό στοιχείο int int;
ιδιωτική στοιχειοσειρά στοιχείο όνομα;
δημόσιο στοιχείο (συμβολοσειρά στοιχείου_ετικειμένου)
{
αν (itemName.length ()> maxItemNameLength)
{
this.itemName = στοιχειομετρία.πατίδα (0,20);
}
αλλού
{
this.itemName = itemName;
}
itemId = id;
id ++;
} }
Όπως και στα στατικά πεδία, οι στατικές σταθερές συνδέονται με την κλάση και όχι με ένα μεμονωμένο αντικείμενο:
δημόσια τάξη StaticExample {
δημόσιο static κενό main (String [] args) {
Στοιχείο catFood = νέο στοιχείο ("Whiskas");
System.out.println (catFood.getItemName ());
System.out.println (Item.maxItemNameLength)
}
}
Υπάρχουν δύο σημαντικά πράγματα που πρέπει να παρατηρήσετε για τη στατική σταθερά maxItemNameLength:
- Δηλώνεται ως δημόσιο πεδίο. Γενικά, είναι κακή ιδέα να κάνετε ένα πεδίο δημόσια σε οποιαδήποτε κατηγορία σχεδιάζετε, αλλά σε αυτή την περίπτωση, δεν έχει σημασία. Η τιμή της σταθεράς δεν μπορεί να αλλάξει.
- Η στατική σταθερά χρησιμοποιείται από το στοιχείο κλάσης στοιχείο, όχι αντικείμενο αντικειμένου.
Στατικές σταθερές μπορούν να φανούν σε όλο το Java API. Για παράδειγμα, το integer wrapper class έχει δύο που αποθηκεύουν τις μέγιστες και ελάχιστες τιμές ένα int Τύπος δεδομένων μπορώ να έχω:
System.out.println ("Η μέγιστη τιμή για int είναι:" + ακέραιος αριθμός. MAX_VALUE);
System.out.println ("Η τιμή min για το int είναι:" + Ακέραιος αριθμός. MIN_VALUE);
Παραγωγή:
Η μέγιστη τιμή για int είναι: 2147483647
Η τιμή min για int είναι: -2147483648