Java logo PredDalej

Riadenie programu

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.



if ( Vyraz ) PrikazovyBlok1 else PrikazovyBlok2

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;
}


switch ( Vyraz ) SwitchBlok

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?");
}


while ( Vyraz ) PrikazovyBlok

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();
}


do PrikazovyBlok while ( Vyraz )

PrikazovyBlok sa vykonava pokial je Vyraz pravdivy a vykona sa aspon jeden krat.

Priklady
do a=1 while ( a==1 );  // nekonecny cyklus


do {
	a= b / i;
	i++;
} while ( a<100 );


for ( Inicializacia; Podmienka; Iteracia ) PrikazovyBlok

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]);
}


break Navestie

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;
}


continue Navestie

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--;
}


return Vyraz

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.

Priklad
int 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
}


synchronized ( Vyraz ) Blok

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.

Priklad
class 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");
                        }
                }
        }
}


throw, throws, try, catch, finally

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.

Zaciatok