Java jest językiem programowania:
- o statycznie określonym typie (statically typed) tzn. że wartość zmiennej bądź wyrażenia ma już określony typ w momencie kompilacji (w językach dynamicznie typizowanych typ zmiennej bądź wyrażenia może zostać dopiero określony w momencie przypisania wartości bądź obliczenia wartości wyrażenia, w więc podczas wykonania programu)
- o ściśle określonym typie (strongly typed), gdzie typ:
* ściśle określa zakres zawartości jakie zmienna może przechowywać, bądź wyrażenie mieć (np: zakres wartości typu byte to <-128;127>
• ściśle określa zbiór operacji jakie mogą być wykonywane (np: operator - nie jest zdefiniowany dla łańcuchów znaków)
• oraz oznaczenie tych operacji (np: operator + dla liczb całkowitych i łańcuchów znaków)
W języku Java istnieją tylko dwa rodzaje typów wartości:
- proste (primitives)
- referencje (references)
Dodatkowo istnieje jeden specjalny typ którego nazwa nie jest określona (ale mówi się o typie null):
- typ wyrażenia null
- ponieważ typ wyrażenia null nie ma nazwy, więc nie można
• tworzyć zmiennych takiego typu
• rzutować na ten typ
- referencja null jest jedyną wartością jaką posiada wyrażenie typu null
- referencja null może być rzutowana na referencję do dowolnego typu
Typy proste (primitive types) są predefiniowane w języku Java, a nazwy są słowami kluczowymi
- nie można tworzyć identyfikatorów o takich nazwach
Typ logiczny boolean
Ten typ reprezentuje wartość logiczną o dwóch wartościach:
- prawda (true)
- fałsz(false)
Operatory dla typu boolean to:
- porównania (equalilty) == i =
- logiczne zaprzeczenie (logical complement) !
- logiczne & (AND), ^ (XOR), | (OR)
- warunkowe && (AND i || (OR)
- warunkowy operator ?:
- operator konkatenacji + dla typu String
Właściwości:
• Nie istnieją żadne konwersje z typu boolean do typów numerycznych i na odwrót
• Jedynym możliwym sposobem "konwersji" z typu numerycznego do typu boolean jest wykonanie operacji x!=0
• Jedynym możliwym sposobem "konwersji" z typu referencja do typu boolean jest wykonanie operacji x!=null
• Operator konkatenacji + dla String
- jeżeli jednym z argumentów operatora + jest typ String to następuje automatyczna konwersja wartości typu boolean do jego reprezentacji jako String, tzn: "true" albo "false" w zależności od jego wartości logicznej
• Operator & zwraca wartość prawda jeżeli oba argumenty mają wartość prawda i zwraca fałsz w pozostałych przypadkach
• Operator | zwraca wartość fąłsz jeżeli oba argumenty mają wartość fałsz i zwraca prawda w pozostałych przypadkach
• Operator ^ zwraca wartość prawda jeżeli wartości argumentów są różne i zwraca fałsz w pozostałych przypadkach
• Warunkowy operator && działa jak & z tym, że wartość prawego argumentu nie jest obliczana, gdy lewy ma wartość fałsz
• Warunkowy operator || działa jak | z tym, że wartość prawego argumentu jest obliczana tylko wtedy, gdy lewy ma wartość fałsz
Literał stanowi reprezentację wartości typu prymitywnego, łańcucha znaków (String) bądź typu null w kodzie źródłowym programu
W Java wyróżnia się następujące typy literałów:
- Liczby
• całkowite
• zmiennoprzecinkowe
- wartości boolowskie
- znaki
- łańcuchy znaków
- null
Typ boolean ma tylko dwie wartości reprezentowane przez literały:
- true - odpowiada wartości logicznej prawda
- false - odpowiada wartości logicznej fałsz
Literał boolowski ma zawsze typ wartości boolean
Typy numeryczne całkowite:
- byte: 8-bitowa liczba całkowita ze znakiem
- short: 16-bitowa liczba całkowita ze znakiem
- int: 32-bitowa liczba całkowita ze znakiem
- long: 64-bitowa liczba całkowita ze znakiem
- char: 16-bitowa liczba całkowita bez znkau reprezentująca jednostkę kodową UTF-16
Zakres liczb całkowitych ze znakiem to:
- byte: 8, [-128;127]
- short: 16, [-32768;32767]
- int: 32, [−2147483648;2147483647]
- long: 64, [−9223372036854775808;9223372036854775807]
Zakres licz całkowitych bez znkau to:
- char: 16, ['\u0000';'\uffff'] (tzn: [0;65535])
Operatory działające na typie całkowitym:
• Operatory porównania - wartość wyrażenia boolean <, <=, >=, >, ==, !=
• Operatory numeryczne - wartość wyrażenia int lub long
- jedno-argumentowe: + - (-x)
- multiplikatywne: * / % (np: x*y; x/y; x%y)
- addyktywne: + - (np: x+y; x-y)
- inkrementujący ++ z prefiksem i sufiksem (np: ++x; x++)
- dekrementujący -- z prefiksem i sufiksem (np: --x; x--)
- bitowe przesunięcie ze znakiem i bez << >> >>>
- bitowa negacja ~(not)
- bitowe operatory logiczne & (AND), | (OR), ^ (XOR)
- operator warunkowy ?:
• Operator rzutowania - konwertuje liczbę całkowitą na dowolny typ numeryczny
• Operator konkatenacji + dla Sting
- Jeżeli jednym z argumentów operatora + jest typ String to następuje automatyczna konwersja argumentu typu całkowitego do jego reprezentacji jako String w formacie dziesiętnym. Wynikiem działania operatora jest nowy String będący połączeniem argumentów operatora +
Właściwości:
• Jeżeli przynajmniej jeden z argumentów operatora numerycznego (z wyjątkiem przesunięcia bitowego) jest typu long, to operacja przeprowadzana jest z 64 bitową precyzją i wynikiem jest wartość typu long. Jeżeli drugi z argumentów nie jest typu long, to jest on rozszerzany do typu long (tzw. numeryczna promocja)
• W każdym innym przypadku operacje przeprowadzane są z 32 bitową precyzją w wynikiem jest wartość typu int. Jeżeli którykolwiek z argumentów nie jest typu int, to jest on rozszerzany do tego typu
• Każda wartość typu całkowitego może być rzutowana na dowolny typ numeryczny. Nie ma rzutowania na typ boolean, jak to jest w niektórych językach programowania np C++
• Operatory całkowite nie wykazują w żaden sposób przekroczenia zakresów (overflow, underflow)
• Operator całkowity może być źródłem wyjątku w następujących przypadkach:
- kiedy wymagana była operacja odpakowania (unboxing), a jej wynikiem było null - NullPointerException
- kiedy prawym argumentem operatora / lub % jest wartość 0 - ArithmeticException
- operatory inkrementacji i dekrementacji mogą powodować wyjątek OutOfMemoryError w przypadku wykonywania opakowania (boxing) a nie ma wystarczająco dożo pamięci do jej wykonania
Typy numeryczne zmiennopozycyjne:
- float: 32-bitowa liczba zgodna z IEEE754
- double: 64-bitowa liczba zgodna z IEEE754
Operator /:
• Dla liczb całkowitych mamy do czynienia z dzieleniem całkowitym, tzn. wynikiem jest liczba będąca częścią całkowitą z dzielenia (zaokrąglenie w kierunku 0)
• Jeżeli dzielna i dzielnik są liczbami niezerowymi różnych znaków to wynik jest ujemny. Jeżeli są tych samych znaków to wynik jest dodatni z jednym wyjątkiem
- dzielenia najmniejszej liczby ujemnej (wartość dowolnego zakresu danego typu całkowitego: int bądź long) przez -1. W tym przypadku wynikiem jest najmniejsza liczba ujemna
Operator %:
• Operator % to reszta z dzielenia całkowitego: 3 % 2 ->1
• Działa on na takiej zasadzie, że: (a/b)*b+(a%b)=a
• Oznacza to, że wynik może być:
- dodatni tylko wtedy, gdy dzielna jest dodatnia
- ujemny tylko wtedy, gdy dzielna jest ujemna
• Dla przykładu:
8%5 ->3
-8%5 -> -3
8%-5 -> 3
-8%-5 -> -3
••
Brak komentarzy:
Prześlij komentarz