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, modifikátor final konstantu):

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

Pokud není při deklaraci uveden inicializátor, musí být proměnná naplněna před prvním použitím.

Priklad 9.2.
char a, b = '$', c = b;   // deklarace znakových proměnných
final int i = 1;          // deklarace celočíselné konstanty
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 typem nebo identifikátorem (rozměr dimenze se v deklaraci neudává).

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

Inicializace a vícerozměrná pole jsou popsána v 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 mohou obsahovat příkazy; je-li jich více oddělují se čárkou (2) . Cyklus se provádí dokud výraz nabývá hodnoty true. Vyhodnocování výrazu se provádí vždy na konci cyklu, iter se provede i při posledním průchodu! Části inic, výraziter jsou v příkazu for nepovinné.

Priklad 9.8.
int suma=0;

for(int n=1; n<3; n++, suma+=n)
   System.out.println("n="+n+", suma="+suma);

System.out.println("suma="+suma);

Program vypíše:

n=1, suma=0
n=2, suma=2
suma=5

(výsledná suma je 5, neboť se přičte i n=3)

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á 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) V Javě narozdíl od C/C++ čárka není operátor.
  • (3) Před provedením příkazu return má vždy přednost blok finally (viz 13.6.).

Predchozi
Converted by Selathco 0.91 on 04.02.2001 19:33
Dalsi