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
••
czwartek, 5 czerwca 2014
Identyfikatory
Identyfikator to dowolnej długości ciąg znaków składający się z liter i cyfr, przy czym pierwszym znakiem musi być litera i ciąg znaków. Identyfikator nie może tworzyć: słowa kluczowego, literału typu boolean i literału typu null.
Za literę Java uznaje się znak Unicode spełniający kryterium:
- Character.isJavaIdentifierStart(int), np:
• znak ASCI o kodach \u0041-\u005a ('A'-'Z')
• znak ASCI o kodach \u0061-\u007a ('a'-'z')
• znaki: \u005f ('_') i \u0024('$')
Pozostałe znaki muszą spełniać kryterium:
- Character.isJavaIdentifierPart(int), np:
• są literami Java
• są cyframi Java - znaki ASCI o kodach \u0030-\u0039 ('0'-'9')
W identyfikatorach, z uwagi na czytelność kodu, NIGDY nie stosujemy znaków '$' bądź '_'
W wielu językach programowania dopuszczalne są pewne konstrukcje, które z punktu widzenia stylu programowania są wręcz zabronione
W programowaniu najważniejsza zawsze jest czytelność kodu, chyba że ktoś chce specjalnie uczynić kod mało czytelnym - ale do tego są specjalne narzędzia (code obfuscation)
Wielkość znaków ma znaczenie - nie wykorzystujemy tego, aby tworzyć zmienne o nazwach brzmiących tak samo
Nie zaleca się stosowania narodowych znaków diaktrycznych, mimo że jest to możliwe (to też litery)
Przykładowe poprawne identyfikatory:
int variables = 10;
boolean false = false;
Float realNumber = null;
char cAmEl = '\u0041';
long _123456 = 123456;
String Ładne_dęby = "Ładne dęby";
Przykładowe błędne identyfikatory:
short short&y = 12;
long 654_321 = 654321;
Za literę Java uznaje się znak Unicode spełniający kryterium:
- Character.isJavaIdentifierStart(int), np:
• znak ASCI o kodach \u0041-\u005a ('A'-'Z')
• znak ASCI o kodach \u0061-\u007a ('a'-'z')
• znaki: \u005f ('_') i \u0024('$')
Pozostałe znaki muszą spełniać kryterium:
- Character.isJavaIdentifierPart(int), np:
• są literami Java
• są cyframi Java - znaki ASCI o kodach \u0030-\u0039 ('0'-'9')
W identyfikatorach, z uwagi na czytelność kodu, NIGDY nie stosujemy znaków '$' bądź '_'
W wielu językach programowania dopuszczalne są pewne konstrukcje, które z punktu widzenia stylu programowania są wręcz zabronione
W programowaniu najważniejsza zawsze jest czytelność kodu, chyba że ktoś chce specjalnie uczynić kod mało czytelnym - ale do tego są specjalne narzędzia (code obfuscation)
Wielkość znaków ma znaczenie - nie wykorzystujemy tego, aby tworzyć zmienne o nazwach brzmiących tak samo
Nie zaleca się stosowania narodowych znaków diaktrycznych, mimo że jest to możliwe (to też litery)
Przykładowe poprawne identyfikatory:
int variables = 10;
boolean false = false;
Float realNumber = null;
char cAmEl = '\u0041';
long _123456 = 123456;
String Ładne_dęby = "Ładne dęby";
Przykładowe błędne identyfikatory:
short short&y = 12;
long 654_321 = 654321;
Wersje Javy
Java SE (Standard Edition) - platforma ogólnego przeznaczenia, dedykowana to tworzenia i uruchamiania aplikacji użytkownika końcowego
Java EE (Enterprise Edition) - platforma rozszerzona w stosunku do Java SE o sieciowy serwer aplikacji, dedykowana do tworzenia i uruchamiania aplikacji biznesowych
Java ME (Micro Edition) - platforma dedykowana do tworzenia i uruchamiania aplikacji uruchamianych w warunkach ograniczonych zasobów (urządzenia mobilne, przemysłowe, itp)
Java FX - platforma dedykowana do tworzenia i uruchamiania aplikacji tzw. bogatych (rich) aplikacji internetowych
Platformę Java SE można pobrać w dwóch postaciach:
- JRE (Java Runtime Environment) - przeznaczona wyłącznie do uruchamiania programów w języku Java
- JDK (Java Development Kit) - przeznaczona do kompilowania i uruchamiania programów w języku Java, zawiera JRE
Podczas instalacji w systemie windows należy pamiętać o zmiennych systemowych:
- JAVA_HOME
- PATH
Polecenia:
java -version wypisuje wersję Javy
java -help pomoc
java -verbose szczegółowe komunikaty podczas uruchamiania
Java EE (Enterprise Edition) - platforma rozszerzona w stosunku do Java SE o sieciowy serwer aplikacji, dedykowana do tworzenia i uruchamiania aplikacji biznesowych
Java ME (Micro Edition) - platforma dedykowana do tworzenia i uruchamiania aplikacji uruchamianych w warunkach ograniczonych zasobów (urządzenia mobilne, przemysłowe, itp)
Java FX - platforma dedykowana do tworzenia i uruchamiania aplikacji tzw. bogatych (rich) aplikacji internetowych
Platformę Java SE można pobrać w dwóch postaciach:
- JRE (Java Runtime Environment) - przeznaczona wyłącznie do uruchamiania programów w języku Java
- JDK (Java Development Kit) - przeznaczona do kompilowania i uruchamiania programów w języku Java, zawiera JRE
Podczas instalacji w systemie windows należy pamiętać o zmiennych systemowych:
- JAVA_HOME
- PATH
Polecenia:
java -version wypisuje wersję Javy
java -help pomoc
java -verbose szczegółowe komunikaty podczas uruchamiania
Subskrybuj:
Posty (Atom)