OCA Operatory i instrukcje

Priorytety operatorów

– indeks tablicy, wywołanie metody i odwołanie do pola po kropce
– post-unary ++,+
– pre-unary --, -
– reszta jednoargumentowych (!, ~ – bitowa negacja)
– rzutowanie, new
– mnożenie / dzielenie / modulo
– dodawanie/ odejmowanie
– przesunięcia bitowe
– relacyjne
– równość / nierówność, instanceof
– operatory logiczne
– podwójne operatory logiczne
– operator trójargumentowy
– przypisania (compound)

Pojedyncze operatory logiczne & i | na typach logicznych mają działanie logiczne na numerycznych to operacje bitowe.

Wartość ujemna jest tworzona przez negacje binarną wartości dodatniej (kodowanie U2). Negacja binarna neguje bity i dodaje 1 więc Integer.MIN_VALUE == -Integer.MIN_VALUE.


Rzutowanie

Przy operacji na dwóch różnych typach prostych mniejszy jest promowany do większego.

Typy proste są automatycznie opakowywane, typy opakowujące są automatycznie rozpakowywane.

byte, short i char są promowane do int przy dwuargumentowych operacjach arytmetycznych
System.out.println('a') wyswietla literę
ale System.out.println('a' + 1 ) wyswietla 98.

Kompilator nie pozwala na niejawne rzutowanie w dół (jest wyjątek patrz niżej), jawne rzutowanie na typ całkowity ucina część ułamkową, w obrębie typów całkowitych bierze tylko tyle najmniej istotnych bitów ile może.

Niejawne rzutowanie w dół ma miejsce dla całkowitych zmiennych finalnych (lub literałów) mieszczących się w zakresie docelowego typu.

short i char mają różne zakresy (poza powyższym przypadkiem potrzebne jest rzutowanie).

x+=y to tak naprawdę x =(typ y) x + y ma znaczenie jeśli argumenty są różnych typów.

Można rzutować typy proste na opakowujące
int i = 1; (Integer) i.

Można rzutować nulla.

Można rzutować wszystkie niefinalne klasy na interfejs. Któraś podklasa może implementować ten interfejs, więc kompilator dopuszcza rzutowanie.

Przy wywoływaniu metod (rzutowanie parametru) występują dodatkowe warunki.


Operator trójargumentowy

Wykonuje tylko jedną z dwóch instrukcji.

Instrukcja może być kolejnym operatorem trójargumentowym.

Jeśli ma argumenty byte i short – wynik to short.

Jeśli ma argumenty byte, short lub char a drugi to literał (int) możliwy do zapisania w pierwszym – wynik to pierwszy typ.

W innych przypadkach typy muszą być możliwe do konwersji inaczej występuje błąd kompilacji.


Pętle

Nie można przesłaniać zmiennych w pętli for, wszystkie deklarowane zmienne muszą być tego samego typu. Przecinek nic nie zmienia – typ musi się pojawić tylko raz.

Zmienne zadeklarowane w bloku do nie są widoczne w warunku while.

Foreach działa tylko dla obiektów implementujących Iterable.

while nie wymaga średnika, do-while wymaga po warunku, żadne z nich nie wymaga {}.


Etykiety

Pętle, switche i warunki mogą mieć etykiety nazwa: instrukcja. Wykonanie wewnątrz break nazwa przenosi wykonanie do następnej instrukcji po bloku oznaczonym etykietą.


Switch

Pusty switch {} jest ok, zmienna musi być wystarczająco pojemna żeby pomieścić wszystkie przypadki, przypadki nie mogą się powtarzać. Long nie może być w switchu.

Switch jako wartość przed dwukropkiem dopuszcza tylko te znane w momencie kompilacji (literały, zmienne finalne zadeklarowane i zainicjalizowane w jednej instrukcji oraz enumy).

Zmienne to: całkowite typy numeryczne + char oraz ich typy opakowujące, enumy, Stringi (Java 7).

Zmienna zadeklarowana w jednym wpisie case switcha jest zadeklarowana (ale nie zainicjalizowana) także w innych. Dodanie nawiasów klamrowych po case zawęża zakres (wtedy powyższy przypadek nie ma miejsca) ale break; i tak jest wymagane.


Referencje

Przypisanie ma wartość prawej strony (z=1; x =y = ++z; wszystkie zmienne są równe dwa).

Dwa nulle są sobie równe.

null jest zamieniany na „null” jeśli wyrażenie jest traktowane jako String (na przykład przy dodawaniu Stringów).

Nie można porównywać referencji różnych typów (obiektowych).

Źródła:
„OCA: Oracle Certified Associate Java SE 8 Programmer I Study Guide: Exam 1Z0-808” Jeanne Boyarsky, Scott Selikoff
„JA+ V8 for Oracle Certified Associate – Java SE8 Programmer I” http://enthuware.com

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *