Prawo Murphy'ego: Im doskonalej program wykonuje swoje funkcje, tym dotkliwiej cię zawiedzie.
Java - Typy danych i literały
Wewnętrzne typy danych  |   Tablice  |   Literały  |   Zmienne  |   Wyrażenia

Wewnętrzne typy danych

Język Java udostępnia szereg standardowych typów zmiennych i literałów, z których większość można spotkać również w innych językach programowania. Typy te nazywane są po angielsku intrinsic types, co można przetłumaczyć jako typy wewnętrzne. Poniższa tabela zawarta listę wewnętrznych typów danych, podając dla każdego z nich nazwę oraz wielkość pamięci zajmowanej przez zmienne danego typu (w bitach).
TypPamięć (w bitach)Opis
boolean8wartość logiczne true lub false
char16kod znaku ze zbioru znaków Unicode
byte8liczba całkowita ze znakiem
short16liczba całkowita ze znakiem
int32liczba całkowita ze znakiem
long64liczba całkowita ze znakiem
float32liczba zmiennoprzecinkowa
double64liczba zmiennoprzecinkowa

Tablice

Deklaracja tablic w Javie jest bardzo podobna do deklaracji w C++. Z jednym, ale bardzo istotnym wyjątkiem: w Javie każda tablica musi być deklarowana dynamicznie, z użyciem operatora new, który przydziela w pamięci miejsce niezbędne dla tablicy.
Przykłady deklaracji tablic w Javie:
    //tablica jednowymiarowa
     int mojatablica [] = new int [100];
     int [] mojatablica = new int [100];

   //tablica dwuwymiarowa
     int mojatablica [] = new int [10] [10];
     int [] [] mojatablica = new int [10] [10];

Literały

W Javie możemy używać literałów:
  • całkowitych (dziesiętnie, ósemkowo i szesnastkowo) odpowiadających typom int i long
    • Ciąg cyfr poprzedzony ewentualnie znakiem automatycznie traktowany jest jako literał całkowity typu int. Umieszczenie na końcu takiego literału znaku L lub l wskazuje, że mamy do czynienia z literałem typu long. Literały o wartości bezwzględnej większej niż 2.147.483.647 automatycznie przyjmują postać liczby typu long.
       
    • Literały całkowite rozpoczynające się znakiem 0 (zero) są liczbami ósemkowymi.
       
    • Literały całkowite zaczynające się sekwencją 0x lub 0X traktowane są jako liczby szesnastkowe. Do zapisu cyfr szesnastkowych można używać zarówno małych jak i wielkich liter alfabetu (od A do F).
       
  • rzeczywistych (stałoprzecinkowych i zmiennoprzecinkowych) odpowiadających typom float i double
    • Literały rzeczywiste traktowane są jako liczby typu double.
       
    • Aby zmienić standardowe przypisanie i wymusić interpretację liczby jako typu float należy dodać na końcu literału litery F lub f.
       
    • Można też jawne przypisać literałowi typu double poprzez dodanie litery D lub d.
       
  • znakowych i łańcuchowych związanych z typem char i String
    • 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.
       
    • Do zapisu znaków specjalnych służą następujące literały:
      	\n	New line (znak nowej linii)
      	\t	Horizontal tab (tabulacja pozioma)
      	\b	Backspace
      	\r	Carriage return (powrót karetki)
      	\f	From feed (znak nowej strony)
      	\'	Single quote (apostrof)
      	\"	Double quote (cudzysłów)
      	\\	Backslash (lewy ukośnik)
      	

       
    • Literał łańcuchowy to sekwencja znaków ujętymi w " (cudzysłów). Łańcuch w Javie nie jest, jak w C++, tablicą znaków zakończoną znakiem pustym.
       
  • logicznych reprezentujące 2 wartości logiczne typu boolean: true i false reprezentujące wartości prawda i fałsz. Odmiennie niż w języku C++, nie można dokonywać konwersji wartości typu boolean do wartości typu int.
     
