Ποια είναι η διαφορά μεταξύ στιγμιότυπων και στατικών μεταβλητών;


Απάντηση 1:

Τις περισσότερες φορές όταν καλείτε μια συνάρτηση και η λειτουργία τελειώσει, οι μεταβλητές που δημιουργούνται σε αυτή τη λειτουργία εξέρχονται από το πεδίο εφαρμογής. Δεν μπορείτε πλέον να αναφέρετε την αξία τους και την επόμενη φορά που θα καλέσετε τη λειτουργία, θα αναδημιουργηθούν.

Μια στατική μεταβλητή μπορεί να διατηρήσει την τιμή από μία κλήση της συνάρτησης σε μια άλλη.

Για παράδειγμα, μπορεί να έχετε μια λειτουργία που ονομάζεται peel_me_an_egg, (συγγνώμη, το πρωινό κάθισε μπροστά μου, ανανεωμένο)

που μπορεί να περιέχει μια μεταβλητή αυγών, μια μεταβλητή άλατος και μια στατική μεταβλητή για το numberOfEggshells που αυξάνεται κάθε φορά που ονομάζεται η συνάρτηση.

Έτσι, αν καλέσετε peelMeAnEgg τρεις φορές και τελικά εκτυπώσετε το numberOfEggshells, θα δείτε τρία. Βγάζει νόημα?


Απάντηση 2:

Σκεφτείτε ένα δωμάτιο των ανθρώπων και υπάρχει ένα ψυγείο νερού στο δωμάτιο.

Οποιοσδήποτε από τους ανθρώπους μπορεί να πάει στο ψυγείο νερού και να πάρει λίγο νερό.

Κάθε ένας από τους ανθρώπους έχει ένα μπουκάλι νερό. Έχουν τον έλεγχο αυτού του νερού και μπορούν είτε να το πίνουν ή να το δώσουν σε άλλους μέσω μιας διεπαφής που καθορίζουν. Αλλά αυτό το νερό συνδέεται με αυτά και είναι διαφορετικό από το νερό κάποιου άλλου. Για παράδειγμα, εάν το νερό ενός ατόμου είναι μισό άδειο, αυτό δεν σημαίνει ότι υπάρχει κανένας άλλος. Ωστόσο, αν ο ψύκτης νερού είναι άδειος, είναι άδειος για όλους.

Οι άνθρωποι είναι αντικειμενικά παραδείγματα της κλάσης "Πρόσωπο".

Ο ψύκτης νερού είναι σαν μια στατική μεταβλητή.

Τα μπουκάλια του νερού είναι σαν μεταβλητές στιγμής.

Μέχρι εδώ καλά. Αλλά μέχρι στιγμής έχουμε μόνο ένα xlass. Τώρα πείτε ότι υπάρχουν επίσης σκύλοι στο δωμάτιο, καθώς και ένας τροφοδότης νερού που μόνο τα σκυλιά μπορούν να λειτουργήσουν.

Αυτό κάνει τον τροφοδότη νερού σκύλου μια στατική μεταβλητή.

Κάθε σκύλος είναι μια περίπτωση ενός αντικειμένου κατηγορίας Dog.

Τα σκυλιά δεν μπορούν να πάρουν νερό από τον ψύκτη νερού των ανθρώπων (εκτός αν κάποιος τους βοηθάει) και ομοίως δεν μπορούν να φτάσουν στο μπουκάλι νερού ενός ατόμου εκτός αν το άτομο επιλέξει να τους βοηθήσει.

Σημειώστε ότι τα σκυλιά δεν έχουν μεταβλητή στιγμής με βάση το νερό. Δεν έχουν τα χέρια να χειρίζονται ένα μπουκάλι νερού.

Ελπίζω ότι αυτή η μικρή αναλογία βοηθά.


Απάντηση 3:

Δεδομένου ότι και οι δύο μεταβλητές έχουν προδιαγραφείσα πρόσβαση "δημόσιας":

  • Μια μεταβλητή instance είναι προσπελάσιμη από instancesA static μεταβλητή είναι προσβάσιμη από τις κλάσεις

Πάρτε αυτό το αυτοκίνητο κατηγορία για παράδειγμα:

// Μια κλάση αυτοκινήτου δημόσια τάξη Αυτοκίνητο {public static int numGears = 5; // static μεταβλητό δημόσιο int currentGear = 3; // παράδειγμα μεταβλητή} // ένα παράδειγμα της κατηγορίας αυτοκινήτου Car audi = νέο αυτοκίνητο (); System.out.println (Car.numGears) // εκτυπώσεις 5 System.out.println (audi.currentGear) // εκτυπώσεις 3 System.out.println (Car.currentGear) // σφάλμα σύνταξης. System.out.println (audi.numGear) // εκτυπώνει 3 αλλά συντάσσεται με μια προειδοποίηση

Απάντηση 4:

Δεδομένου ότι και οι δύο μεταβλητές έχουν προδιαγραφείσα πρόσβαση "δημόσιας":

  • Μια μεταβλητή instance είναι προσπελάσιμη από instancesA static μεταβλητή είναι προσβάσιμη από τις κλάσεις

Πάρτε αυτό το αυτοκίνητο κατηγορία για παράδειγμα:

// Μια κλάση αυτοκινήτου δημόσια τάξη Αυτοκίνητο {public static int numGears = 5; // static μεταβλητό δημόσιο int currentGear = 3; // παράδειγμα μεταβλητή} // ένα παράδειγμα της κατηγορίας αυτοκινήτου Car audi = νέο αυτοκίνητο (); System.out.println (Car.numGears) // εκτυπώσεις 5 System.out.println (audi.currentGear) // εκτυπώσεις 3 System.out.println (Car.currentGear) // σφάλμα σύνταξης. System.out.println (audi.numGear) // εκτυπώνει 3 αλλά συντάσσεται με μια προειδοποίηση