OCPJP - 3 pytania i odpowiedzi ze szkolenia (luty 2016)

Pytania w tym artykule pojawiły się podczas szkolenia Java Standard Edition 7 część II – przygotowanie do egzaminu "Oracle Certified Professional, Java SE 7 Programmer" [OCPJP 7]  realizowanego w dniach 10-12.02.2016r.


O ile więcej wiedzy i nauki wymaga egzamin Java Programmer II (Professional) niż I (Associate)?

"Wielokrotnie więcej! Egzamin nr 1 dotyczy głównie samego języka Java: pętle, referencje, dziedziczenie, wyjątki. Te rzeczy lepiej ""rozumieć"" niż się ich uczyć :) Wymagana jest wiedza na temat drobnego wycinka Java API: String, StringBuilder, ArrayList. Przy czym nie można zakładać, że egzamin jest prosty: jest mało czasu, a pytania są podchwytliwe.
Natomiast egzamin nr 2 dotyczy przede wszystkim zawartości Java API we wskazanym zakresie. Obejmuje to całe kolekcje, wejście/wyjście włącznie z bardzo szczegółową znajomością pakietu java.nio.file, przetwarzanie tekstu (w tym regex, lokalizacja, formatowanie), obsługę baz danych i wielowątkowość, w tym znów bardzo szczegółową znajomość java.util.concurrent. Nawet doświadczony programista Java zwykle nie zna wszystkich tych rzeczy tak szczegółowo i trzeba się tego nauczyć..."

Dlaczego u Pana nie trzeba było pisać final, a u mnie trzeba?

Bo ja (prowadzący) mam skonfigurowaną Javę w wersji 8, a Pan (uczestnik) 7. Ogólnie w Javie wewnątrz klas anonimowych można odwoływać się do zmiennych lokalnych (i parametrów metod) z kontekstu zewnętrznego. Ale tylko pod warunkiem, że zmienne te są "final", a więc po zainicjowaniu nie mogą już zmienić swojej wartości. Do Javy 7 przy takiej zmiennej trzeba jawnie napisać, że jest "final". Od Javy 8 nie trzeba pisać słowa "final", ale de facto zmienna i tak musi być final - nie może zmieniać raz przyjętej wartości! W Javie 8 dotyczy to także wyrażeń lambda.

Jak poprawnie zdefiniować metodę equals?

Są pewne wymagania "matematyczne", opisane w materiałach ze szkolenia. Ale w praktyce najprościej poprosić o to narzędzie deweloperskie. Eclipse i Netbeans potrafią generować wiele standardowych fragmentów kodu, w tym metody equals i hashCode (zazwyczaj definiuje się je jednocześnie).