JAVA – Proměnné a řídicí příkazy
Proměnné
Proměnné se deklarují pomocí příkazu ve tvaru
typ
název_proměnné;
Proměnnou se inicializují pomocí příkazu ve tvaru
typ prom =
hodnota;
Primitivní datové typy
Primitivní datové typy nejsou objekty ve smyslu objektového programování, ale spíše normální binární hodnoty.
- Boolean - Reprezentuje hodnoty true/false
- Char - Znak
- Byte - 8bitové celé číslo
- Short - Krátké celé číslo
- Int - Celé číslo
- Long - Dlouhé celé číslo
- Float - Číslo s plovoucí desetinou čárkou s jednoduchou přesností
- Double - Číslo s plovoucí desetinou čárkou s dvojitou přesností
| Typ | Velikost v bitech | Rozsah |
|---|---|---|
| Byte | 8 | -128 až 127 |
| Short | 16 | -32 768 až 32 767 |
| Int | 32 | -2 147 483 648 až 2 147 483 647 |
| Long | 64 | -9 223 372 036 854 775 808 až 9 223 372 036 854 775 807 |
Referenční datové typy
Referenční datové typy jsou objekty a pole. Hodnota referenční proměnné je odkaz (reference) do paměti na místo, kde je objekt (nebo pole) uložen. V jiných programovacích jazycích se používá pro tento účel pointerů (ukazatelů do paměti), v Javě se přímo s pamětí nepracuje, místo pointerů se používají referenční proměnné.
Jelikož referenční proměnná obsahuje pouze odkaz na objekt, nikoli objekt samotný, přiřazením její hodnoty jiné proměnné se přiřadí opět pouze reference na původní objekt, nikoli jeho samotná data tak, jak to bylo u primitivních datových typů. Porovnejte přiřazení v následujícím příkladu (pokud nerozumíte syntaxi v druhé polovině příkladu, nelekejte se, k objektům se dostaneme v dalších dílech).
Možnost přetypování
U přetypování musím převádět na odpovídající typy, nebo může dojít ke ztrátě informací. Například pokud použiju přetypování z double nebo long na int.
double x,
y;
(int) (x /
y);
Aritmetické operátory
| + | Sčítání |
| - | Odečítání |
| * | Násobení |
| / | Dělení |
| % | Modulo (zbytek po dělení) |
| ++ | Inkrementace (zvýší o 1) |
| -- | Dekrementace (sníží o 1) |
Relační operátory
| == | Rovná se |
| != | Nerovná se |
| > | Větší než |
| < | Menší než |
| >= | Větší nebo rovno |
| <= | Menší nebo rovno |
Logické operátory
| & | AND |
| | | OR |
| ^ | XOR (výhradní OR) |
| || | Zkratové OR |
| && | Zkratové AND |
| ! | NOT |
Logické operátory lze použít například následovně:
if (b1 |
b2)
// Příkaz...
(Pokud je b1 true nebo b2, tak se podmínka splní)
Zkratové operátory se používají například následovně:
if (a ==
1 &&
b == 2
|| b >
3)
// Příkaz...
Přiřazení
Operátor přiřazení se zapisuje pomocí:
Proměnná = výraz;
Typ proměně musí být kompatibilní s typem, který nabývá výraz.
Nemůžu tak dát například text do intu.
Zároveň operátor umožňuje řetězit:
Prom1 = Prom2 = Prom3 = 7;
Zkrácené přiřazení
Jazyk Java umožňuje používat operátory zkráceného přiřazení,
které zjednoduší psaní kódu.
Přiřazení:
x = x +
10;
Zkrácené přiřazení:
x += 10;
Všechny operátory zkráceného přiřazení:
| += | -= | *= | /= |
| %= | &= | |= | ^= |
Příkazy if
if (podmínka)
{
Příkaz...
(pokud je podmínka pravdivá provede se cíl příkazu)
} else {
(else není povinný)
Příkaz...
(pokud podmínka není pravdivá provede se příkaz, je li
else uveden)
}
Vnořený if
Vnořený if je příkaz if, který je obsažen v jiném příkazu if. V programování jsou vnořené if velmi časté a je nutné pamatovat, že else odkazuje vždy na nejbližší příkaz if.
Else
Else funguje jak je již zmíněno nahoře. Dává se za if a provede se ve chvíli, kdy není podmínka splněna. Další možností je else if, který funguje jako else, ale má v sobě další parametry jako má if.
Switch
Příkaz switch poskytuje vícenásobné větvení. To znmená, že umožňuje programu volit si mezi různými možnostmi. Lze sestavit i z příkaz if, ale použití switch je efektivnější.
Funguje tak, že switch dostane určitou hodnotu a hledá shodu. Jakmile je shoda nalezena, provede příkaz uvnitř.
Switch lze udělat také vnořený (case bude obsahovat další switch).
switch (výraz)
{
case
moznost1:
Příkaz...
(Většinou se dává na konec break, aby ukončil cyklus)
case
moznost2:
Příkaz...
default:
(Default je základní hodnota, provede se tak, pokud se
žádná možnost neshoduje s hodnotou)
Příkaz...
}
Cykly for
Obsahuje řídící proměnnou, která se při běhu mění. Cyklus má pevný počet opakování (počítá se díky již zmíněné řídící proměnné). Pro příklad se přičítá (i++) a dokud nedosáhne určité hodnoty, se kterou již nesplní podmínku (i < 5) tak se cyklus opakuje.
for (
inicializace;
podmínka;
interakce) {
Příkaz...
}
For-each
Cyklus for-each slouží k tomu, když je potřeba prozkoumat každý prvek pole od začátku do konce.
Příklad:
int cisla[] =
{ 1, 2, 3, 4, 5 };
int soucet =
0;
for(int
i: cisla)
soucet += i;
While
Příkaz while se opakuje do doby, dokud není splněna podmínka
while (
podmínka
) {
Příkaz...
(V příkazu upravuje podmínku)
}
Do-while
Oproti cyklům for a while, kde se testuje podmínka na začátku cyklu, tak ji cyklus do while kontroluje až na konci. Příkaz je tak tedy spuštěn minimálně jednou.
do {
Příkaz...
} while (podmínka);
Vnořené cykly
Vnořený cyklus je cyklus, který je obsažen v jiném cyklu. Vnořené cykly umožňují řešit nejrůznější programátorské problémy (například neexistující přítelkyně) a jsou klíčovou součástí programování.
Break
Příkazem break lze vynutit okamžité ukončení cyklu. Program přitom přeskočí veškerý zbývající kód v těle cyklu a pokračuje dalším příkazem, který následuje za cyklem.
Continue
Příkaz continue je v zásadě doplňkem příkazu break. Příkaz continue vynutí, aby proběhla další integrace v cyklu. Při tom přeskočí následující kód a pokračuje až u podmínky cyklu (například u for přeskočí kód a pokračuje až v dalším cyklu).
Kvíz
BETAJaký je primitivní datový typ v Javě pro celá čísla?
Vedle objemnějších typů `long` a menších `short` či `byte` představuje `int` (32bitový podepsaný celočíselný typ) absolutní základní stavební blok v paměti jazyka Java pro uchovávání čísel bez desetinných míst.
Co je to boolean v Javě?
Základní binární přepínačový typ proměnné schopný nést výhradně jen dva striktní stavy (pravda - true, nepravda - false). Slouží k vyhodnocování rozhodovacích podmínek a ke kontrole stavů v programových cyklech.
Jaký příkaz v Javě slouží k výběru z více možností podle hodnoty proměnné?
Na rozdíl od dlouhých a nepřehledných, po sobě jdoucích `if` žebříčků, klíčové slovo `switch` elegantně a rychle zjišťuje shodu vstupní proměnné v definovaných případech bloku `case` a následně provede odpovídající kód dané větve.
Co dělá příkaz `break` v Javě?
Uvnitř cyklů (jako je `for`) či v rozhodovacím bloku `switch` funguje příkaz `break` jako tvrdá stopka – nekompromisně a okamžitě vyhodí interpret kódu ven ze smyčky bez ohledu na splnění původní ukončující podmínky.
Jaký cyklus v Javě se vždy provede alespoň jednou?
Zatímco běžný cyklus `while` se při počáteční nepravdě nemusí spustit ani jednou, inverzní konstrukce `do { } while();` nejprve vykoná hlavní tělo kódu, a teprve na samotném dně bloku se programu ptá, zda má oprávnění pokračovat dál.
Co je to přetypování (casting) v Javě?
Pokud převádíte z velkého na malé do užší paměťové schránky (např. z formátu double do int pomocí zápisu `(int) 3.14`), nutíte kompilátor k explicitnímu převodu a uříznutí informací tak, abyste získali kompatibilní datový typ.
Jaký datový typ v Javě uchovává textové řetězce?
`String` s velkým písmenem nereprezentuje v Javě nějaký malý primitivní typ (jako `char`). Jedná se o silnou plnohodnotnou pole objektově založenou třídu, tvořící uvnitř paměti dlouhé věty v uvozovkách (`"text"`).
Co je výsledkem `10 % 3` v Javě?
Operátor modulo `%` nevydává samotný výsledek dělení, ale pouze zbytkovou hodnotu po podílu dvou celých částek. Po odebrání třech celistvých přesných trojek (což je 9) zůstává z původní desítky logický zbytek v hodnotě 1.
Jaký operátor v Javě porovnává dvě hodnoty na rovnost?
Klasické dvojité rovnítko prověří shodu logických či primitivních typů uložených uvnitř proměnných. Pro složité odkazové objekty nebo pro přesné porovnávání textů typu `String` by se ovšem vždy měla volat bezpečná metoda `.equals()`.
Co dělá příkaz `continue` v cyklu?
Na rozdíl od vražedného `break` skokem ven, tento odlehčený bratr `continue` pouze předčasně zahodí zbytek kódu v aktuálním právě prováděném jednom kole (iteraci) a rovnou cyklus restartuje pro další nové kolo s navýšeným indexem k opakování.