Eksempel på staticField og en staticInitializer-probe

Dette eksempelet viser hvordan du bruker staticField-dataelementet og staticInitializer-probefragmentet.

I eksempelet følger proben med på når forekomster i en klasse blir opprettet. Hvis en forekomst blir opprettet over et sekund etter den forrige forekomsten i den klassen, skriver proben en loggmelding.

Proben gjør følgende:
  1. Proben bruker definisjonen av det statiske feltet og oppretter et statisk felt av typen Dato i hver probebehandlet klasse. Det statiske feltet blir initialisert ved å kalle opp new Date();.
  2. I staticInitializer-fragmentet setter proben Dato-forekomsten til en probebehandlet klasse til "nulltidspunktet" (januar, 1970) når den blir lastet inn.
  3. I entry-fragmentet sjekker proben når forrige oppdatering ble utført, og utsteder en rapport hvis oppdateringen ble utført for over et sekund siden. (På grunn av målreglene kjøres entry-fragmentet bare i konstruktører.)
  4. Til slutt oppdaterer proben verdien av Dato-forekomsten til "now."

Proben bruker definisjonen av det statiske feltet til å opprette et nytt statisk felt i hver probebehandlet klasse. Til sammenlikning vil bruk av et fragment i klasseomfang til å deklarere Dato-feltet, resultere i at en enkelt forekomst av Dato blir vist i den genererte klassen som inneholder probefragmentene, uansett hvor mange klasser proben blir brukt på. Du kan gjøre dette hvis du vil spore tidsforsinkelsen mellom opprettelsen av forekomster i en probebehandlet klasse, i stedet for å spore forsinkelsen mellom opprettelsen av forekomster i hver probebehandlet klasse.

Denne proben er definert av følgende oppføringer i Probekit-redigeringsprogrammet:
  • Fullt kvalifisert Java-type for statisk felt (høyreklikk på Probe i treruten, og klikk deretter på Ny(tt) > Statisk felt for å oppgi denne verdien):

    java.util.Date

  • Mål (velg Mål i treruten og klikk deretter på Rediger for å oppgi disse verdiene):
    • Måltype: include
    • Pakke: com.sample* (Bruk et faktisk pakkenavn her.)
    • Klasse: *
    • Metode: <init>
    • Metodesignatur: *
  • Mål (klikk på Legg til og deretter Rediger i redigeringsruten for å oppgi disse verdiene:
    • Måltype: exclude
    • Pakke: *
    • Klasse: *
    • Metode: *
    • Metodesignatur: *
  • Fragment (velg Fragment i treruten for å oppgi disse verdiene):
    • 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 + " forekomst etter > 1 sekund]");
      }
      lastInstanceDate.setTime(now);

    • Fragment (høyreklikk på Probe og velg Ny(tt) > Fragment for å oppgi disse verdiene):
      • Fragmenttype: staticInitializer
      • Dataelementer:
        • Datatype: staticField, Navn: lastInstanceDate
        • Datatype: className, Navn: clname
      • Java-kode:

                 lastInstanceDate.setTime(0);
                 System.out.println("[" + clname + " innlastet klasse]");