План на курса
Въведение в Java
- История и еволюция на Java
- Преглед на Java версии и актуализации
- Какво е новото в Java 17
- Настройване на Java комплект за разработка (JDK 17) и IDE
Java Структура на програмата
- Писане на проста Java програма
- Java преглед на синтаксиса
- Компилиране и стартиране на Java приложения
Типове данни и променливи
- Примитивни типове данни и класове обвивки
- Деклариране на променливи и константи
- Типово преобразуване и отливане
Оператори в Java
- Аритметични, релационни, логически и побитови оператори
- Предимство на оператора и асоциативност
Изявления за контролен поток
- Условни изрази (if-else, switch)
- Циклични конструкции (for, while, do-while)
- Подобрени изрази за превключване (функция Java 17)
Въведение в ООП концепциите
- Класове и обекти
- Капсулиране, наследяване, полиморфизъм и абстракция
Създаване на класове и обекти
- Деклариране и инициализиране на обекти
- Тази ключова дума
- Конструктори (по подразбиране и параметризирани)
Наследство
- Разширяване на класове (ключова дума extends)
- Замяна на метод и супер ключова дума
- Абстрактни класове и методи
Полиморфизъм
- Полиморфизъм по време на компилиране срещу време на изпълнение
- Претоварване и отмяна на метода
Интерфейси
- Дефиниране и внедряване на интерфейси
- Функционални интерфейси и методи по подразбиране
Записване на класове (Java 17 функция)
- Разбиране на записите в Java 17
- Как записите опростяват капсулирането на данни
Генерични продукти в Java
- Разбиране на параметрите на типа
- Генерични класове, методи и интерфейси
- Ограничени типове и заместващи знаци
Обработка на изключения
- Видове изключения (маркирани и немаркирани)
- Опитай-хвани-накрая блокове
- Хвърляне и прихващане на изключения
- Създаване на персонализирани изключения
Java Рамка за колекции
- Интерфейси за списък, набор, карта и опашка
- Популярни реализации: ArrayList, HashMap, HashSet
- Итератори и подобрени for цикли
Ламбда Express йони и функционални Programming
- Въведение в ламбда изразите
- Синтаксис и използване
- Функционални интерфейси
API за поток
- Преглед на Java потоци
- Поточни операции (филтриране, картографиране, намаляване)
- Паралелни потоци и съображения за производителност
Запечатани класове
- Дефиниране и използване на запечатани класове
- Разрешени подкласове и ограничения
Съвпадение на шаблон за instanceof (Java 17 функция)
- Опростяване на типовите проверки със съпоставяне на шаблони
Текстови блокове
- Работа с многоредови текстови блокове в Java
- Сравнение с традиционната обработка на низове
Подобрения в записите и сериализацията
- Сериализация и обратна съвместимост
- Как записите подобряват четливостта и поддръжката на кода
Освобождаване и премахване на функции
- Отхвърлени API в Java 17
- Премахване на остарели функции
Switch Expression Подобрения
- Съвпадение на шаблон в превключвател
- Използване на изрази за превключване за по-чист код
API за външни функции и памет (инкубатор)
- Преглед на инкубаторния модул
- Работа с естествен код в Java
Java Модулна система (проект Jigsaw)
- Въведение в модулите в Java
- Създаване и използване на модули
- Дескриптори на модули и module-info.java
- Предимства на модулацията
Паралелност и многопоточност
- Въведение в нишките и многонишковостта
- Runnable интерфейс и Callable интерфейс
- Синхронизация, ключалки и безопасност на нишката
Асинхронен Programming с CompetableFuture
- Писане на асинхронен код
- Използване на CompetableFuture за неблокиращи операции
Разполагане на Java приложения
- Създаване и изпълнение на JAR файлове
- Опаковане и разпространение Java на приложения
- Въведение в GraalVM (по избор)
Най-добри практики и оптимизация на кода
- Писане на ефективен и поддържаем Java код
- Често срещани капани в производителността и как да ги избегнете
- Техники за рефакторинг на код
Обобщение и следващи стъпки
Изисквания
- Основни познания по програмиране
Публика
- Разработчици на софтуер
- Програмисти