Zaawansowane programowanie w języku Java
Czas trwania szkolenia:4 dni (32h)
Kod kursu:J/DET
Poziom zaawansowania:
O szkoleniu Zaawansowane programowanie w języku Java
W cenie otrzymasz:
- Materiały szkoleniowe
- Certyfikat ukończenia szkolenia
- W przypadku szkolenia w trybie stacjonarnym zapewnimy Ci również lunch oraz sprzęt niezbędny do nauki
Dla kogo?
- Programiści chcący poznać język Java na zaawansowanym poziomie
Wymagania
- Umiejętność programowania w języku Java
- Przydatna znajomość podstaw Maven (użyte przy modułach)
Zalety
- Szkolenie przedstawia skomplikowane aspekty języka Java w przystępny i użyteczny sposób
- Praktyka przed teorią - wszystkie szkolenia technologiczne prowadzone są w formie warsztatowej. Konieczna teoria jest wyjaśniana na przykładzie praktycznych zadań
- Konkretne umiejętności - w ramach każdego szkolenia rozwijamy praktyczne umiejętności związane z daną technologią i tematyką
- Nauka z praktykami - wszyscy trenerzy na co dzień pracują w projektach, gwarantuje to dostęp do eksperckiej wiedzy i praktycznego know-how
Cele szkolenia
- Zapoznanie uczestników z zaawansowanymi aspektami programowania w języku Java
Program
Enumeracje
- Więcej niż wyliczenia
- Definiowanie metod w enumeracjach
- Atrybuty w enumeracjach
- Konstruktory w enumeracjach
- API dla enumeracji
Tworzenie adnotacji
- Podstawy adnotacji
- Adnotacje na pakiecie
- Introspekcja a adnotacje
- Składnia tworzenia adnotacji
- Adnotacje wielokrotne
- Interfejs AnnotatedElement
- Wzmianka o javax.annotation.processing
Dynamiczna Java
- Dynamiczne tworzenie obiektów
- Refleksja
- Invokedynamic
- Dynamiczne proxy
- Wzmianka o module jdk.dynalink
- Wzmianka o agentach
Typy generyczne
- Użycie klas generycznych
- Tworzenie typów generycznych
- Tworzenie metod generycznych
- Typy generyczne a dziedziczenie
- Znaczniki (wildcards): ?, extends i super
- Znaczniki wielokrotne
- Porady użycia znaczników
- Konwencje nazewnictwa
- Kiedy potrzebny @SupressWarning("unchecked")?
- Zacieranie typów (type erasure)
- Porady tworzenia generyków
- Problem metod generycznych z varargs (@SafeVarargs)
- Typy generyczne a tablice
- Rekursywne typy generyczne
- Ograniczenia generyczności
- Ciekawe przypadki (wzorce)
Programowanie funkcyjne
- Interfejs funkcyjny
- Wyrażenia lambda (składnia, użycie, wskazówki)
- forEach w Iterable i Map
- Referencje do metod i konstruktorów
- Wybrane interfejsy funkcyjne
- Metody prywatne, statyczne i domyślne w interfejsach
- Złączanie metod (functional composition)
- Strumienie plików, tablic, kolekcji, adhoc
- Praca na strumieniach: filtrowanie, redukowanie, przekształcanie
- Kończenie strumieni z i bez agregacji
- Strumienie typów prostych
- StreamSupport
- Czytelne strumienie
- Kiedy strumienie, a kiedy nie
- Dokładniej Optional i Collectors
- Strumienie współbieżne
- Gdzie jeszcze API funkcyjne
Moduły
- public zbyt publiczny
- Co dają moduły
- Moduły nienazwane i automatyczne
- Struktura i nazewnictwo modułów
- Deskryptor modułu
- Dostęp do zawartości modułu
- Dostęp dla refleksji
- Moduły wymagane
- Udostępnianie i otwieranie pakietów
- Dostarczanie i używanie usług
- Dystrybucja usług
- Moduły a ServiceLoader
- Kompilacja modułu
- Pakowanie modułu (modular JAR)
- Uruchamianie modułu
- jlink i moduł aplikacji
- JAR modułu dla wielu wersji Java (multi-release)
- Opcje Java dla modułów
- Upgradeable modules
- Opcje hakowania modułów
- Wzmianka o narzędziach
- Wzmianka o warstwach modułów
- Migracja do modułów
- jdeps - analiza zależności
- Problemy migracji do modułów
- Pliki atrybutów
- Testowanie modułów
- Wzmianka o jmod
Specjalne referencje (OPCJONALNE)
- Reference i ReferenceQueue
- SoftReference
- WeakReference i WeakHashMap
- PhantomReference i Cleaner
- Cykl życia obiektu i wycieki pamięci (opcjonalnie)