🏓 Знакомимся с Java на примере пинг-понга
Хотите узнать, как создавать программы на Java, даже если никогда не программировали?
Ждем вас на открытом вебинаре 24 сентября в 20:00 мск, где мы разберем:
- что такое программирование и язык Java;
- как создать игру пинг-понг с нуля на Java;
- как работать с двумерной графикой в Java.
Урок полезен для тех, кто хочет начать изучать Java с нуля и увидеть на практике, как создаются приложения.
Спикер Александр Фисунов — Senior Kotlin Developer в SSP Software на проекте ВТБ, опытный Java-разработчик и кандидат технических наук.
Встречаемся в преддверии старта курса «Специализация Java-разработчик».
Все участники вебинара получат специальную цену на обучение!
👉 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cASXTfРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Советshow-sql
- это самый простой (но не самый лучший!) способ увидеть SQL, сгенерированный Hibernate. Вы можете немного улучшить его, включив форматирование, показ JPQL-запроса, сгенерировавшего запрос, и включив подсветку, которая добавляет некоторый цвет к выводу.
👉@BookJava
Java
Урок 1. Java Start | Java для начинающих | Java с нуля
Урок 2. Java переменные | Java типы данных | Java для автоматизаторов | Урок 2
Урок 3. Java комментарий | Java как вывести сообщения в консоль | Java конкатенация строк | Урок 3
Урок 4. Java арифметические операции | Java для автоматизаторов | строк | Урок 4
Урок 5. Java библиотеки классов | Java Scanner | строк | Урок 5
Урок 6. Java String | Класс String и его методы
Урок 7. Условный оператор if в Java | Оператор switch | Конструкция if-else |
источник
👉@BookJava
Как создавать код, который легко модифицировать и поддерживать?
Узнайте на открытом вебинаре «Практическое руководство по применению SOLID-принципов» 16 сентября в 20:00 мск, где мы разберем:
- основы и значение каждого из SOLID-принципов;
- пошаговый алгоритм применения SOLID для разработки расширяемого и поддерживаемого кода;
- примеры применения SOLID-принципов для решения реальных задач:
- как минимизировать затраты на изменение требований к ПО, следуя SOLID.
Урок для backend и fullstack-разработчиков, архитекторов ПО и начинающих программистов.
Встречаемся в преддверии старта курса «Архитектура и шаблоны проектирования». Все участники вебинара получат специальную цену на обучение!
Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие https://vk.cc/cANrIx.
Совет по SpringFramework 💡
В SpringFramework есть класс DataSize, который может помочь вам с преобразованием между единицами размера от байтов до терабайтов. Сумма должна быть типа long. Дробные числа не поддерживаются.
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/unit/DataSize.html
👉@BookJava
Совет по Spring Boot💡
Spring Boot Custom Bean Validations с Jakarta Constraint Validator, группировка ограничений проверки, последовательность групп и i18n
https://gist.github.com/aoudiamoncef/9eeece142d1ef0faa4d06216a41282a2
👉@BookJava
📚 Пройди тест на знание Java и получи доступ к 6️⃣🔤 открытым урокам курса «Разработчик на Spring Framework».
Два открытых урока можно посмотреть без регистрации и оценить формат обучения. Для доступа ко всем открытым урокам из курса необходимо пройти входное тестирование: ответить на 21 вопрос и уложиться в тайминг.
➡️ НАЧАТЬ ТЕСТИРОВАНИЕ
А еще, приглашаем посетить наш бесплатный открытый урок «Как эффективно использовать OAuth 2 в Spring-приложениях?», который пройдет онлайн, 13 сентября в 20:00 мск.Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
JDK 23: Чего ожидать?
JDK 23, выпуск которого запланирован на 17 сентября 2024 года, принесет множество значительных улучшений и усовершенствований в язык программирования Java и его поддерживающую экосистему. Этот выпуск станет второй подряд версией JDK без долгосрочной поддержки (non-LTS), после предыдущего LTS-релиза JDK 21.
Стоит отметить, что следующий запланированный LTS-релиз комплекта для разработки Java — JDK 25, который ожидается в сентябре 2025 года и, как предполагается, будет следовать той же модели долгосрочной поддержки, что и предыдущие LTS-версии.
💡 JDK 23 сейчас находится на стадии кандидата в релизы, что означает, что его функции завершены. Новые JEP больше не будут добавляться в этот выпуск.
💡 Кандидат в релизы (Release Candidate, RC) в контексте JDK — это как финальная версия программного обеспечения перед его официальным выпуском. Оно почти готово для публичного релиза, но проходит последний этап тестирования, чтобы выявить любые мелкие проблемы или ошибки, которые могли быть пропущены. Если серьезные проблемы не обнаружены, именно эта версия RC будет выпущена для всех. Это финальный шаг, чтобы убедиться, что программное обеспечение стабильно и готово для широкого использования.
https://www.unlogged.io/post/jdk-23-what-to-expect
👉@BookJava
Java varargs
Java varargs (variable arguments) — это механизм, предоставляемый Java, который позволяет методу принимать переменное количество аргументов одного типа. Он позволяет передавать любое количество аргументов заданного типа в метод, без явного указания массива аргументов.
Для объявления переменного количества аргументов в Java используется троеточие (...) после типа данных аргумента в определении метода.
👉@BookJava
Подборка Telegram каналов для программистов
Системное администрирование 📌
/channel/devops_star DevOps Star (Звезда Девопса)
/channel/i_linux Системный администратор
/channel/linuxchmod Linux
/channel/sys_adminos Системный Администратор
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux
1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus
Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах
GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
/channel/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
/channel/game_devv Все о разработке игр
Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов
БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT
/channel/php_lib Библиотека PHP программиста 👨🏼💻👩💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста
QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика
Шутки программистов 📌
/channel/itumor Шутки программистов
Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров
Английский 📌
/channel/UchuEnglish Английский с нуля
Математика 📌
/channel/Pomatematike Канал по математике
/channel/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак📌
/channel/Excel_lifehack
/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)
Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT
Гринатом, ИТ-интегратор Росатома, в поиске Java-разработчика в команду по проектированию и разработке отраслевой системы электронного документооборота. Человека, знакомого с Java от и до и работающего с языком программирования не менее 3 лет.
Приветствуется знание SQL, GraalVM, библиотек и фреймворков, а также опыт написания юнит- и интеграционных тестов и понимание работы в CI/CD.
Если это про вас, откликайтесь на вакансию по ссылке: https://voronezh.hh.ru/vacancy/105691838
👩💻 Как эффективно использовать OAuth 2 в Spring-приложениях?
Ждем вас на открытом вебинаре 13 сентября в 20:00 мск.
где мы разберем:
✔️ что такое OAuth 2 и как он работает в Spring-приложениях;
✔️ какие роли и процессы задействованы в фреймворке авторизации;
✔️ его расширения;
✔️ ответы на все возникающие вопросы.
Урок идеально подходит для Java- и Kotlin-разработчиков.
Встречаемся в преддверии старта курса «Разработчик на Spring Framework».
Все участники вебинара получат специальную цену на обучение!
📌 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cAmmWPРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Amplicode учит вашу IDE говорить на языке Spring Boot!
Amplicode – многофункциональный плагин для IntelliJ IDEA Community и Ultimate, упрощает и ускоряет работу с технологиями Spring Boot, JPA, Docker, Kafka, Liquibase, MapStruct и т.д.
Основные возможности:
⚡ Навигация по проекту согласно архитектуре Spring приложения
⚡ Создание объектов сразу в терминах фреймворка вместо Java классов: контроллеры, репозитории, сервисы, сущности, события, DTO, мапперы и т.д.
⚡ Палитра и инспектор, позволяющие видеть опции, доступные разработчику в текущем контексте
⚡ Умные инжекции, подсказки и исправление ошибок
Это малая часть того, на что способен Amplicode. В настоящий момент возможности доступны абсолютно бесплатно!
Сделано с любовью к разработчикам командой, создавшей суперпопулярный плагин JPA Buddy ❤️
Попробовать Amplicode
Посмотрите как Amplicode помогает разрабатывать на Spring Boot в IntelliJ IDEA!
Разрешаем фронту подписаться на бэкенд. Server Sent Events на Java Spring Boot.
Простой способ избежать постоянного опроса сервера. Событийный способ работы.
источник
👉@BookJava
Зачем используется Serial Version UID? Что если не определить его?
Сериализуемый класс явно или неявно, но всегда имеет serialVersionUID
. Это число типа long
, которое представляет собой «версию» сериализационной формы класса. Если при сериализации/десериализации значения serialVersionUID
не совпадают – будет выброшено InvalidClassException
.
Для совпадающих версий работает мощная поддержка эволюции класса – совместимые изменения, такие как добавление или удаление полей, не приводят к InvalidClassException
.
Неявное значение вычисляется автоматически в рантайме, и включает в себя информацию о имени типа, списке родителей и полей (с точностью до коллизии). По смыслу это похоже на хэш-сумму класса. Соответственно, при любом изменении класса значение изменится, и поддержка эволюции окажется бесполезной.
Всегда лучше явно указывать любое значение serialVersionUID
, и изменять только в тех редких случаях, когда требуется сломать совместимость с предыдущими версиями. Стандартная утилита JDK serialver
умеет «угадывать» авто-генерированное значение. Она используется чтобы зафиксировать значение для включения поддержки эволюции созданного ранее класса.
Явное значение устанавливается в переменную static final long serialVersionUID
.
👉@BookJava
Станьте AI-разработчиком на Python и зарабатывайте от 150.000₽ в месяц 🔥🔥🔥
Мы научим вас создавать и тренировать нейронные сети, и вы сможете:
1️⃣ Устроиться разработчиком в крупную компанию и зарабатывать от 150 тыс. ₽ в месяц
2️⃣ Разрабатывать такие проекты на заказ и зарабатывать от 500 тыс. ₽ за проект
3️⃣ Создать нейро-сотрудника в вашей компании и вырасти на +30-100% в зарплате
На интенсиве будет много практики: создадим 9 нейросетей за 1 вечер:
🧬 Прогноз стоимости золота
🧬 Сегментация изображения для робота доставщика
🧬 Трекинг людей на видео
Ведущий интенсива - Senior AI-разработчик и основатель Университета искусственного интеллекта
🔥 Регистрируйтесь на бесплатный интенсив! Встречаемся в ближайшую среду
Подборка Telegram каналов для программистов
Системное администрирование 📌
/channel/devops_star DevOps Star (Звезда Девопса)
/channel/i_linux Системный администратор
/channel/linuxchmod Linux
/channel/sys_adminos Системный Администратор
/channel/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
/channel/sysadminof Книги для админов, полезные материалы
/channel/i_odmin Все для системного администратора
/channel/i_odmin_book Библиотека Системного Администратора
/channel/i_odmin_chat Чат системных администраторов
/channel/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
/channel/sysadminoff Новости Линукс Linux
1C разработка 📌
/channel/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
Программирование C++📌
/channel/cpp_lib Библиотека C/C++ разработчика
/channel/cpp_knigi Книги для программистов C/C++
/channel/cpp_geek Учим C/C++ на примерах
Программирование Python 📌
/channel/pythonofff Python академия. Учи Python быстро и легко🐍
/channel/BookPython Библиотека Python разработчика
/channel/python_real Python подборки на русском и английском
/channel/python_360 Книги по Python Rus
Java разработка 📌
/channel/BookJava Библиотека Java разработчика
/channel/java_360 Книги по Java Rus
/channel/java_geek Учим Java на примерах
GitHub Сообщество 📌
/channel/Githublib Интересное из GitHub
Базы данных (Data Base) 📌
/channel/database_info Все про базы данных
Мобильная разработка: iOS, Android 📌
/channel/developer_mobila Мобильная разработка
/channel/kotlin_lib Подборки полезного материала по Kotlin
Фронтенд разработка 📌
/channel/frontend_1 Подборки для frontend разработчиков
/channel/frontend_sovet Frontend советы, примеры и практика!
/channel/React_lib Подборки по React js и все что с ним связано
Разработка игр 📌
/channel/game_devv Все о разработке игр
Библиотеки 📌
/channel/book_for_dev Книги для программистов Rus
/channel/programmist_of Книги по программированию
/channel/proglb Библиотека программиста
/channel/bfbook Книги для программистов
/channel/books_reserv Книги для программистов
БигДата, машинное обучение 📌
/channel/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning
Программирование 📌
/channel/bookflow Лекции, видеоуроки, доклады с IT конференций
/channel/coddy_academy Полезные советы по программированию
/channel/rust_lib Полезный контент по программированию на Rust
/channel/golang_lib Библиотека Go (Golang) разработчика
/channel/itmozg Программисты, дизайнеры, новости из мира IT
/channel/php_lib Библиотека PHP программиста 👨🏼💻👩💻
/channel/nodejs_lib Подборки по Node js и все что с ним связано
/channel/ruby_lib Библиотека Ruby программиста
QA, тестирование 📌
/channel/testlab_qa Библиотека тестировщика
Шутки программистов 📌
/channel/itumor Шутки программистов
Защита, взлом, безопасность 📌
/channel/thehaking Канал о кибербезопасности
/channel/xakep_1 Статьи из "Хакера"
Книги, статьи для дизайнеров 📌
/channel/ux_web Статьи, книги для дизайнеров
Английский 📌
/channel/UchuEnglish Английский с нуля
Математика 📌
/channel/Pomatematike Канал по математике
/channel/phis_mat Обучающие видео, книги по Физике и Математике
Excel лайфхак📌
/channel/Excel_lifehack
/channel/tikon_1 Новости высоких технологий, науки и техники💡
/channel/mir_teh Мир технологий (Technology World)
Вакансии 📌
/channel/sysadmin_rabota Системный Администратор
/channel/progjob Вакансии в IT
Amplicode Launch Event – конвейер для Spring-приложений прямо в IntelliJ IDEA
На прошлой неделе команда Amplicode провела митап, который длился целых 3,5 часа! За это время состоялось шесть докладов, затрагивающих все аспекты разработки приложений на Spring — от настройки окружения до создания бизнес-логики и внедрения админки на React Admin.
https://habr.com/ru/companies/haulmont/articles/842770/
👉@BookJava
👩💻 Освойте Java-разработку с нуля и станьте востребованным специалистом!
Ждём вас на онлайн-курсе «Специализация Java-разработчик». Только живые вебинары, вы освоите самые востребованные инструменты и лучшие практики.
Ознакомится с курсом можно на бесплатном открытом уроке «Знакомимся с Java на примере пинг-понга».
📌 Урок пройдет 24 сентября в 20:00 мск.
👉 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cAEVwXРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Java Core
Коллекции в Java: List, Set и Map
Коллекции в Java: очередь и стек
Полезные советы по работе с BigDecimal в Java
SequencedCollection и SequencedSet в Java 21
SequencedMap в Java 21
Java 21: Pattern matching в switch
Интерфейсы Iterator и Iterable в Java
Интерфейсы Comparable и Comparator в Java
источник
👉@BookJava
JSpecify 1.0.0 и nullability в Java
Рады сообщить, что JSpecify 1.0.0 теперь доступен в Maven Central: четыре аннотации, связанные с nullability — @Nullable
, @NonNull
, @NullMarked
и @NullUnmarked
— стали официальными, и, что немаловажно, обратная совместимость с ними будет гарантирована.
Проекты и группы, входящие в консенсус, включают:
OpenJDK
EISOP
PMD
Android, Error Prone, Guava (Google)
Kotlin, IntelliJ (JetBrains)
Azure SDK (Microsoft)
Sonar
Spring
https://www.infoq.com/news/2024/08/jspecify-java-nullability/
👉@BookJava
Уже завтра тестовое собеседование на Middle Java-разработчика
Завтра, 11 сентября в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
1. Алексей Ушаровский, старший разработчик в немецкой Deutsche Boerse с опытом работы в Oracle, Сбертех, ePam и NCR будет задавать реальные вопросы и задачи разработчику-добровольцу
2. Алексей будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
3. В конце можно будет задать любой вопрос Алексею
Что узнаешь на прямом эфире от ШОРТКАТ:
- Чего ждут от кандидатов на Middle позиции в Java-разработке
- Какие вопросы задают на интервью и зачем
- Как подготовиться к собесу, чтобы получить оффер
Это бесплатно?
Бесплатно
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2Vtzqvjx4Xh
👩💻 Как правильно использовать области действия переменных в Java и как этот навык поможет вам при подготовке к сертификации?
🔌 Ждем вас на открытом вебинаре 16 сентября в 20:00 мск.
Где мы разберем:
✔️ обзор областей действия переменных;
✔️ практические примеры: как области действия переменных влияют на поведение программы и как их правильно использовать;
✔️ подготовку к сертификации: как знание областей действия переменных может помочь вам при подготовке к экзаменам, таким как OCAJP.
Урок будет полезен для тех, кто хочет изучить Java вглубь, узнать тонкости и хитрости языка, а также для Java-разработчиков, стремящихся структурировать свои знания и лучше подготовиться к собеседованиям.
🎙 Спикер Дмитрий Коган — опытный разработчик, председатель совета предприятия в DXC, публицист, спортивный журналист и блогер.
Встречаемся в преддверии старта курса «Углубленное изучение языка Java».
Все участники вебинара получат специальную цену на обучение!
🎁 Подарок личная консультация с руководителем курса Дмитрием Коганом, всем купившим курс после открытого урока.
➡️ Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cAAQDaРеклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Вопросы с реального собеседования Senior Java Developer
00:00 Приветствие
01:34 Введение
02:23 Разбор вопросов и ответов
03:10 Может ли разработчик управлять памятью в Java?
03:40 Как потоки связаны с памятью?
07:28 Spring Context и зачем он нужен?
08:10 Как работает аннотация @ Transactional?
09:45 Как работает транзакция?
10:30 Как работает TDD?
14:17 Выводы
https://www.youtube.com/watch?v=sMGYAucH9yY
👉@BookJava
Подборка из 10 репозиториев GitHub для изучения Java
1. Awesome Java: https://github.com/akullpp/awesome-java
2. Modern Java - A Guide to Java 8: https://github.com/winterbe/java8-tutorial
3. Java Design Patterns: https://github.com/iluwatar/java-design-patterns
4. Spring Framework: https://github.com/spring-projects/spring-framework
5. Algorithms: https://github.com/TheAlgorithms/Java
6. Spring Boot Tutorial: https://github.com/RameshMF/spring-boot-tutorial
7. Baeldung Java and Spring Tutorials: https://github.com/eugenp/tutorials
8. Google Style Guides: https://github.com/google/styleguide
9. Netflix - Open Source Java Projects: https://github.com/Netflix
10. Ultimate Java Resources: https://github.com/dubesar/Ultimate-Java-Resources
👉@BookJava
Есть ли в Java goto?
Это вопрос с подвохом. Оператор GOTO в общем виде – это оператор безусловного перехода в некоторую точку программы. Даже если вы не сталкивались с ним на практике, можете представить, сколько путаницы может принести возможность прыжка из середины одной функции, в середину другой. В современных высокоуровневых языках существует консенсус о том, что goto – это плохо.
На низком же уровне, от него никуда не деться, и в этом нет ничего плохого. Операция goto
присутствует и в байткоде JVM. Компилятор заботится о её разумном использовании. В неё компилируются циклы, операторы ветвления, обработчики исключений.
Ещё goto
присутствует в Java как зарезервированное слово – то, что скорее всего подсвечивается особым цветом в вашей IDE. Пока оно не используется, но разработчики языка оставляют за собой такое право.
И, наконец, переходы к меткам, о которых мы ранее писали, делают ровно то, что должен делать goto. Но, в отличие от полноценного goto, варианты размещения и применения меток достаточно ограничены, чтобы не дать возможность сломать разумный ход исполнения.
👉@BookJava
Интересные приёмы, взятые из исходников Android
В процессе чтения исходников Android SDK я замечал интересные механики и приёмы написания кода, какие-то из них до сих пор используются при создании новых библиотек, другие, напротив, заменены более логичными и понятными конструкциями. В этой статье я постараюсь перечислить всё, что смог заметить сам при изучении исходников Android'а. Сразу отмечу: эта статья не претендует на полноту материала и возможно вы нашли даже больше интересных моментов при чтении кода, ладно, погнали, короче!
https://habr.com/ru/companies/ruvds/articles/838330/
👉@BookJava
Совет по Java💡
Когда вам нужно использовать какой-то класс и слегка изменить его поведение для своих нужд, всегда стоит проверить документацию. Возможно, уже существует класс в иерархии, который делает то, что вам нужно, или позволяет минимизировать объем кода, который вам придется написать.
👉@BookJava