Παράδειγμα διερευνητή staticField και staticInitializer

Το παράδειγμα αυτό επιδεικνύει τη χρήση του στοιχείου δεδομένων staticField και του τμήματος κώδικα διερευνητή staticInitializer.

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

Δείτε τι κάνει αυτός ο διερευνητής:
  1. Χρησιμοποιώντας τον ορισμό στατικού πεδίου, ο διερευνητής δημιουργεί ένα στατικό πεδίο του είδους Date σε κάθε ελεγχόμενη κλάση. Η απόδοση αρχικών τιμών στο στατικό πεδίο γίνεται με κλήση της new Date();.
  2. Στο τμήμα κώδικα staticInitializer, ο διερευνητής θέτει στη χρήση του πεδίου "Date" μιας ελεγχόμενης κλάσης την τιμή "μηδενικός χρόνος" (Ιανουάριος 1970), όταν φορτώνεται.
  3. Στο τμήμα κώδικα entry, ο διερευνητής ελέγχει πότε πραγματοποιήθηκε η προηγούμενη ενημέρωση και δημιουργεί μια αναφορά, εάν αυτή πραγματοποιήθηκε πριν από περισσότερο από ένα δευτερόλεπτο. (Λόγω των κανόνων στόχευσης, το τμήμα κώδικα entry εκτελείται μόνο σε λειτουργίες κατασκευής.)
  4. Τέλος, ο διερευνητής ενημερώνει την τιμή της χρήσης του πεδίου "Date", ορίζοντάς την ως "now".

Ο διερευνητής χρησιμοποιεί τον ορισμό του στατικού πεδίου για να δημιουργήσει ένα νέο στατικό πεδίο σε κάθε ελεγχόμενη κλάση. Συγκριτικά, η χρήση ενός τμήματος στην εμβέλεια κλάσης για τη δήλωση του πεδίου "Date" θα είχε ως αποτέλεσμα μία μεμονωμένη χρήση του "Date" που θα εμφανίζεται στην παραγόμενη κλάση στην οποία περιέχονται τα τμήματα κώδικα διερευνητή, ανεξάρτητα από το πλήθος των κλάσεων στις οποίες εφαρμόζεται ο διερευνητής. Μπορείτε να το κάνετε αυτό εάν θέλετε να παρακολουθήσετε την καθυστέρηση ημερομηνίας μεταξύ της δημιουργίας χρήσεων μίας οποιασδήποτε ελεγχόμενης κλάσης, αντί να παρακολουθείτε την καθυστέρηση μεταξύ της δημιουργίας χρήσεων κάθε ελεγχόμενης κλάσης.

Αυτός ο διερευνητής ορίζεται από τις ακόλουθες καταχωρήσεις στη λειτουργία επεξεργασίας Probekit:
  • Πλήρως προσδιορισμένο είδος Java για στατικό πεδίο (πατήστε με το δεξί κουμπί του ποντικιού στο Διερευνητής στο τμήμα παραθύρου διακλάδωσης, έπειτα πατήστε Δημιουργία > Στατικό πεδίο και καταχωρήστε την τιμή αυτή):

    java.util.Date

  • Στόχος
    • Είδος στόχου
    • Πακέτο: com.sample* (Εδώ χρησιμοποιήστε ένα πραγματικό όνομα πακέτου.)
    • Κλάση: *
    • Μέθοδος: <init>
    • Υπογραφή μεθόδου: *
  • Στόχος (για να καταχωρήσετε τις τιμές αυτές, επιλέξτε Προσθήκη και στη συνέχεια Τροποποίηση στο τμήμα παραθύρου τροποποίησης):
    • Είδος στόχου
    • Πακέτο: *
    • Κλάση: *
    • Μέθοδος: *
    • Υπογραφή μεθόδου: *
  • Τμήμα κώδικα (επιλέξτε Τμήμα κώδικα στο τμήμα παραθύρου διακλάδωσης για να καταχωρήσετε τις τιμές αυτές):
    • Είδος τμήματος κώδικα: entry
    • Στοιχεία δεδομένων:
      • Είδος δεδομένων: staticField, Όνομα: lastInstanceDate
      • Είδος δεδομένων: className, Όνομα: clname
    • Κώδικας Java:

      java.util.Date d = new java.util.Date();
      long now = d.getTime();
      long prev = lastInstanceDate.getTime();
      if (prev != 0 && prev + 1000 < now) {
      System.out.println("[" + clname + " instance after > 1 second]");
      }
      lastInstanceDate.setTime(now);

    • Τμήμα κώδικα (πατήστε με το δεξί κουμπί του ποντικιού στο Διερευνητής και επιλέξτε Δημιουργία > Τμήμα κώδικα για να καταχωρήσετε τις τιμές αυτές):
      • Είδος τμήματος κώδικα: staticInitializer
      • Στοιχεία δεδομένων:
        • Είδος δεδομένων: staticField, Όνομα: lastInstanceDate
        • Είδος δεδομένων: className, Όνομα: clname
      • Κώδικας Java:

                 lastInstanceDate.setTime(0);
                 System.out.println("[" + clname + " class loaded]");