Platnost proměnných

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Přidány příklady a podrobnější popis.)
(Instanční a třídní atributy — obrázek: Přidán příklad s obrázky.)
 
Řádka 52: Řádka 52:
  
 
== Instanční a třídní atributy — obrázek ==
 
== Instanční a třídní atributy — obrázek ==
 +
Vezměme následující kód:
 +
class Zelva {
 +
    int i = 0;
 +
    static int t = 0;
 +
 +
    void f() {
 +
        int lp = 0;
 +
    }
 +
}
  
 +
První obrázek popisuje stav před vytvořením první instance:
 +
* Zatím je k dispozici jen třídní atribut <code>t</code>.
 +
* Instanční atribut <code>i</code> se zatím nevytváří.
 +
[[Image:var_static_inst1.png]]
  
 +
Druhý obrázek popisuje stav po vytvoření první instance:
 +
* Instanční atribut <code>i</code> se vytvořil pro první vytvořenou instanci.
 +
* Instance sdílí hodnotu třídního atributu <code>t</code> (již dříve vytvořeného).
 +
[[Image:var_static_inst2.png]]
 +
 +
Třetí obrázek popisuje stav po vytvoření druhé instance:
 +
* Instanční atribut <code>i</code> se vytvořil pro první i druhou vytvořenou instanci.
 +
* Každá má svou hodnotu <code>i</code>.
 +
* Obě instance sdílí hodnotu třídního atributu <code>t</code> (již dříve vytvořeného).
 +
[[Image:var_static_inst3.png]]
  
 
== Lokální proměnné ==
 
== Lokální proměnné ==

Aktuální verze z 5. 4. 2016, 11:19


Obsah

Třídní atributy

Typické použití — počítač instancí
public class Auto {
    private static int pocetAut = 0;

    ...

    public Auto() {
        Auto.pocetAut++;
        ...
    }

    ...
}


Instanční atributy


Příklady: Instanční × třídní atributy

Příklad 1 — Škoda Octavia

  • Množství paliva v nádrži je instanční atribut.
    • Jedna Octavia má jiné množství paliva v nádrži než jiná.
    • Nemá smysl mluvit obecně o množství paliva v nádrži Škody Octavia, protože každý konkrétní automobil má množství paliva aktuálně jiné.
  • Doporučený interval výměny svíček je třídní atribut.
    • Interval platí pro všechny automobily daného typu (dané motorizace).
    • Pokud výrobce interval změní, bude platit opět pro všechny automobily daného typu — i ty už vyrobené, i ty, které teprve vyrobíme.

Příklad 2 — Lak na nehty

  • Množství laku v lahvičce je instanční atribut.
    • Koupím-li novou lahvičku, bude plná. Starší lahvička je již skoro vyčerpaná.
    • Nemá smysl mluvit obecně o množství laku, protože hodnota je pro každou lahvičku jiná.
  • Doporučený odlakovač je třídní atribut.
    • Platí pro všechny lahvičky (instance) daného typu laku.
    • Pokud výrobce změní doporučení, bude platit opět pro všechny instance daného typu — i ty už nakoupené, i ty, které teprve vyrobíme/nakoupíme.


Instanční a třídní atributy — obrázek

Vezměme následující kód:

class Zelva {
    int i = 0;
    static int t = 0;

    void f() {
        int lp = 0;
    }
}

První obrázek popisuje stav před vytvořením první instance:

Var static inst1.png

Druhý obrázek popisuje stav po vytvoření první instance:

Var static inst2.png

Třetí obrázek popisuje stav po vytvoření druhé instance:

Var static inst3.png

Lokální proměnné

Úkol — Co je špatně na následujícím kódu?

Kód má počítat celkovou částku na výplaty.

for (Zamestnanec z : zamestnanci) {
    int celkem += z.getCastka();
}
System.out.println(celkem);

Jak kód opravíte?


Související stránky

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje