Plan Szkolenia
Wprowadzenie do Java
- Historia i ewolucja Java
- Przegląd wersji i aktualizacji Java
- Co nowego w Java 17
- Konfiguracja Java Development Kit (JDK 17) i IDE
Struktura programu Java
- Pisanie prostego Java programu
- Przegląd składni Java
- Kompilowanie i uruchamianie Java aplikacji
Typy danych i zmienne
- Podstawowe typy danych i klasy opakowujące
- Deklarowanie zmiennych i stałych
- Konwersja typów i rzutowanie
Operatory w Java
- Operatory arytmetyczne, relacyjne, logiczne i bitowe
- Pierwszeństwo operatorów i asocjatywność
Instrukcje przepływu sterowania
- Instrukcje warunkowe (if-else, switch)
- Konstrukcje pętli (for, while, do-while)
- Rozszerzone wyrażenia switch (funkcja Java 17)
Wprowadzenie do pojęć OOP
- Klasy i obiekty
- Enkapsulacja, dziedziczenie, polimorfizm i abstrakcja
Tworzenie klas i obiektów
- Deklarowanie i inicjowanie obiektów
- Słowo kluczowe this
- Konstruktory (domyślne i parametryzowane)
Dziedziczenie
- Rozszerzanie klas (słowo kluczowe extends)
- Nadpisywanie metod i słowo kluczowe super
- Klasy i metody abstrakcyjne
Polimorfizm
- Polimorfizm w czasie kompilacji a polimorfizm w czasie wykonywania
- Przeciążanie i nadpisywanie metod
Interfejsy
- Definiowanie i implementowanie interfejsów
- Interfejsy funkcjonalne i metody domyślne
Klasy rekordów (funkcja Java 17)
- Zrozumienie rekordów w Java 17
- Jak rekordy upraszczają enkapsulację danych
Generics w Java
- Zrozumienie parametrów typu
- Klasy generyczne, metody i interfejsy
- Typy ograniczone i symbole wieloznaczne
Obsługa wyjątków
- Rodzaje wyjątków (zaznaczone i niezaznaczone)
- Bloki try-catch-finally
- Rzucanie i przechwytywanie wyjątków
- Tworzenie niestandardowych wyjątków
Java Struktura kolekcji
- Interfejsy List, Set, Map i Queue
- Popularne implementacje: ArrayList, HashMap, HashSet
- Iteratory i rozszerzone pętle for
Lambda Express i Functional Programming
- Wprowadzenie do wyrażeń lambda
- Składnia i użycie
- Interfejsy funkcjonalne
API strumieni
- Przegląd Java Strumieni
- Operacje na strumieniach (filtrowanie, mapowanie, redukcja)
- Strumienie równoległe i kwestie wydajności
Klasy zamknięte
- Definiowanie i używanie klas zamkniętych
- Dozwolone podklasy i ograniczenia
Dopasowywanie wzorców dla instanceof (Java 17 feature)
- Upraszczanie sprawdzania typów za pomocą dopasowywania wzorców
Bloki tekstowe
- Praca z wielowierszowymi blokami tekstu w Java
- Porównanie z tradycyjną obsługą ciągów znaków
Rekordy i ulepszenia serializacji
- Serializacja i kompatybilność wsteczna
- Jak rekordy poprawiają czytelność i konserwację kodu
Wycofywanie i usuwanie funkcji
- Przestarzałe interfejsy API w Java 17
- Usuwanie przestarzałych funkcji
Przełącznik Expressjon Ulepszenia
- Dopasowywanie wzorców w switch
- Używanie wyrażeń switch dla czystszego kodu
Funkcje obce i API pamięci (inkubator)
- Przegląd modułu inkubatora
- Praca z natywnym kodem w Java
Java System modułów (Project Jigsaw)
- Wprowadzenie do modułów w Java
- Tworzenie i używanie modułów
- Deskryptory modułów i plik module-info.java
- Zalety modularyzacji
Współbieżność i wielowątkowość
- Wprowadzenie do wątków i wielowątkowości
- Interfejs Runnable i interfejs Callable
- Synchronizacja, blokady i bezpieczeństwo wątków
Asynchroniczność Programming z CompetableFuture
- Pisanie kodu asynchronicznego
- Używanie CompetableFuture do operacji nieblokujących
Wdrażanie Java aplikacji
- Tworzenie i wykonywanie plików JAR
- Pakowanie i dystrybucja Java aplikacji
- Wprowadzenie do GraalVM (opcjonalnie)
Najlepsze praktyki i optymalizacja kodu
- Pisanie wydajnego i łatwego w utrzymaniu Java kodu
- Typowe pułapki wydajności i sposoby ich uniknięcia
- Techniki refaktoryzacji kodu
Podsumowanie i kolejne kroki
Wymagania
- Podstawowa wiedza z zakresu programowania
Uczestnicy
- Twórcy oprogramowania
- Programiści
Opinie uczestników (2)
Informacje o praktycznych zastosowaniach z rzeczywistych projektów.
Piotr Czapiewski
Szkolenie - Programowanie Java Enterprise J2EE i JBoss (EJB 3.0)
Komunikacja z trenerem - chęć odpowiadania na zadawane pytania.