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.
Patryk Czarnik
SENIOR JAVA DEVELOPER AND TRAINER
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).