Izpitno vprašanje RAČ2PRA 600

Iz MaFiRaWiki

GFDL Avtor tega članka je študent/ka UrskaBerce.

Pripravil/a ga je pri predmetu Računalništvo 2 (FMF PRA).


Kljub temu ste vsi vabljeni k urejanju in popravkom, saj je bistvo wikija ravno v sodelovalnem delu.


Vprašanje

|Vpr. 600| Kaj so objektne in statične spremenljivke? Na primeru pokaži razliko med njimi?

Odgovor

Vemo že, da vsak objekt sestoji iz objektnih komponent in objektnih metod. Poleg tega obstajajo v Javi še statične metode in statične komponente.
(Statične metode se v neobjektnih programskih jezikih imenujejo "funkcije" ali "procedure", statične komponente pa se imenujejo "globalne spremenljivke".Razlika med statičnimi in objektnimi komponentami. Obravnavajmo razred Foo:

  1. public class Foo {
  2. static int x = 12;
  3. int y;
  4.  
  5. public Foo(int z) {
  6. this.y = z;
  7. }
  8. }

Razred ima eno statično komponento x in eno objektno (nestatično) komponento y. Kako razumeti vsako od njih?

  • Velja načelo:

Statične komponente so vsebovane v razredu. Objektne komponente pa v objektih.

Vsak objekt vsebuje svojo kopijo objektnih komponent, vsaka statična komponenta pa vedno obstaja v eni sami kopiji. Denimo, da izvedemo naslednja ukaza:

  1. Foo t1 = new Foo(42);
  2. Foo t2 = new Foo(30);

Potem imamo dva objekta, zato imamo dve kopiji komponente y, po eno v vsakem objektu. Ker je komponenta x statična, vedno obstaja v eni sami kopiji, tudi če nimamo nobenih objektov razreda Foo:
Dan je razred Zajec!

  1. public class Zajec {
  2. static double min_masa = 1.5; // najmanjsa dovoljena masa za zakol v kg
  3. static int max_starost = 48; // najvecja dopustna starost zajkle v mesecih
  4.  
  5. String serijska; // serijska stevilka zajca
  6. boolean spol; // true = moski, false = zenska
  7. double masa; // masa zajca ob zadnjem pregledu
  8.  
  9. public Zajec(String s, boolean sp, double m) {
  10. serijska = s; spol = sp; masa = m;
  11. }
  12.  
  13. // tu bi napisali ostale konstruktorje in metode
  14. ...
  15. }

Denimo, da izvedemo naslednje ukaze:

  1. Zajec z1 = new Zajec("1238-12-0", false, 0.12);
  2. Zajec z2 = new Zajec("1238-12-1", true, 0.09);
  3. Zajec z3 = new Zajec("1238-12-2", true, 0.11);
  4. Zajec.min_masa = 1.4;
  5. z1.masa = 0.10;

Kako vemo, ali naj bo komponenta statična ali objektna? Statične komponente so tiste, ki so skupne za celoten program. Na primer, v prejšnji vaji je min_masa statična komponenta, ker je najmanjša dovoljena masa zajca število, ki je skupno za ves program (za vse zajce). Komponenta masa je objektna, ker ima vsak zajec svojo maso.

Osebna orodja