Przykłady literałów:
	123, 123L, 0456, 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

	' '                spacja
	'\\'               lewy ukośnik
	'G'                znak G
	'\x20'             spacja

	"To jest tekst"    łańcuch znaków

Zmienne

W Javie każda zmienna musi być jawnie zadeklarowana, zanim zostanie użyta. Deklaracja zmiennej może znajdować się w dowolnym miejscu metody (pojęcie metody jest równoważne pojęciu funkcji w strukturalnych językach programowania).
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 zapis kończymy średnikiem. Deklarację możemy przedstawić schematycznie w następujący sposób:
NazwaTypu  NazwaZmiennej [ = WartośćPoczątkowa ];
      gdzie napis w nawiasach [ ] oznacza opcjonalną część deklaracji.
NazwaZmiennej musi zaczynać się literą, znakiem podkreślenia lub znakiem dolara. Dalej, NazwaZmiennej może zawierać cyfry lub litery alfabetu. W skład alfabetu wchodzą znaki:
  • a do z
     
  • A do Z
     
  • zbiór znaków Unicode.
     
Oznacza to zatem, że napisy Łódź i Wartość są poprawnymi identyfikatorami Javy.
Należy pamiętać, że Java odróżnia wielkość liter w nazwach identyfikatorów. Oznacza to, że np.: ala, ALA i Ala są trzema zupełnie niezależnymi identyfikatorami.

W Javie zastosowano mechanizm nadawania deklarowanym zmiennym domyślnych wartości początkowych:

Typ danychWartość domyślna
booleanfalse
byte0
char0X0
short0
int0
long0
float0.0F
double0.0D
Przykładowe deklaracje zmiennych: 
	//zmienna typu całkowitego z nadaniem wartości początkowej 10
		int x = 10;
	// zmienna typu logicznego z przypisaniem domyślna wartość false
		boolean koniec;
	// zmienna typu logicznego z nadaniem jej wartości true
		boolean start = true;
	// zmienna znakowej z nadaniem jej wartości Z
		char znak = 'Z';

Wyrażenia

Do tworzenia wyrażeń służą: zmienne, wywołania funkcji i operatory, z których większość zaczerpnięto z języka C++. W Javie wprowadzono jednak szereg zmian dotyczących operatorów.
  • Udostępniono nowy operator >>>, oznaczający przesunięcie bitowe w prawo, bez znaku (postaci: op1 >>> op2, gdzie op2 jest liczbą określającą o ile pozycji nastąpi przesunięcie).
     
  • Przyjęto zasadę, że operatory nie mogą być przeciążane.
     
  • Jeśli argumentami operatorów: &, | lub ^ 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 logicznej: sumy, iloczynu i wyłączającego ALBO (ang. "exclusive or", XOR).
     
  • Zastosowanie operatorów logicznych & i | różni się od użycia dostępnych operatorów && i || tym, że podczas ich wartościowania nie jest stosowana zasada "short-circuit evaluation", polegająca na obliczaniu wartości składowych wyrażenia logicznego tylko wtedy, gdy wpływają one na wartość całego wyrażenia.
     
  • 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 w języku C++, do wartości typu całkowitego.
     
  • Dla operatorów binarnych, w większości przypadków, występuje w Javie automatyczna konwersja zmiennych zadeklarowanych jako: byte, char i short do typu int, co może prowadzić do wystąpienia błędu w instrukcji przypisania.
    Dla zmiennych x, y, z typu byte, zadeklarowanych np. tak: 
        byte x;
        byte y = 2;
        byte z = 3;
    w poniższej instrukcji wystąpi błąd przypisania,
    spowodowany automatyczną konwersją typu zmiennych. 
        x = y * z;    // błąd przypisania wyniku typu int
                      // do zmiennej typu byte
    Przyczyną błędu jest dokonanie, przed wykonaniem operacji mnożenia,
    automatycznej konwersji typu zmiennych y i z do typu int.
    
    Aby uniknąć tego błędu, musimy zastosować
    konwersję wyniku operacji do typu byte: 
        x = (byte)(y * z);     //to wyrażenie jest poprawne
    

     
« wstecz   dalej »