Struktura metody
dostęp modyfikatory typZwracany nazwa parametry
pierwsze dwa nie są obowiązkowe.
Opcjonalne modyfikatory:
static
, abstract
, final
, synchronized
, native
, strictfp
mogą występować w dowolnej kolejności, konstruktor nie może mieć żadnego z nich.
static
oraz final
są dozwolone dla pól i metod
transient
oraz volatile
– tylko dla pól
synchronized
, abstract
oraz native
– tylko dla metod
final
– dozwolone dla zmiennych lokalnych.
Klasy finalne nie mogą być rozszerzane a metody nadpisywane (ale mogą być przeciążane).
Zmiennie finalne nie mogą zmienić wartości ale mogą być przesłonięte.
Statyczna metoda finalna nie może być przesłaniana.
Może istnieć metoda i pole o tej samej nazwie w tym samym zasięgu.
Wywołanie metody
Przy dopasowaniu metody do wywołania java używa metody z najdokładniejszymi typami parametrów, nigdy typy zmiennych nie są zawężane (w przeciwieństwie do przypisywania zmiennych całkowitych). Dotyczy także konstruktorów.
Priorytety przy dopasowaniach:
- dokładne dopasowanie
- bardziej pojemny typ
- automatyczne opakowywanie
- varargs
Przeprowadzana jest tylko jedna konwersja.
Nie będzie konwersji na bardziej pojemny typ prosty a następnie jego odpowiednik obiektowy.
Wywołanie metody protected na rzecz obiektu z innego pakietu jest możliwe tylko jeśli posługujemy się referencją podklasy.
W przypadku posługiwania się referencją w innym pakiecie to musi być referencja typu dziedziczącego.
Modyfikator private dotyczy wszystkich obiektów tego typu a nie tylko jednego obiektu (patrz equals()
).
Do metod i pól statycznych można odwoływać się przez referencję instancji (nawet jeśli wskazuje na null).
Przy wywoływaniu metody z nullem wywoływana jest najbardziej szczegółowa implementacja (klasa która jest najniżej w hierarchii dziedziczenia).
Odwoływanie do pól lub metod statycznych klasy nadrzędnej jest możliwe przez referencje klasy dziedziczącej (ale klasa dziedzicząca nie jest wtedy ładowana).
Metoda statyczna nie ma dostępu do metod i pól instancyjnych.
Finalna zmienna musi być zainicjalizowany w konstruktorze lub w inicjalizacji instancyjnej, ewentualnie w sekcji statycznej jeśli jest statyczny.
Finalne zmienne typów prostych są konwertowane do literałów (są znane w czasie kompilacji).
Typ podawany w lamdzie musi być identyczny z typem w sygnaturze interfejsu funkcyjnego. Jeśli w interfejsie jest List
wtedy ArrayList
w lambdzie się nie skompiluje.
Ź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