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