Dione
Z. KotalaP. Toman: Java
Predchozi (Obsah) Dalsi

9. Příkazy

9.1. Prázdný příkaz

je nejjednodušším příkazem v Javě. Neprovádí nic a jeho syntaxe je:

   ;

9.2. Výrazový příkaz

Výrazový příkaz je nejčastěji používaným příkazem. Do této kategorie patří přiřazovací příkaz, dekrementace a inkrementace pomocí operátorů "++" a "-", volání metody a vytvoření objektu pomocí operátoru new.

Priklad 9.1.
a = b + c * 2;  // přiřazovací příkaz
b += 5;         // přiřazovací příkaz
a++;            // inkrementace
System.gc();    // volání metody

9.3. Složený příkaz (blok)

Blok je sekvence příkazů a deklarací lokálních proměnných uzavřených do složených závorek "{" a "}". (1) Příkazy v bloku jsou vykonávány od prvního příkazu k poslednímu, pokud není ukončen předčasně.

9.4. Deklarace lokálních proměnných

Deklarace lokálních proměnných je považována za příkaz, a proto je možné uvést tuto deklaraci kdekoliv v bloku. Deklarovat lze jednu nebo více lokálních proměnných. Platnost těchto proměnných začíná jejich deklarací a končí koncem bloku. Deklarace proměnné vypadá takto (ident značí identifikátor):

   typ ident [ = inicializátor ] [ , ident ...];

Pokud není při deklaraci uveden inicializátor, je proměnná naplněna implicitní hodnotou:

  • nula - pro celočíselné a racionální typy,

  • \u0000 - pro typ char,

  • false - pro logický typ,

  • null - pro referenční typy (neplatná reference).

Priklad 9.2.
char a, b = '$', c = b;   // deklarace znakových proměnných
int i = 1;                // deklarace celočíselné proměnné
String retezec;           // deklarace proměnné třídy String

U deklarace proměnné typu pole je třeba uvést prázdné hranaté závorky za identifikátorem (rozměr se v deklaraci neudává).

Priklad 9.3.
int[] pole;  // deklarace pole celočíselných prvků (pole je
             // neinicializováno, tzn. je přiřazeno null )

Inicializace a vícerozměrná pole viz 7.2.2..

9.5. Návěští

Návěští není samostatný příkaz. Používá se jako prefix k ostatním příkazům. Návěští je jakýkoliv identifikátor zakončený dvojtečkou. Za návěštím může následovat pouze příkaz cyklu nebo blok:

    jménoNávěští : příkazCykluNeboBlok

Na návěští se lze odvolat příkazy break (viz 9.11.) a continue (viz 9.12.). Java nepodporuje příkaz goto, i když má pro něj vyhrazené klíčové slovo.

9.6. If

Příkaz if se používá pro podmínění dalšího příkazu (neúplně podmíněný příkaz) nebo pro rozdělení programu dvou větví (úplně podmíněný příkaz). Jeho syntaxe je následující:

   if ( výraz ) příkaz
   if ( výraz ) příkaz else příkaz

Výsledek výrazu výraz musí být vždy typu boolean, jinak dojde k chybě při překladu. Příkaz else patří vždy k posledně uvedenému příkazu if - pro změnu je třeba použít bloku:

Priklad 9.4.
if (a != 0) {
   if (a != 1)
      b = b/a;
} else b = 0;

9.7. Switch

Příkaz switch se používá pro vícenásobné větvení programu. Jeho zápis je poněkud komplikovanější.

  switch ( výraz ) {
      case konstantníVýraz1 : [ příkazy ]
    [ case konstantníVýraz2 : [ příkazy ] ]

              .
              .
    [ case konstantníVýrazN : [ příkazy ] ]
    [ default :               [ příkazy ] ]
  }

Výraz výraz může nabývat hodnot jen typů: char, byte, short, int. Řízení programu je ovlivněno takto:

  • Pokud výraz odpovídá některému konstantnímu výrazu, pokračuje program příkazy v příslušné větvi case.

  • Pokud žádný konstantní výraz neodpovídá výrazu výraz, pokračuje program implicitní větví default (není-li použita, pokračuje se za příkazem switch).

Není-li provádění větve (case nebo default) přerušeno například příkazy break (viz 9.11.) nebo return (viz 9.13.), provedou se všechny příkazy do konce bloku switch.

Priklad 9.5.
Následující program určuje, zda den v týdnu je pracovní nebo ne.

