staticField- ja staticInitializer-luotausesimerkki

Tässä esimerkissä esitellään staticField-tietoalkion ja staticInitializer-luotausfragmentin käyttöä.

Tässä esimerkissä luotaus seuraa, milloin luokan ilmentymiä luodaan. Jos ilmentymä luodaan yli sekunnin myöhemmin kuin saman luokan edellinen ilmentymä, luotaus kirjoittaa lokisanoman.

Luotauksen toiminta on kuvattu seuraavassa:
  1. Staattisen kentän määrityksen avulla luotaus luo jokaiseen luodattuun luokkaan staattisen kentän, jonka tyyppi on Date. Staattinen kenttä alustetaan kutsulla new Date();.
  2. staticInitializer-fragmentissa luotaus määrittää luodatun luokan Date-ilmentymän "nolla-aikaan" (tammikuu 1970), kun se ladataan.
  3. entry-fragmentissa luotaus tarkistaa, milloin edellinen päivitys on toteutettu, ja lähettää raportin, jos päivityksestä on kulunut yli sekunti. (Kohdesääntöjen takia entry-fragmentti ajetaan vain konstruktoreissa.)
  4. Lopuksi luotaus päivittää Date-ilmentymän arvoksi "nyt."

Luotaus luo uuden staattisen kentän jokaiseen luodattuun luokkaan staattisen kentän määrityksen avulla. Sen sijaan Date-kentän esittely luokan vaikutusalueen fragmentin avulla tuottaa yhden Date-ilmentymän, joka näkyy muodostetussa luokassa, jossa luotausfragmentit ovat, siitä huolimatta, moneenko luokkaan luotausta käytetään. Voit tehdä tämän, jos haluat jäljittää minkä tahansa luodatun luokan ilmentymien luonnin aikaviivettä sen sijaan, että jäljittäisit kunkin luodatun luokan ilmentymien luontien välistä viivettä.

Tämä luotaus on määritetty Probekit-muokkausohjelmassa seuraavien merkintöjen avulla:
  • Staattisen kentän tarkka Java-tyyppi (napsauta hiiren kakkospainikkeella Luotaus-vaihtoehtoa rakenne-esityksessä, valitse sitten Uusi > Staattinen kenttä ja anna tämä arvo):

    java.util.Date

  • Kohde (voit antaa nämä arvot valitsemalla rakenneruudussa Kohde-vaihtoehdon ja valitsemalla sitten Muokkaa):
    • Kohteen tyyppi: include
    • Paketti: com.sample* (Käytä tässä oikean paketin nimeä.)
    • Luokka: *
    • Metodi: <init>
    • Metodin allekirjoitus: *
  • Kohde (voit antaa nämä arvot valitsemalla muokkausruudussa Lisää ja valitsemalla sitten Muokkaa):
    • Kohteen tyyppi: exclude
    • Paketti: *
    • Luokka: *
    • Metodi: *
    • Metodin allekirjoitus: *
  • Fragmentti (anna nämä arvot valitsemalla rakenneruudussa Fragmentti-vaihtoehto):
    • Fragmentin tyyppi: entry
    • Tietoalkiot:
      • Tietotyyppi: staticField, Nimi: lastInstanceDate
      • Tietotyyppi: className, Nimi: clname
    • Java-koodi:

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

    • Fragmentti (napsauta hiiren kakkospainikkeella Luotaus-vaihtoehtoa, valitse Uusi > Fragmentti ja määritä seuraavat arvot):
      • Fragmentin tyyppi: staticInitializer
      • Tietoalkiot:
        • Tietotyyppi: staticField, Nimi: lastInstanceDate
        • Tietotyyppi: className, Nimi: clname
      • Java-koodi:

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