J�zyk Java udost�pnia programi�cie szereg standardowych typ�w warto�ci, z kt�rych wi�kszo�� mo�na spotka� tak�e w innych j�zykach programowania. Typy te nazywane s� w oryginale 'intrinsic types', co przet�umaczyli�my jako "typy wewn�trzne". W poni�szej tabeli zawarto opis wewn�trznych typ�w danych, zawieraj�cy dla ka�dego typu jego nazw� oraz wielko�� pami�ci zajmowanej przez poszczeg�lne warto�ci typu.
Typ danych | Rozmiar (w bitach) |
boolean | 8 |
byte | 8 |
char | 16 |
short | 16 |
int | 32 |
long | 64 |
float | 32 |
double | 64 |
Tabela 2-1 Zestawienie typ�w wewn�trznych w Javie
Zmienne typu char s� reprezentowane na 16 bitach poniewa� mo�emy jako warto�� zmiennej typu char u�y� dowolnego znaku ze zbioru znak�w Unicode.
W Javie mamy do dyspozycji nast�puj�cy zbi�r litera��w: litera�y ca�kowite (dziesi�tne, �semkowe i szesnastkowe), odpowiadaj�ce typom int i long, litera�y rzeczywiste (sta�oprzecinkowe i zmiennoprzecinkowe), odpowiadaj�ce typom float i double, litera�y znakowe i �a�cuchowe, zwi�zane z typem char i String oraz litera�y logiczne reprezentuj�ce dwie warto�ci logiczne typu boolean.
Dziesi�tne litera�y ca�kowite nale��ce do typu int s� ci�gami cyfr dziesi�tnych, ewentualnie poprzedzonymi znakiem. Umieszczenie na ko�cu litera�u ca�kowitego znaku 'L' lub 'l' wskazuje, �e mamy do czynienia z litera�em typu long. Litera�y o warto�ciach wi�kszych ni� '2.147.483.647' dziesi�tnie automatycznie przyjmuj� posta� liczby typu long.
Litera�y rozpoczynaj�ce si� znakiem '0' s� liczbami �semkowymi, natomiast litera�y zaczynaj�ce si� sekwencj� '0x' lub '0X' stanowi� liczby szesnastkowe. Do zapisu cyfr szesnastkowych mo�na u�ywa� zar�wno ma�ych jak i wielkich liter alfabetu (od A do F).
Litera�y rzeczywiste traktowane s� jako liczby typu double. Mo�emy jednak zmieni� to standardowe przypisanie i wymusi� interpretacj� liczby jako warto�ci typu float przez dodanie na ko�cu litera�u litery 'F' (lub 'f'). Mo�liwe jest tak�e jawne przypisanie litera�owi typu double poprzez dodanie litery 'D' lub 'd'.
Poni�ej prezentujemy litera�y numeryczne: ca�kowite i rzeczywiste:
169, 0251, 0xA9, 0XA9, 0xa9 - litera�y ca�kowite typu int i long
4.565556, 0.2, 50.0, 30.5E-11 - litera�y rzeczywiste typu double
4.565556f, 0.2F, 50.0f, 30.5E-11f - litera�y rzeczywiste typu float
4.565556d, 0.2D, 50.0d, 30.5E-11d - litera�y rzeczywiste typu double
Istniej� dwa litera�y typu boolean- s� nimi sta�e true i false , reprezentuj�ce warto�ci "prawda" i "fa�sz". Nale�y zauwa�y�, �e odmiennie, ni� w j�zyku C, nie mo�na dokonywa� konwersji warto�ci typu boolean do warto�ci typu int.
Zwyk�e litera�y znakowe zapisujemy w apostrofach. Mo�na definiowa� tak�e litera�y reprezentuj�ce znaki w standardzie Unicode. W tym celu u�ywamy notacji '\xNN', gdzie NN jest warto�ci� Unicode znaku.
W Tabeli 2-2 zestawiono litera�y s�u��ce do zapisu znak�w specjalnych
Opis | Litera� |
New line (znak nowej linii) | \n |
Horizontal tab (tabulacja pionowa) | \t |
Backspace | \b |
Carriage return (powr�t karetki) | \r |
From feed (znak nowej strony) | \f |
Single quote (apostrof) | \' |
Double quote (cudzys��w) | \" |
Backslash (lewy uko�nik) | \\ |
Tabela 2-2 Litera�y znak�w steruj�cych
Litera�y �a�cuchowe s� sekwencjami znak�w uj�tymi w cudzys��w. Litera�y tego typu w Javie nie s�, jak to ma miejsce w C/C++, tablicami znak�w zako�czonymi znakiem pustym.
Przyk�ady definicji litera��w znakowych:
' ' - spacja,
'\\' - lewy uko�nik,
'K' - znak K,
'\x20' - spacja.
Napis:
"To litera�"
jest przyk�adem litera�u �a�cuchowego.
Do tworzenia wyra�e�, opr�cz zmiennych i wywo�a� funkcji, s�u�� operatory, z kt�rych wi�kszo�� zaczerpni�to z j�zyk�w C i C++. Jednak�e, w Javie wprowadzono szereg zmian dotycz�cych operator�w - om�wimy je kolejno.
Po pierwsze, udost�pniono nowy operator '>>>', oznaczaj�cy przesuni�cie bitowe w prawo, bez znaku (postaci: op1>>>op2, gdzie op2 liczb� okre�laj�c� o ile pozycji nast�pi przesuni�cie). Przyj�to tak�e zasad�, �e operatory nie mog� by� przeci��ane. Ponadto, je�li argumentami operator�w: '&', '|' oraz '^' s� liczby, to traktuje si� je jako operatory bitowe, odpowiednio: bitowej sumy, iloczynu i "wy��czaj�cego ALBO", natomiast dla argument�w typu boolean, wymienione operatory s� operatorami: sumy logicznej, iloczynu logicznego i wy��czaj�cego ALBO logicznego (ang. "exclusive or" XOR).
Zastosowanie operator�w logicznych '&' i ' |' r�ni si� od u�ycia dost�pnych tak�e operator�w '&&' i '||' tym, �e podczas ich warto�ciowania nie jest stosowana zasada "short-circuit evaluation", polegaj�ca, w og�lno�ci, na obliczaniu warto�ci sk�adowych wyra�enia logicznego tylko wtedy, gdy wp�ywaj� one na warto�� ca�ego wyra�enia, na przyk�ad w wyra�eniu:
(6 > 2) | true
po obliczeniu warto�ci '6>2' znana jest warto�� ca�ego wyra�enia i nie ma potrzeby dalszego warto�ciowania. Gdy jednak chcemy, aby drugi argument operatora '|' nie by� wyliczany, stosujemy operator '||'.
Poni�sza tabela zawiera zestawienie operator�w j�zyka Java.
Priorytet | Operator | Priorytet | Operator |
1 | . [] () | 9 | ^ |
2 | ++ -- ! ~ instanceof | 10 | | |
3 | * / % | 11 | && |
4 | + - | 12 | || |
5 | << >> >>> | 13 | ?: |
6 | < > <= >= | 14 | = op= |
7 | == != | 15 | , |
8 | & |
Tabela 2-3 Zestawienie operator�w Javy w porz�dku wzrastaj�cych priorytet�w
Wyra�enie 'op=', gdzie 'op' jest jednym z operator�w: ( '+', '-', '*', '/', '%', '&', '|', '^', '<<', '>>', '>>>') , stanowi definicj� zbioru operator�w z�o�onych, ��cz�cych operator binarny 'op' i operator przypisania '=', w nast�puj�cy spos�b:
a op= b; jest r�wnowa�ne a = a op b;
Warto�ciami wyra�e� zawieraj�cych operatory relacyjne: '>', '<', '>=', '<=', '== 'i '!=' s� sta�e typu boolean, kt�re nie mog� by� przekszta�cane, jak to ma miejsce w j�zyku C, do warto�ci typu ca�kowitego.
Dla operator�w binarnych, w wi�kszo�ci przypadk�w, wyst�puje w Javie zjawisko automatycznej konwersji zmiennych, zadeklarowanych jako: byte, char i short do typu int, co cz�sto prowadzi do wyst�pienia b��du w instrukcji przypisania.
Dla zmiennych a, b, c typu byte, zadeklarowanych np. tak:
byte a; byte b=2; byte c=3;
w poni�szej instrukcji wyst�puje b��d przypisania, spowodowany automatyczn� konwersj� typu zmiennych.
a=b*c; // b��d przypisania wyniku typu int do zmiennej typu byte!
Przyczyn� wyst�pienia b��du w instrukcji przypisania jest dokonanie, przed wykonaniem operacji mno�enia, automatycznej konwersji typu zmiennych b i c do typu int. Aby unikn�� tego b��du, musimy zastosowa� konwersj� wyniku operacji (typu int) do typu byte:
a=(byte)(b*c); //to wyra�enie jest poprawne.
Wszystkie zmienne w Javie musz� by� zadeklarowane, zanim zostan� u�yte. Deklaracja zmiennej mo�e znajdowa� si� w dowolnym miejscu definiowanej metody (poj�cie metody jest r�wnowa�ne identycznemu poj�ciu w j�zyku C++).
Deklaracja zmiennej sk�ada si� z nazwy typu zmiennej, za kt�r� znajduje si� nazwa zmiennej oraz, opcjonalnie, wyra�enie nadaj�ce warto�� pocz�tkow� zmiennej. Ca�y napis zako�czony jest �rednikiem. Deklaracj� t� mo�emy przedstawi� schematycznie w nast�puj�cy spos�b:
NazwaTypu NazwaZmiennej [ = Warto��Pocz�tkowa ];
gdzie napis w nawiasach '[' i ']' oznacza cz�� opcjonaln� deklaracji.
Nazwa musi zaczyna� si� liter� alfabetu, znakiem podkre�lenia '�_�' lub znakiem dolara�'$'. Dalej, identyfikator mo�e zawiera� cyfry lub litery alfabetu. W sk�ad alfabetu wchodz� znaki:
Oznacza to zatem, �e napisy 'M�ka' i 'T�m�o' s� poprawnymi identyfikatorami Javy.
W Javie zastosowano mechanizm nadawania zmiennym wewn�trznym domy�lnych warto�ci pocz�tkowych - w Tabeli 2-4 zestawiono te warto�ci.
Typ danych | Warto�� domy�lna |
boolean | false |
byte | 0 |
char | 'x0' |
short | 0 |
int | 0 |
long | 0 |
float | 0.0F |
double | 0.0D |
Tabela 2-4 Zestawienie warto�ci domy�lnych dla typ�w wewn�trznych
Przyk�adowe deklaracje zmiennych:
//deklaracja zmiennej typu ca�kowitego z nadaniem jej // warto�ci pocz�tkowej '5' int nLiczbaPowrotow = 5; // deklaracja zmiennej typu boolean z nadaniem jej 'true' boolean bMozna = true; // deklaracja zmiennej typu boolean bez nadania warto�ci // pocz�tkowej, zostanie wi�c przypisana domy�lna warto�� 'false' boolean bKoniec;
W rozdziale tym om�wiono zmienne typ�w wewn�trznych, deklaracja zmiennych typ�w obiektowych wygl�da podobnie z tym, �e w opcjonalnej cz�ci deklaracji zmiennej (wyra�eniu nadaj�cym warto�� pocz�tkow�), mo�e zosta� utworzony nowy obiekt, odpowiedniego typu obiektowego. Deklarowanie zmiennych obiektowych om�wione zosta�o w punkcie 2.3.6.
Zbi�r instrukcji j�zyka Java, wzorowany na zbiorze instrukcji j�zyka C, zawiera:
W kolejnych podpunktach, om�wimy postaci sk�adniowe i semantyk� wymienionych instrukcji.
W Javie do dyspozycji mamy nast�puj�ce instrukcje steruj�ce: if, for, while, switch.
Instrukcja warunkowa if przyjmuje posta�:
if (wyra�enie_logiczne) instrukcja else instrukcja ;
lub
if (wyra�enie_logiczne) instrukcja
Wykonanie instrukcji polega na obliczeniu warto�ci wyra�enia_logicznego i, je�li jest ona r�wna true, to wykonaniu podlega pierwsza instrukcja, w przeciwnym przypadku (dla warto�ci r�wnej false), wykonywana jest instrukcja umieszczona po s�owie kluczowym else (je�li wyst�puje) lub nast�pna instrukcja programu.
W Javie istnieje tak�e mo�liwo�� �atwego programowania warunk�w, przyjmuj�cych warto�ci ze zbioru wi�kszego, ni� dwuelementowy (jak to ma miejsce w instrukcji if). Stosujemy wtedy instrukcj� wyboru switch o postaci:
switch(wyra�enie_warunkowe) { case sta�a1: instrukcja case sta�a2: instrukcja ... case sta�aN: instrukcja [default: instrukcja] }
W pierwszym kroku wykonania instrukcji obliczana jest warto�� wyra�enia_warunkowego (kt�re przyjmuje warto�ci ca�kowite), a nast�pnie por�wnywana jest ona kolejno z warto�ciami sta�ych umieszczonych po s�owach case. Sterowanie jest przekazywane do tej instrukcji, w kt�rej warto�� sta�ej jest r�wna warto�ci wyra�enia_warunkowego. Je�li �adna sta�a nie ma warto�ci identycznej z warto�ci� wyra�enia, to wykonywana jest instrukcja umieszczona po s�owie default (je�li jest zdefiniowane) lub nast�pna instrukcja w programie.
W Javie mamy do dyspozycji klasyczny zestaw instrukcji iteracyjnych:
Instrukcja while przyjmuje posta�:
while (wyra�enie_logiczne) instrukcja
Najpierw obliczana jest warto�� wyra�enia_logicznego. Je�li jest ona r�wna true, to wykonywana jest instrukcja, gdy za� warto�� ta r�wna jest false - sterowanie przekazywane jest do nast�pnej instrukcji programu. Po wykonaniu instrukcji, ponownie sprawdzana jest warto�� wyra�enia_logicznego i procedura powtarza si�.
Instrukcj� do...while mo�na zapisa�:
do instrukcja while (wyra�enie_logiczne);
Wykonanie tej instrukcji r�ni si� od wykonania poprzedniej tym, �e warunek wyra�enie_logiczne jest sprawdzany po ka�dym wykonaniu instrukcji, a nie przed, jak to ma miejsce w przypadku instrukcji while.
Nale�y zauwa�y�, �e jest mo�liwa zmiana opisanego wy�ej trybu wykonania instrukcji iteracyjnych poprzez zastosowanie instrukcji steruj�cych break i continue, kt�re om�wimy p�niej .
Na koniec, zajmiemy si� instrukcj� for o nast�puj�cej sk�adni:
for (wyra�enie_1; wyra�enie_logiczne; wyra�enie_3) instrukcja
Wykonanie instrukcji for przebiega w nast�puj�cy spos�b:
Zmienne zadeklarowane w wyra�eniu_1 s� widoczne tylko w ciele instrukcji for - po wykonaniu p�tli, nie mog� by� one ponownie u�yte. Ta cecha deklaracji zmiennych wykazuje istotn� r�nic� z analogiczn� deklaracj� w j�zyku C++, gdzie zmienne zadeklarowane w instrukcji for s� widoczne s� poza ni�.
Instrukcje break i continue pozwalaj� na wcze�niejsze opuszczenie p�tli. Je�li break wyst�puje bez etykiety (ang. label) to sterowanie programem przekazywane jest poza instrukcj� while lub for. Je�li instrukcja break posiada etykiet� to sterowanie przekazywane jest poza blok instrukcji oznaczonych etykiet�.
Przyk�ad 2.1 U�ycie instrukcji break z
etykiet�
Przyk�ad ten ilustruje zastosowanie instrukcji break z
etykiet� do sterowania wykonaniem programu w Javie:
int i=0; int k=10; NaszBlok: { while(i++<10) { if (--k==0) break NaszBlok; System.out.println(i/k); // wy�wietlenie na ekranie wyniku dzielenia } //Tu zosta�oby przekazane sterowanie gdyby instrukcja //break nie mia�a etykiety NaszBlok. } //koniec bloku instrukcji NaszBlok //Tu zostaje przekazane sterowanie programem po wykonaniu //instrukcji break NaszBlok
U�ycie instrukcji break z etykiet� pozwala na natychmiastowe opuszczenie wielu zagnie�d�onych instrukcji while.
Instrukcja continue nie powoduje opuszczenia p�tli ale natychmiastowe przej�cie do nast�pnego kroku iteracji. Je�li u�yjemy instrukcji continue z etykiet� sterowanie przekazywane jest do nawiasu otwieraj�cego blok instrukcji oznaczonych etykiet�.
Instrukcja z�o�ona to ci�g instrukcji pomi�dzy nawiasami { i }, nazywana blokiem instrukcji.
Je�li zadeklarujemy w bloku zmienn� to b�dzie ona widoczna tylko w tym bloku.
Przyk�ad 2.2 Widoczno�� zmiennych w bloku instrukcji
Zmienna ta zosta�a zadeklarowana tu dwukrotnie,
dodatkowo jeszcze jako zmienna r�nych typ�w:
{ { int i = 10; } { long i = 5; // mo�emy tu ponowanie zadeklarowa� zmienn� // nazwie 'i', poniewa� nie jest tu widoczna zadeklarowana // we wcze�niejszym bloku zmienna o tej samej nazwie } }