switch(den) {
  case 1:   // Pro případ, že den je roven 1 - 5 
  case 2:   // se vypíše "Pracovní den." 
  case 3:
  case 4:
  case 5: System.out.println("Pracovní den.");
          break;
  case 6:   // Pro hodnoty 6 - 7 se vypíše "Víkend."
  case 7: System.out.println("Víkend.");
          break;
  default:  // Jinak: "Špatně zadaný den."
          System.out.println("Špatně zadaný den.");
}

9.8. While

Příkaz while je cyklus s podmínkou na začátku. Jeho syntaxe je:

   while ( výraz ) příkaz 

Výsledná hodnota výrazu musí být typu boolean. Pokud výraz nabývá hodnoty true, příkaz se provádí, jinak program pokračuje dále za blokem while.

Priklad 9.6.
Program vypíše čísla od 0 do 9. Jedná se o náhradu cyklu for cyklem while.

int n=0;

while(n<10) {
   System.out.println(n);
   n++;
}

9.9. Do

Příkaz do je cyklus s podmínkou na konci. Jeho zápis je následovný:

   do příkaz while ( výraz );

Nejprve se provede příkaz, a pokud výraz nabývá hodnoty true, začne se příkaz provádět znovu. Cyklus skončí, když výraz nabude hodnoty false.

Priklad 9.7.
double pi, i = 1;
do {
  pi += 4/i - 4/(i+2);
  i+=4;
} while (Math.abs(Math.PI - pi) > 1E-7);
System.out.println("Vypocteno Pi = " + pi);

9.10. For

Příkaz for je komfortnější příkaz cyklu. Jedná se o rozšíření cyklu while (viz příklad 9.6.). Jeho syntaxe je

   for ( inic; výraz; iter) příkaz

Části inic a iter musí být přiřazovací příkazy, přičemž inic by měl nastavit počáteční hodnotu cyklu a iter by měl tuto hodnotu měnit. Výsledek výrazu musí být typu boolean. Cyklus se provádí, jestliže výraz nabývá hodnotu true.

Části inic a iter mohou obsahovat více přiřazovacích příkazů. Tyto příkazy musí být od sebe odděleny čárkou. (2)

Priklad 9.8.
Program vypíše čísla od 0 do 9.

for(int n=0; n<10; n++)
   System.out.println(n);

9.11. Break

Příkaz break má dvě podoby a to:

   break;

nebo

   break návěští;

Příkazem break lze ukončit právě prováděný cyklus, blok nebo příkaz switch. Pokud uvedeme návěští ukončí se blok, k němuž se návěští vztahuje.

Priklad 9.9.
Vyhledání hodnoty (10) v poli může vypadat takto:

int i;
int[] pole = {0,2,8,25,10,4};

ForBlok: {
   for(i=0; i<pole.length; i++)
      if(pole[i] == 10) break ForBlok;
   System.out.println("Nenalezeno!");
}

9.12. Continue

Příkaz continue má dvě podoby jako break (viz 9.11.). Lze jej ale uvést jen uvnitř cyklů while, do a for. Jeho zápis je:

   continue;
nebo

   continue návěští;

Pokud je uveden příkaz continue bez návěští, přeskočí se zbytek cyklu a cyklus pokračuje dalším krokem. Vždy je vybrán nejvnitřnější příkaz cyklu, v jehož těle se vyskytl.

Příkaz continue s návěštím převede řízení na příkaz cyklu, který je součástí tohoto návěstí. Jestliže za návěštím nenásleduje příkaz cyklu, dojde k chybě při překladu.

Priklad 9.10.
navesti: for(n=0; n<100; n++)
            for(m=0; m<200; m++) {
               if(n == 50 && m ==100) continue navesti;
          }

9.13. Return

Příkaz return provede návrat z metody a vrací řízení programu zpět za příkaz, který metodu vyvolal. (3) Je-li návratový typ metody prázdný (void), má má příkaz return tvar:

   return;

jinak je zápis příkazu return následující:

   return  výraz;
Ve druhém případě příkaz navíc vrací hodnotu výrazu výraz, který musí být shodného typu (viz 8.6.) jako je návratový typ metody.

9.14. Throw, try, catch, finally

Tyto příkazy se týkají výjimek a jsou popsány v kap. 13..

9.15. Synchronized

Blok synchronized se používá u vláken - viz 16.5.4..


  • (1) Blok může být i prázdný, pak se chová stejně jako prázdný příkaz.
  • (2) Nejedná se o operátor, jako je tomu v C/C++
  • (3) Před provedením příkazu return má vždy přednost blok finally (viz 13.6.).

Predchozi
Converted by Selathco v0.9 on 25.09.1999 19:46
Dalsi