if() | switch() | while() | do while() | for() | break | continue | return | synchronized() | throw, throws, try, catch, finally
Asi nikto by si nevedel predstavit programovanie bez konstrukcii while, for, if a dalsich. Existuje dnes vobec program, napisany v lubovolnom jazyku, ktory by nam neumoznil nieco podobne? Asi nie (okrem Prologu a inych ...).
Vacsinou, ak niekto zacina s novym (dalsim) jazykom, zaujima ho, ako reprezentovat udaje a ako riadit samotny program. To mnohym staci na to, aby sa pustili do programovania. Preto nebudem dalej zdrziavat.
Priklady niektorych moznych pouziti.if ( meno.length()<20 ) System.out.println("Meno je kratsie ako 20 znakov."); if ( meno.length()<12 ) System.out.println("Meno NIE je dlhsie ako 12 znakov."); else System.out.println("Meno je dlhsie ako 12 znakov!"); if ( meno.length()<20 ) { System.out.println("Meno je v poriadku."); a = b; je_spravne = true; }
Najlepsie (a najrychlejsie) to asi bude ukazat na konkretnom pripade.// 'a' je typu 'int' switch ( a ) { case 0: System.out.println("a = 0"); break; case 1: System.out.println("a = 1"); break; case 2: System.out.println("a = 2"); break; default: System.out.println("Hmmmm.... to ma byt co?"); }
Pokial je Vyraz pravdivy vykonava sa PrikazovyBlok.
Priklady// 'a' je typu 'int' while ( true ); // nekonecny cyklus while ( a<10 ) System.out.println("Mam este cas."); while ( e.id == event.MOUSE_DOWN ) { Sx = e.x; Sy = e.y; repaint(); return true; } // TIP: ak chcete vytvorit applet, ktory urcite potesi kazdeho, // staci naozaj malo ... // alokujem vsetku pamet, ktoru mozem mat a aj procesorovy cas // na zmocnenie sa procesora odporucam 'zabudnut' uspat vas thread // v metode run(), potom je to fakt na nervy // // MojThread je trieda odvodena od Thread a prepisuje metodu run() tak, // ze vykonava nekonecny cyklus, v ktorom nie je volana metoda sleep(); while ( true ) { MojThread tmp = new MojThread(); tmp.start(); }
PrikazovyBlok sa vykonava pokial je Vyraz pravdivy a vykona sa aspon jeden krat.
Prikladydo a=1 while ( a==1 ); // nekonecny cyklus do { a= b / i; i++; } while ( a<100 );
Prikaz for pracuje rovnako ako v C/C++. V casti Inicializacia si nastavim pociatocne parametre pre iteraciu. V casti Podmienka urcim podmienku iteracie, t.j. pokial budem iterovat. V casti Iteracia urcim sposob akym budem iterovat. Tieto tri bloky sa vztahuju na PrikazovyBlok, ktory sa vykonava, ak je splnena Podmienka.
Priklad// 'j' je typu 'int' for ( int j=0; j<10; j++ ) // inicializacia pola a[j] = j; for ( j=0; j<10; j++ ) { a[j] = j; System.out.println( "j=" + j + "a[j]=" + a[j]); }
Prikaz break sa da pouzit rovnako ako v C/C++. Okrem toho moze obsahovat aj Navestie, na ktore sa ma vykonat 'skok' po preruseni riadiaceho toku.
Prikaz break sa da pouzit iba v prikazoch switch, while, do, for!
Priklad// najprv klasika while ( a<10 ) { a++; b--; if ( b<0 ) break; } // tu skoncim ak nastane break, teda ak ( b<0 ) vymysel: // navestie b=2; while ( a<10 ) { a++; b--; if ( b<0 ) break vymysel; // skok na navestie c = b / a; }
Prikaz continue bez Navestia sa pouziva na 'preskocenie' casti uvedenej za tymto prikazom (continue) a pokracovanie vo vykonavani prikazov while alebo do alebo for, v ktorych bol prikaz continue uvedeny. Cize rovnako ako v C/C++. Pokial je uvedene Navestie, tak sa vykona skok na Navestie.
Prikaz continue sa da pouzit jedine spolu s prikazmi while, do, for!
Priklad// 'a','b' su typu 'int' while ( a<100 ) { a++; if ( a==b ) continue; b--; } zaciatok: // navestie for (int j=0; j<100; j++) { a[j] = j; if ( a[j] == b ) // trochu nezmyselny kod, continue zaciatok; // nam ide len o zapis! b--; }
Prikaz return ma podobne pouzitie ako v C/C++. Existuje tu vsak moznost pouzitia v konstruktore, musi byt ale uvedeny bez Vyrazu! Rovnako je to aj v metodach, ktore vracaju prazdny udajovy typ void.
Prikladint maximum(int a, int b) { if ( a < b ) return b; return a; } void set_param(int aparam) { if ( !aparam ) // ak je '0' return; // skonci // inak nastav parametre }
Prikaz synchronized ziskava 'lock' potrebny pre vzajomne vylucenie. Pokial je Vyraz pravdivy, thread vlastni 'lock', moze vykonavat Blok a je zarucene, ze ziaden iny thread nemoze vykonavat tento Blok v tom istom case. Tymto sa zarucuje 'atomicita' Bloku. Po jeho uplnom vykonani thread uvolni 'lock' pre ostatnych.
Prikladclass Test { public static void main(String[] args) { Test t = new Test(); synchronized(t) { System.out.println("made it!"); } } } // jednoduchy thread moze vlasnit 'lock' viac ako jeden krat class Test { public static void main(String[] args) { Test t = new Test(); synchronized(t) { synchronized(t) { System.out.println("mam to"); } } } }
Tieto slovicka maju vyznam v spojeni s exceptions (vynimkami). Preto je dobre a odporucane precitat si najprv kapitolu Exceptions - vynimky
Tip: Ak hladate slovicko final pozri te si kapitolu Slovicko final.