Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Úvod do programovacích jazyku˚ (Java) Michal Krátký Katedra informatiky VŠB–Technická univerzita Ostrava
Úvod do programovacích jazyku˚ (Java), 2007/2008
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
1/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Syntaxe a sémantika Syntaxe - popisuje jaké konstrukce jsou v jazyce možné. Jaký program je korektneˇ napsaný a jaký ne. Sémantika - popisuje co které konstrukce znamenají. ˇ Napˇr. co se provede pˇri nejakém pˇríkazu. ˇ Rozlišujeme mezi dvema typy chyb: Chyby pˇri pˇrekladu - hlášeny pˇrekladaˇcem. ˇ Syntaktické - napˇr. chybející ; Sémantické - napˇr. pˇriˇrazení mezi nekompatibilními datovými typy.
ˇ programu - hlášeny virtuálním strojem pˇri Chyby pˇri behu ˇ behu programu. Mužeme ˚ zachytávat pomocí výjimek.
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
2/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Syntaxe jazyka Java Program se skládá ze tˇríd. Každá tˇrída se skládá z definic dat a operací pracujícími ˇ nad temito daty. Atributy: data objektu. ˇ Methody: operace nad temito daty.
Metody se skládají z hlaviˇcky, definující jméno, parametry ˇ obsahující pˇríkazy. a návratový typ, a tela ˇ Pˇríkazy manipulují s promennými (atributy nebo lokálními ˇ promennými). ˇ pˇríkazu zahrnuje vyhodnocování výrazu. Provádení ˚ ˇ ˇ Každá promenná, hodnota nebo výraz je nejakého typu. Na nejnižší úrovni je program posloupnost lexikálních symbolu. ˚ c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
3/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Pˇríklad 2.1
public class Example0201 { public s t a t i c void main ( S t r i n g [ ] args ) { int i = 5; int j = i + 3; System . o u t . p r i n t l n ( " i = " + i + " , j = " + j + " \n" ) ; } }
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
4/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
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áˇre: /* komentᡠr */ // komentᡠr
Základní typy lexikálních symbolu: ˚ identifikátory: i j System9 number_of_elements klíˇcová slova: while float int public class literály: 124 true ’d’ "hello" ˇ oddelovaˇ ce: ( ) { } [ ] ; : , . operátory: + − ∗ / && = ∗ = < >>=
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
5/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Pˇríklad 2.2 /∗ ∗ ∗ T r i d a Example0202 ∗ Author : ∗ Date : ∗/ public class Example0202 { public s t a t i c void main ( S t r i n g [ ] args ) { / / vypocitej 5 + 3 int i = 5; int j = i + 3; / / vypis vysledek System . o u t . p r i n t l n ( " i = " + i + " , j = " + j + " \n" ) ; } } c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
6/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
ˇ Typy, hodnoty a promenné ˇ ˇ V promenných jsou uložena data. Každá promenná je specifikována jménem a datovým typem (deklarace). Rozlišujeme dveˇ skupiny datových typu: ˚ Primitivní datové typy. ˇ Promenná primitivního datového typu obsahuje jednu hodnotu pˇríslušné velikosti: boolean b = true; // booleovský typ int i = 456; // celé ˇ císlo double f = 2.71828; // reálné ˇ císlo Reference Adresa objektu (instance tˇrídy) nebo pole. Hashtable h = new Hashtable(); int[] a = new int[20];
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
7/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Celoˇcíselné datové typy 1/2
Typ
Rozsah
byte short int long char
-128..127 -32768..32767 -2147483648..2147483647 -9223372036854775808..9223372036854775807 0..65535
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
Velikost v bitech 8 16 32 64 16
8/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Celoˇcí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ý doplnek: Bitové operátory: & (AND), | (OR), ^ (XOR)
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
9/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Pˇríklad 2.3 public class Example0203 { public s t a t i c void main ( S t r i n g [ ] args ) { int 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 = 13 boolean b = ( j = = 1 ) ; / / b = f a l s e ; System . o u t . p r i n t l n ( " i = " + i + " , j = " + j + " , b= " + b + " \ n " ) ; } } c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
10/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Pˇríklad 2.4 public class Example0204 { public s t a t i c void main ( S t r i n g [ ] args ) { int i = 1 ; / / i = 0001 i = i < < 1; / / i = 2 (0010) int j = 1; int k = i | j ; / / k = 3 (0011) k = i & j ; // k = 0 System . o u t . p r i n t l n ( " i = " + i + " , j = " + j + " , k= " + k + " \ n " ) ; } } c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
11/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Pˇríklad 2.5
1/2
public class Example0205 { public s t a t i c void main ( S t r i n g args [ ] ) { int a = ~0; / / a = −1 , a = 1 1 . . . 1 1 a = a < < 1; // a = 111 ... 110 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 jazyku˚ (Java)
12/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Pˇríklad 2.5
2/2
a = 11 < < 30; aa = a > > 1 ;
// a = 110...........0 / / aa = 1 1 1 0 . . . . . . . . . . 0
int b = 20 , c = 3; int d = b / c ; // d = 6 int e = b % c ; // e = 2; } }
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
13/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Reálné datové typy 1/2 ˇ Císla tvaru s m × 2exp .
Typ float double
Typ
s
m
exp
float double
{-1,1} {-1,1}
0 .. 224 − 1 0 .. 253 − 1
-149..104 -1075..970
Min. hodnota 1.40239846e-45f 4.94065645841246544e-324
c
2006–2008
Michal Krátký
Velikost v bitech 32 64
Max. hodnota 3.40282347e+38f 1.79769313486231570e+308
Úvod do programovacích jazyku˚ (Java)
14/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
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 jazyku˚ (Java)
15/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Pˇrí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 = 20.0 f = f / 5.0; / / f = 4.0 −−f ; / / f = 3.0 } }
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
16/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Booleovský datový typ Booleovský datový typ má dveˇ možné hodnoty: true a false. Operátory: Porovnání: ==, ! = ˇ ! Logický doplnek: Binární logické operátory: &, |, ˆ Podmínkové AND resp. OR operátory: &&, || Ternární podmínkový operátor: ?:
Booleovské výrazy urˇcují ˇrízení vykonávání v pˇríkazech: if while do for
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
17/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Pˇrí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 = t r u e ; flag = ! flag ; / / flag = false boolean bVar = t r u e ; boolean r 1 = f l a g | bVar ; / / r1 = tr ue boolean r 2 = f l a g & bVar ; / / r2 = f a l s e i f ( r1 | | r2 ) / / tr ue or f a l s e = tr ue { System . o u t . p r i n t l n ( " r 1 o r r 2 = t r u e " ) ; } c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
18/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Pˇríklad 2.7
2/2
double f V a l = r 1 ? 1 . 0 : 2 . 0 ;
/ / fVal = 1.0
System . o u t . 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 jazyku˚ (Java)
19/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Operátor pˇriˇrazení
Výraz: expr1 = expr2. Vyhodnocení: Vyhodnocení levé strany (expr1). Vyhodnocení pravé strany (expr2). ˇ Hodnota pravé strany je uložena v promenné 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 jazyku˚ (Java)
20/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Složené operátory pˇriˇrazení
∗ =, / =, % =, + =, − =, <<=, >>=, & =, |= ˆ = 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 jazyku˚ (Java)
21/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Pˇretypování (cast)
Implicitní pˇretypová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 jazyku˚ (Java)
22/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Priorita operátoru˚ – seˇrazeno od nejvyšší priority 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
() [], postfixové ++ a −− unární + a −, ~, !, pˇretypování, prefixové ++ a −− ∗, /, % +, − <<, >>, >>> <, >, <=, >=, instanceof ==, ! = & ˆ | && || ? : =, ∗ =, / =, % =, + =, − =, <<=, >>=, >>>=, & =, ˆ =, |= c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
23/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Asociativita operátoru˚
ˇ Vetšina binárních operátoru˚ je asociativní zleva. a + b + c má stejný význam jako (a + b) + c ˇ Nekteré 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 jazyku˚ (Java)
24/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Pˇríkazy Pˇríkaz je výraz ukonˇcený ; a = b + c;
/ / prikaz prirazeni
i ++; sum ( a , b ) ; / / prikaz deklarace int i ; double x , y , z ; / / prikaz deklarace a p r i r a z e n i ( d e f i n i c e ) int i = 4; double x = 4 6 . 3 , y , z = i ∗ 2 . 0 ; c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
25/26
Úvod do programovacích jazyku˚ (Java), 2/12
Syntaxe jazyka Java Primitivní datové typy Pˇríkazy
Blok Blok je posloupnost pˇríkazu˚ uzavˇrená mezi { a }. Pˇríklad: { a = int a = a =
27; b = a / 3; b % 2; b / 2;
// b = 9 // a = 1 // a = 4
} ˇ Rozsah platnosti (scope) deklarace lokální promenné je od místa deklarace po konec uzavírajícího bloku.
c
2006–2008
Michal Krátký
Úvod do programovacích jazyku˚ (Java)
26/26