Platnost proměnných
Z MiS
				
				
				(Rozdíly mezi verzemi)
				
																
				
				
								
				|  (→Třídní proměnné:  Přidáno klíčové slovo static.) |  (→Instanční a třídní atributy — obrázek:  Přidán příklad s obrázky.) | ||
| (Není zobrazena 1 mezilehlá verze od 1 uživatele.) | |||
| Řádka 1: | Řádka 1: | ||
| − | [[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Java]] | + | [[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Java]][[Category:Stránky_s_obrázky]] | 
| − | == Třídní  | + | == Třídní atributy == | 
| * Popisují vlastnosti celé třídy. | * Popisují vlastnosti celé třídy. | ||
| − | *  | + | * Jejich hodnota je společná pro všechny objekty (instance) dané třídy. | 
| * Jsou k dispozici po celou dobu spuštění programu. | * Jsou k dispozici po celou dobu spuštění programu. | ||
| * Nejsou závislé na existenci instance. | * Nejsou závislé na existenci instance. | ||
| * Označují se klíčovým slovem: <code>static</code> | * Označují se klíčovým slovem: <code>static</code> | ||
| + | ; Typické použití — počítač instancí | ||
|   public class Auto { |   public class Auto { | ||
|       [[Java: Modifikátory přístupu|private]] '''static''' int pocetAut = 0; |       [[Java: Modifikátory přístupu|private]] '''static''' int pocetAut = 0; | ||
| Řádka 21: | Řádka 22: | ||
|   } |   } | ||
| − | |||
| + | == Instanční atributy == | ||
| + | * Popisují vlastnosti konkrétní instance. | ||
| + | * Každá instance má svoji vlastní hodnotu. | ||
| + | * Vytváří se při vytvoření instance a s ní také zanikají, jsou k dispozici po celou dobu existence instance. | ||
| + | * Není potřeba psát žádné klíčové slovo. | ||
| + | |||
| + | |||
| + | == Příklady: Instanční × třídní atributy == | ||
| + | <div class="Priklad"> | ||
| + | Příklad 1 — Škoda Octavia | ||
| + | * <code>Množství paliva v nádrži</code> 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é. | ||
| + | * <code>Doporučený interval výměny svíček</code> 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. | ||
| + | </div> | ||
| + | <div class="Priklad"> | ||
| + | Příklad 2 — Lak na nehty | ||
| + | * <code>Množství laku v lahvičce</code> 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á. | ||
| + | * <code>Doporučený odlakovač</code> 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. | ||
| + | </div> | ||
| + | |||
| + | |||
| + | == 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é == | ||
| + | * Pomocné proměnné, které vytváříme v rámci kódu metod. | ||
| + | * Jsou k dispozici pouze v bloku, ve kterém byly vytvořeny (metoda, tělo cyklu, kód podmíněného příkazu,...) | ||
| + | |||
| + | <div class="Priklad"> | ||
| + | ; Ú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? | ||
| + | </div> | ||
| == Související stránky == | == Související stránky == | ||
| * [[Java: Zápis tříd]] | * [[Java: Zápis tříd]] | ||
Aktuální verze z 5. 4. 2016, 11:19
| Obsah | 
Třídní atributy
- Popisují vlastnosti celé třídy.
- Jejich hodnota je společná pro všechny objekty (instance) dané třídy.
- Jsou k dispozici po celou dobu spuštění programu.
- Nejsou závislé na existenci instance.
-  Označují se klíčovým slovem: static
- Typické použití — počítač instancí
public class Auto {
    private static int pocetAut = 0;
    ...
    public Auto() {
        Auto.pocetAut++;
        ...
    }
    ...
}
Instanční atributy
- Popisují vlastnosti konkrétní instance.
- Každá instance má svoji vlastní hodnotu.
- Vytváří se při vytvoření instance a s ní také zanikají, jsou k dispozici po celou dobu existence instance.
- Není potřeba psát žádné klíčové slovo.
Příklady: Instanční × třídní atributy
Příklad 1 — Škoda Octavia
-  Množství paliva v nádržije 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íčekje 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čceje 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:
-  Zatím je k dispozici jen třídní atribut t.
-  Instanční atribut ise zatím nevytváří.
Druhý obrázek popisuje stav po vytvoření první instance:
-  Instanční atribut ise vytvořil pro první vytvořenou instanci.
-  Instance sdílí hodnotu třídního atributu t(již dříve vytvořeného).
Třetí obrázek popisuje stav po vytvoření druhé instance:
-  Instanční atribut ise vytvořil pro první i druhou vytvořenou instanci.
-  Každá má svou hodnotu i.
-  Obě instance sdílí hodnotu třídního atributu t(již dříve vytvořeného).
Lokální proměnné
- Pomocné proměnné, které vytváříme v rámci kódu metod.
- Jsou k dispozici pouze v bloku, ve kterém byly vytvořeny (metoda, tělo cyklu, kód podmíněného příkazu,...)
- Ú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?



