Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 1/26
Syntaxe a sémantika Syntaxe - popisuje jaké konstrukce jsou v jazyce možné. Jaký program je korektně napsaný a jaký ne. Sémantika - popisuje co které konstrukce znamenají. Např. co se provede při nějakém příkazu. Rozlišujeme mezi dvěma typy chyb: Chyby při překladu - hlášeny překladačem. Syntaktické - např. chybějící ; Sémantické - např. přiřazení mezi nekompatibilními datovými typy. Chyby při běhu programu - hlášeny virtuálním strojem při běhu programu. Můžeme zachytávat pomocí výjimek. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 2/26
Program se skládá ze tříd. Každá třída se skládá z definic dat a operací pracujícími nad těmito daty. Atributy: data objektu. Methody: operace nad těmito daty. Metody se skládají z hlavičky, definující jméno, parametry a návratový typ, a těla obsahující příkazy. manipulují s proměnnými (atributy nebo lokálními proměnnými). Provádění příkazu zahrnuje vyhodnocování výrazů. Každá proměnná, hodnota nebo výraz je nějakého typu. Na nejnižší úrovni je program posloupnost lexikálních symbolů. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 3/26
Příklad 2.1 public class Example0201 public s t a t i c void main ( S t r i n g [ ] args ) i n t i = 5 ; i n t j = i + 3 ; System. out. p r i n t l n ( " i = " + i + ", j = " + j + " \ n " ) ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 4/26
Lexikální symboly Bílé znaky a poznámky: Bílé znaky: space (SP), horizontal tab (HT), form feed (FF), newline (LF), carriage return (CR). Komentáře: /* komentář */ // komentář Základní typy lexikálních symbolů: identifikátory: i j System9 number_of_elements klíčová slova: while float int public class literály: 124 true d "hello" oddělovače: ( ) [ ] ; :,. operátory: + / && = = < >>= c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 5/26
Příklad 2.2 / Trida Example0202 Author : Date : / public class Example0202 public s t a t i c void main ( S t r i n g [ ] args ) / / v y p o c i t e j 5 + 3 i n t i = 5 ; i n t j = i + 3 ; / / vypis vysledek System. out. p r i n t l n ( " i = " + i + ", j = " + j + " \ n " ) ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 6/26
Typy, hodnoty a proměnné V proměnných jsou uložena data. Každá proměnná je specifikována jménem a datovým typem (deklarace). Rozlišujeme dvě skupiny datových typů:. Proměnná primitivního datového typu obsahuje jednu hodnotu příslušné velikosti: boolean b = true; // booleovský typ int i = 456; // celé číslo double f = 2.71828; // reálné číslo Reference Adresa objektu (instance třídy) nebo pole. Hashtable h = new Hashtable(); int[] a = new int[20]; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 7/26
Celočíselné datové typy 1/2 Typ Rozsah Velikost v bitech byte -128..127 8 short -32768..32767 16 int -2147483648..2147483647 32 long -9223372036854775808..9223372036854775807 64 char 0..65535 16 c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 8/26
Celočíselné datové typy 2/2 Operátory: Porovnání: <, <=, >, >=, ==,! = Unární plus a mínus: +, Binární aritmetické operátory: +,,, /, % Prefixové a postfixové operátory pro dekrementaci a inkrementaci: ++, Znaménkové a neznaménkové operátory posuvu: <<, >>, >>> Bitový doplněk: ~ Bitové operátory: & (AND), (OR), ^ (XOR) c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 9/26
Příklad 2.3 public class Example0203 public s t a t i c void main ( S t r i n g [ ] args ) i n t i = 5 ; i + + ; / / i = 6 i n t j = i + 3; / / i = 5, j = 9 j = i + 3 ; / / i = 4, j = 7 j + = 6 ; / / j = 1 3 boolean b = ( j = = 1 ) ; / / b = f a l s e ; System. out. p r i n t l n ( " i = " + i + ", j = " + j + ", b= " + b + " \ n " ) ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 10/26
Příklad 2.4 public class Example0204 public s t a t i c void main ( S t r i n g [ ] args ) i n t i = 1 ; / / i = 0001 i = i < < 1 ; / / i = 2 ( 0 0 1 0 ) i n t j = 1 ; i n t k = i j ; / / k = 3 ( 0 0 1 1 ) k = i & j ; / / k = 0 System. out. p r i n t l n ( " i = " + i + ", j = " + j + ", k= " + k + " \ n " ) ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 11/26
Příklad 2.5 1/2 public class Example0205 public s t a t i c void main ( S t r i n g args [ ] ) i n t a = ~ 0 ; / / a = 1, a = 1 1... 1 1 a = a < < 1 ; / / a = 1 1 1... 1 1 0 a = 1; i n t aa = a > > 1 ; / / aa = 1 i n t ab = a > > > 1; / / ab = 2147483647 / / ab = 0 1 1... 1 1 c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 12/26
Příklad 2.5 2/2 a = 1 1 < < 3 0 ; / / a = 1 1 0........... 0 aa = a > > 1 ; / / aa = 1 1 1 0.......... 0 i n t b = 2 0, c = 3 ; i n t d = b / c ; / / d = 6 i n t e = b % c ; / / e = 2 ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 13/26
Reálné datové typy 1/2 Čísla tvaru s m 2 exp. Typ s m exp Velikost v bitech float -1,1 0.. 2 24 1-149..104 32 double -1,1 0.. 2 53 1-1075..970 64 Typ Min. hodnota Max. hodnota float 1.40239846e-45f 3.40282347e+38f double 4.94065645841246544e-324 1.79769313486231570e+308 c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 14/26
Reálné datové typy 2/2 Operátory: Porovnání: <, <=, >, >=, ==,! = Unární plus a mínus: +, Binární aritmetické operátory: +,,, / Prefixové a postfixové operátory pro dekrementaci a inkrementaci: ++, c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 15/26
Příklad 2.6 public class Example0206 public s t a t i c void main ( S t r i n g args [ ] ) double f = 1. 0 ; f = f 2 0. 0 ; / / f = 2 0. 0 f = f / 5. 0 ; / / f = 4. 0 f ; / / f = 3. 0 c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 16/26
Booleovský datový typ Booleovský datový typ má dvě možné hodnoty: true a false. Operátory: Porovnání: ==,! = Logický doplněk:! Binární logické operátory: &,, ˆ Podmínkové AND resp. OR operátory: &&, Ternární podmínkový operátor:?: Booleovské výrazy určují řízení vykonávání v příkazech: if while do for c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 17/26
Příklad 2.7 1/2 public class Example0205 public s t a t i c void main ( S t r i n g [ ] args ) boolean f l a g = true ; f l a g =! f l a g ; / / f l a g = f a l s e boolean bvar = true ; boolean r1 = f l a g bvar ; / / r1 = t r u e boolean r2 = f l a g & bvar ; / / r2 = f a l s e i f ( r1 r2 ) / / t r u e or f a l s e = t r u e System. out. p r i n t l n ( " r1 or r2 = t r u e " ) ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 18/26
Příklad 2.7 2/2 double f V a l = r1? 1. 0 : 2. 0 ; / / f V a l = 1. 0 System. out. p r i n t l n ( " f l a g = " + f l a g + ", bvar= " + bvar + ", f V a l = " + f V a l + " \ n " ) ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 19/26
Operátor přiřazení Výraz: expr1 = expr2. Vyhodnocení: Vyhodnocení levé strany (expr1). Vyhodnocení pravé strany (expr2). Hodnota pravé strany je uložena v proměnné levé strany. Hodnota celého výrazy je hodnota pravé strany výrazu. a[i++] = x + y; int b = c + 1; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 20/26
Složené operátory přiřazení =, / =, % =, + =, =, <<=, >>=, & =, = ˆ = Význam expr1 op= expr2 je stejný jako expr1 = expr1 op expr2. Ovšem expr1 je vyhodnocen pouze jednou. x *= 6; x = x * 6; a[i++] += 3; není ekvivalentní s a[i++] = a[i++] + 3; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 21/26
Přetypování (cast) Implicitní přetypování: byte b ; i n t i ;... i = b ; b = i; je chybný. Musíme použít výraz: (typ)expr1, který transformuje typ hodnoty výrazu na typ. b = (byte)i; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 22/26
Priorita operátorů seřazeno od nejvyšší priority 1. () 2. [], postfixové ++ a 3. unární + a, ~,!, přetypování, prefixové ++ a 4., /, % 5. +, 6. <<, >>, >>> 7. <, >, <=, >=, instanceof 8. ==,! = 9. & 10. ˆ 11. 12. && 13. 14.? : 15. =, =, / =, % =, + =, =, <<=, >>=, >>>=, & =, ˆ =, = c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 23/26
Asociativita operátorů Většina binárních operátorů je asociativní zleva. a + b + c má stejný význam jako (a + b) + c Některé operátory jsou asociativní zprava. a = b = c má stejný význam jako a = (b = c) c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 24/26
Úvod do programovacích jazyků (Java), 2/12 Příkaz je výraz ukončený ; a = b + c ; / / p r i k a z p r i r a z e n i i ++; sum( a, b ) ; / / p r i k a z deklarace i n t i ; double x, y, z ; / / p r i k a z deklarace a p r i r a z e n i ( d e f i n i c e ) i n t i = 4 ; double x = 4 6. 3, y, z = i 2. 0 ; c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 25/26
Blok Úvod do programovacích jazyků (Java), 2/12 Blok je posloupnost příkazů uzavřená mezi a. Příklad: a = 2 7 ; i n t b = a / 3 ; / / b = 9 a = b % 2 ; / / a = 1 a = b / 2 ; / / a = 4 Rozsah platnosti (scope) deklarace lokální proměnné je od místa deklarace po konec uzavírajícího bloku. c 2006 2008 Michal Krátký Úvod do programovacích jazyků (Java) 26/26