Een voorbeeld van een staticField en een staticInitializer-probe

In dit voorbeeld ziet u hoe u het gegevensitem staticField en het probefragment staticInitializer gebruikt.

In het voorbeeld houdt de probe bij wanneer instances van een klasse worden gemaakt. Als er een instance van die klasse wordt gemaakt, schrijft de probe een bericht in het logboek.

De probe doet het volgende:
  1. De probe maakt aan de hand van de statisch-velddefinitie een statisch veld van het type Date in alle gecontroleerde klassen. Het statische veld wordt geïnitialiseerd door new Date(); aan te roepen.
  2. In het staticInitializer-fragment stelt de probe de Date-instance van een gecontroleerde klasse in op het begin van de Java-tijdrekening (januari 1970).
  3. In het entry-fragment controleert de probe of de vorige update is uitgevoerd en verzendt een rapport als de update meer dan een seconde geleden is uitgevoerd. (Vanwege de doelregels wordt het entry-fragment alleen in constructors uitgevoerd.)
  4. Ten slotte werkt de probe de waarde van de Date-instance bij tot "now."

De probe gebruikt de statisch-velddefinitie om in alle gecontroleerde klassen een nieuw statisch veld te maken. Als u een fragment op klassenniveau zou gebruiken om een Date-veld te declareren, zou er één instance van Date verschijnen in de gegenereerde klasse met de probefragmenten, ongeacht het aantal klassen waarop de probe wordt toegepast. U kunt hiermee bijhouden hoeveel tijd verstrijkt tussen het maken van instances van een gekozen gecontroleerde klasse in plaats van de verstreken tijd tussen het maken van instances van alle klassen.

De probe wordt in de Probekit-editor gedefinieerd aan de hand van de volgende gegevens:
  • Volledig gekwalificeerd Java-type voor statisch veld (klik met de rechtermuisknop op Probe in het structuuroverzicht en vervolgens op Nieuw > statisch veld om de waarde in te voeren):

    java.util.Date

  • Doel (selecteer Doel in het structuuroverzicht om de waarden in te voeren en klik op Bewerken):
    • Doeltype: opnemen
    • Pakket: com.voorbeeld* (Gebruik hier een echte pakketnaam.)
    • Klasse: *
    • Methode: <init>
    • Methodehandtekening: *
  • Doel (klik op Toevoegen om de waarden in te voeren en op Bewerken in het bewerkingsvenster):
    • Doeltype: uitsluiten
    • Pakket: *
    • Klasse: *
    • Methode: *
    • Methodehandtekening: *
  • Fragment (selecteer Fragment in het structuuroverzicht om de waarden in te voeren):
    • Fragmenttype: entry
    • Gegevensitems:
      • Gegevenstype: staticField, Naam: lastInstanceDate
      • Gegevenstype: className, Naam: clname
    • Java-code:

      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 na > 1 seconde]");
      }
      lastInstanceDate.setTime(now);

    • Fragment (klik met de rechtermuisknop op Probe en klik op Nieuw > Fragment om de waarden in te voeren):
      • Fragmenttype: staticInitializer
      • Gegevensitems:
        • Gegevenstype: staticField, Naam: lastInstanceDate
        • Gegevenstype: className, Naam: clname
      • Java-code:

                 lastInstanceDate.setTime(0);
                 System.out.println("[Klasse " + clname + " geladen]");