Eksempel på en staticField- og en staticInitializer-probe

Eksemplet illustrerer brugen af dataelementet staticField og probefragmentet staticInitializer.

I eksemplet holder proben styr på, hvornår der oprettes forekomster af en klasse. Hvis der oprettes en forekomst mere end ét sekund efter den forrige forekomst i den pågældende klasse, skriver proben en logmeddelelse.

Proben udfører følgende:
  1. Ved hjælp af definitionen af det statiske felt opretter proben et statisk felt af typen Dato i alle probede klasser. Det statiske felt initialiseres med kaldet new Date();.
  2. I fragmentet staticInitializer indstiller proben datoforekomsten for en probet klasse til "time zero" (januar 1970), når det indlæses.
  3. I fragmentet entry kontrollerer proben, om den forrige opdatering er blevet udført, og udsender en rapport, hvis opdateringen blev udført for mere end et sekund siden. Fragmentet entry udføres kun i konstruktørerne på grund af målreglerne.
  4. Til slut opdaterer proben værdien for datoforekomsten til "now."

Proben anvender den statiske feltdefinition til at oprette et nyt statusfelt i alle probede klasser. Til sammenligning vil brug af et fragment ved klasseomfang til erklæring af feltet Dato resultere i en enkelt forekomst, hvor Dato vises i den genererede klasse, som indeholder probefragmenter - uanset hvor mange klasser proben anvendes på. Det kan du gøre, hvis du vil spore tidsforskydningen mellem oprettelsen af forekomster af en vilkårlig probet klasse i stedet for at spore tidsforskydningen mellem oprettelsen af hver enkelt probet klasse.

Proben defineres af følgende indgange i Probekit Editor:
  • Fuldstændig Java-type til statisk felt (højreklik på Probe i delvinduet med træstrukturen, klik derefter på Ny > Statisk felt for at angive denne værdi):

    java.util.Date

  • Mål (hvis du vil angive disse værdier, skal du vælge Mål i delvinduet med træstrukturen og derefter klikke på Redigér):
    • Måltype: include
    • Pakke: com.sample* (brug et rigtigt pakkenavn her).
    • Klasse: *
    • Metode: <init>
    • Metodesignatur: *
  • Mål (hvis du vil angive disse værdier, skal du klikke på Tilføj, derefter Redigér i redigeringsvinduet):
    • Måltype: exclude
    • Pakke: *
    • Klasse: *
    • Metode: *
    • Metodesignatur: *
  • Fragment (vælg Fragment i delvinduet med træstrukturen for at angive disse værdier):
    • Fragmenttype: entry
    • Dataelementer:
      • Datatype: staticField, Navn: lastInstanceDate
      • Datatype: className, Navn: clname
    • Java-kode:

      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);

    • Fragment (højreklik på Probe, og vælg Ny > Fragment for at angive disse værdier):
      • Fragmenttype: staticInitializer
      • Dataelementer:
        • Datatype: staticField, Navn: lastInstanceDate
        • Datatype: className, Navn: clname
      • Java-kode:

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