10986
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP
Если вы пишете бэкенд на Java и хотите работать на уровне серьёзных проектов, тестирование в Spring — навык, без которого сейчас никуда.
На открытом уроке «Тестирование Spring-приложений. Интеграционные тесты с контекстом» вы разберётесь, как правильно тестировать репозитории (JDBC и JPA) и сервисы с учётом транзакций. Это ключ к тому, чтобы ваш код был не только рабочим, но и надёжным в реальных продакшн-системах.
Вы получите пошаговый разбор особенностей интеграционного тестирования и научитесь писать простые тесты для репозиториев и сервисов. Эти знания напрямую повысят вашу ценность на рынке как Java-разработчика.
Урок проходит в преддверие старта курса «Разработчик на Spring Framework», все участники получат скидку на обучение: https://vk.cc/cP0uOe
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Spring Boot 4 и Spring Framework 7: Ключевые фичи и изменения
Уже в ноябре 2025 выходит Spring Boot 4 — масштабный релиз, построенный на фундаменте Spring Framework 7.0.0 и Jakarta EE 11. Это не просто очередное обновление, а важный этап в развитии всей Java-платформы: новые возможности для REST и безопасности, улучшенная работа с Kotlin и GraalVM, мощная поддержка облаков и нативных образов, а также инструменты для создания отказоустойчивых приложений.
https://loiane.com/2025/08/spring-boot-4-spring-framework-7-key-features/
👉@BookJava
Сравнение через equals() и ==
▪️ "==" используется для сравнения примитивных типов данных (например, int, char, boolean), проверяя, равны ли их значения. Однако, когда речь идет об объектах, "==" сравнивает их ссылки, то есть проверяет, указывают ли обе переменные на один и тот же объект в памяти.
▪️ Метод equals(), в свою очередь, предназначен для сравнения содержимого объектов. Это значит, что equals() проверяет, эквивалентны ли сами данные, хранящиеся в двух объектах, а не то, ссылаются ли они на одно и то же место в памяти.
Используйте == для сравнения примитивов и ссылок на объекты, когда вам важно знать, являются ли они одной и той же сущностью. Для сравнения содержимого объектов всегда применяйте equals().
👉@BookJava
💡Big Data — это не только модный термин, а фундамент современной аналитики и AI. Apache Spark — инструмент, который используют крупнейшие компании по всему миру. Хотите понять, как он работает, и применить его в своей практике?
28 августа в 18:00 мы проведем открытый вебинар «Практическое введение в Apache Spark». За 1,5 часа вы узнаете, зачем нужен Spark, как разворачивать тестовую среду в Docker, работать с DataFrame API и Spark SQL, оптимизировать запросы и избегать типичных ошибок.
Вместе разберем реальный кейс на небольшом датасете и вы увидите, что обработка больших данных может быть быстрой и удобной.
➡️ Открытый урок проходит в преддверии старта курса «Spark Developer», все участники получат скидку на обучение. Регистрируйтесь прямо сейчас: https://vk.cc/cOWWa2
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
«Apache Kafka» от OTUS — это повышение квалификации для тех, кто хочет обрабатывать потоки данных быстро и без сбоев.
Живые лекции от инженеров-практиков, актуальные технологии Kafka Streams, Spring, ZIO и ksqlDB, много практики и востребованный диплом.
Вы научитесь разворачивать Kafka, интегрировать технологии с другими сервисами и строить систему мониторинга.
Проверьте, готовы ли вы к погружению в мир Kafka. Пройдите короткий вступительный тест и получите скидку на обучение: https://vk.cc/cOUhq7
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Совет💡
Будьте осторожны при использовании @AllArgsConstructor от Lombok. Для генерации конструктора он использует порядок полей в классе. Если поля имеют одинаковый тип и вы переставите их местами, то начнете писать в разные поля, и компилятор не сможет помочь.
👉@BookJava
Совет по Java💡show-sql - это самый простой (но не самый лучший!) способ увидеть SQL, сгенерированный Hibernate. Вы можете немного улучшить его, включив форматирование, показ JPQL-запроса, сгенерировавшего запрос, и включив подсветку, которая добавляет некоторый цвет к выводу.
👉@BookJava
REST или GraphQL? Этот выбор может определить, насколько удобным, быстрым и масштабируемым будет ваш API.
26 августа в 20:00 на открытом уроке мы разберём, когда стоит выбрать REST, а когда — GraphQL, а также реализуем оба подхода в Spring Boot. Эксперт покажет критерии выбора, разберёт практические кейсы и типичные ошибки.
Backend-разработчики на Java/Kotlin и тимлиды узнают, как применять эти технологии на практике, чтобы их проекты работали быстрее, были проще в сопровождении и готовыми к росту.
Вебинар проходит в преддверие старта курса «Разработчик на Spring Framework».
Регистрируйтесь сейчас и получите скидку на обучение: https://vk.cc/cOMqtr
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Где у Java приложения точка входа?
В обычном Java приложении всегда должен быть main class, содержащий метод main. С него начинается исполнение всей программы. Main class-ом может быть не только класс, но и интерфейс или енам. Для JavaFX приложения главный класс должен реализовывать javafx.application.Application.
main обязательно public static. Дополнительно, методу разрешено иметь модификатор strictfp. На аннотации и список исключений ограничений не накладывается.
В главном методе должен быть объявлен единственный аргумент – массив строк. Обе конструкции String[] и String... компилируются в один и тот же байт-код, так что приемлемы оба варианта. Название массива может быть любым, а значение будет содержать аргументы командной строки.
Когда приложение запускается как classpath, главный класс передается параметром командной строки. Если выполняется единственный исходник, он и описывает main class.
Для исполняемого jar-файла (java -jar MyJar.jar), его главный класс должен быть указан в манифесте. Внутри архива, в файл META-INF/MANIFEST.MF добавляется строчка вида Main-Class: ru.google.com.MyClass. Иначе запуск завершается ошибкой «no main manifest attribute».
В случае, когда в указанном главном классе не оказывается метода, который бы удовлетворял всем критериям главного метода, программа падает с ошибкой «Main method not found».
В апплетах вместо main входной точкой служат методы init и start. Начиная с версии Java 9 технология апплетов объявлена устаревшей, а с 11 – совсем удалена. Не будем останавливаться на них подробнее.
👉@BookJava
Java. Проблема с null. Null safety
В этом видео я рассказываю о проблеме с null в языке программирования Java, из-за которой возникает печально известное NullPointerExeption. Даю некоторые рекомендации по организации кода для борьбы с этой проблемой и повышения надежности работы программ.
источник
👉@BookJava
👩💻 Открытый урок «Лучшие практики Kafka и Schema Registry в backend-разработке на Java».
Kafka уже стала стандартом для высоконагруженных систем, а Schema Registry — ключом к надёжной работе с данными.
Хотите уверенно интегрировать их в свои Java-проекты?
Приглашаем на открытый урок
🗓 26 августа в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Java Developer. Professional».
🎯 О чём поговорим:
✔️ Разработка Kafka-продюсеров и консьюмеров на Java: шаблоны и анти-паттерны.
✔️ Работа со схемами данных: Avro, JSON-schema и интеграция со Schema Registry.
✔️ Управление версиями схем: совместимость, миграции и депрецирование.
✔️ Производительность и отказоустойчивость: настройки партиционирования, ретеншна и репликации.
✔️ Безопасность и мониторинг: аутентификация, авторизация и метрики Kafka.
👥 Кому будет интересно:
Java-разработчикам и архитектам, работающим с распределёнными системами, а также DevOps-инженерам, внедряющим Kafka в продакшен.
💡В результате урока вы:
— Освоите ключевые подходы к созданию надёжных Kafka-приложений на Java.
— Научитесь эффективно управлять схемами данных в Schema Registry и оптимизировать производительность ваших систем.
🎁 Дарим промокод, который дает скидку на обучение - JAVA_09
🔗 Ссылка на регистрацию: https://vk.cc/cOK2dx
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🔍 Завтра тестовое собеседование с Java-разработчиком
20 августа (уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
📂 Сергей Чамкин, старший разработчик из Uzum, ex-WildBerries, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Cергей будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Сергею
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама.
О рекламодателе.
Sealed Classes.
Sealed Classes — контроль наследования в Java 🔒
Одна из самых недооценённых фич Java 17 — sealed классы.
Если коротко: теперь ты можешь жёстко контролировать, кто именно может наследоваться от твоего класса.
До Java 17 🤯
Представь, у тебя есть базовый класс:
abstract class Shape {}
Circle, Rectangle, Triangle, StarShape, ShapeFromLegacyLib...
public sealed abstract class Shape
permits Circle, Rectangle, Triangle {}
Shape.final — дальше наследовать нельзя.
public final class Circle extends Shape {}
sealed — продолжаем ограничивать список наследников.
public sealed class Rectangle extends Shape
permits Square {}
non-sealed — снимаем ограничения, и от этого класса можно наследоваться свободно.
public non-sealed class Triangle extends Shape {}
switch с pattern matching: компилятор проверяет, что ты обработал все варианты.switch 💡
static String print(Shape shape) {
return switch (shape) {
case Circle c -> "Круг";
case Rectangle r -> "Прямоугольник";
case Triangle t -> "Треугольник";
};
}
Pattern Matching в switch.
Pattern Matching в switch — убийца if-else цепочек ⚔️
Ты наверняка видел такие простыни:
if (obj instanceof String) {
System.out.println("Строка длиной " + ((String) obj).length());
} else if (obj instanceof Integer) {
System.out.println("Целое число " + obj);
} else if (obj instanceof List) {
System.out.println("Список размером " + ((List<?>) obj).size());
} else {
System.out.println("Неизвестный тип");
}
switch:
switch (obj) {
case String s -> System.out.println("Строка длиной " + s.length());
case Integer i -> System.out.println("Целое число " + i);
case List<?> l -> System.out.println("Список размером " + l.size());
default -> System.out.println("Неизвестный тип");
}
else if простыней
switch (obj) {
case String s when s.length() > 5 ->
System.out.println("Длинная строка");
case String s ->
System.out.println("Короткая строка");
default ->
System.out.println("Что-то другое");
}
when — это guard condition.if-else, ручные касты.switch, никакой боли.switch с pattern matching, когда у тебя много разных подтипов или вход может быть разным типом.
⚙️ Микросервисы начинают тормозить под нагрузкой?
💡 Узнайте, как масштабировать и оптимизировать систему с помощью CQRS и Event Sourcing на .NET Aspire.
На открытом вебинаре «Оптимизация микросервисов с CQRS и Event Sourcing на .NET Aspire» 19 августа в 20:00 МСК разберем:
◽️ Ограничения классических микросервисов при высокой нагрузке.
◽️ Принципы разделения команд и запросов (CQRS) и хранения истории через Event Sourcing.
◽️ Практическую реализацию: сервис заказов с «команда-обработчик» и хранением событий в MongoDB.
◽️ Конфигурацию проекций для чтения данных.
❗️ Вы освоите оркестрацию через .NET Aspire (API Gateway, Order Service, база событий), внедрите логирование и трейсинг через OpenTelemetry, а также протестируете создание заказа, обновление статуса и визуализацию потока событий.
➡️ Посетите открытый урок и получите скидку на большое обучение «C# ASP.NET Core разработчик»: https://vk.cc/cOz6s4
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
«За пределами REST: использование full-stack сигналов для реактивных интерфейсов в реальном времени» — Лейф Острэнд @ Spring I/O 2025
Современному веб-приложению нужно больше, чем просто запрашивать JSON с сервера и отправлять обратно значения форм в виде JSON. Пользователи ожидают не просто ещё один CRUD-интерфейс на REST. Они ждут обновлений в реальном времени, офлайн-синхронизации и бесшовного опыта на разных устройствах. Достичь этого, опираясь только на низкоуровневые соглашения вроде REST и WebSockets, требует огромных усилий.
Многие UI-фреймворки внедрили концепцию «сигналов», чтобы упростить обновление разных частей интерфейса при изменении состояния. Тот же подход можно применить и через сеть как full-stack-решение — для простого обновления интерфейсов сразу у нескольких пользователей, работающих с общим состоянием.
В этом практическом докладе будет показано, как использовать концепцию full-stack-сигналов для простой синхронизации данных приложения между пользователями на всём уровне стека — от UI до базы данных. Вы узнаете, как создавать приложения, которые по-настоящему радуют ваших пользователей.
источник
👉@BookJava
👩💻 Разработка на Java требует глубокого понимания не только языка, но и принципов работы JVM, многопоточности и современных фреймворков.
🎯 Курс «Java Developer. Professional» — это структурированное обучение для разработчиков, которые хотят выйти на новый уровень, освоить актуальный стек технологий и уверенно претендовать на позиции уровня Middle+.
Вы получите 96 часов практической работы, на живых вебинарах разберете ключевые аспекты работы JVM, научитесь строить эффективные многопоточные приложения, освоите Spring WebFlux, Kafka, реактивный Postgres и Kubernetes.
📚Программа OTUS постоянно обновляется, соответствуя требованиям рынка, а диплом ценится работодателями.
🎁 Дарим промокод, который дает скидку на обучение - JAVA_09
➡️ Пройдите вступительное тестирование и присоединяйтесь к группе: https://vk.cc/cOY43c
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
И опыт, сын ошибок трудных: обрабатываем ошибки в Spring Boot
Долгое время разрабатывая микросервисы в разных командах, я сталкивался с типовой задачей: созданием максимально информативного ответа на запрос, когда произошла какая-то ошибка. Особенно это актуально для систем с пользовательским фронтендом, большим количеством интеграций или систем, которые представляют свой API как продукт. Во многих случаях это решалось выдачей сообщения «Ошибка системы» с HTTP-кодом 500. Из раза в раз меня не покидало ощущение, что решению этой задачи не уделяется должного внимания и времени. В текущем проекте нам пришлось пройти все круги ада, изменить несколько подходов и реализаций. И здесь я постарался описать, как это было, и сформулировать выводы, которые мы сделали на каждом шаге решения проблемы.
https://habr.com/ru/companies/T1Holding/articles/834288/
👉@BookJava
Spring Boot Tutorial | Полный курс
В этом учебном пособии по Spring Boot рассказывается о том, как начать работу с Spring Boot и Java.
00:00 Intro
01:00 Quick Word
02:12 Spring Boot Overview
03:44 Project Overview
04:28 Spring Initializr
08:05 IntelliJ
10:29 Starting The Server
14:03 Simple API with Spring Boot
18:06 Student Class
23:19 API Layer
26:38 Business Layer
29:08 Dependency Injection
32:47 Properties file
36:15 Creating and Connecting to Database
39:48 JPA and @ Entity
42:35 JPA in Action
45:52 Amigoscode Database Courses
47:35 JPA Repository
52:20 Saving Students
58:49 @ Transient
01:03:01 Post Mapping
01:08:00 Writing Business Logic
01:12:43 Testing Post Request
01:15:35 Deleting Students
01:21:33 Exercise
01:22:53 Solution
01:26:54 Testing
01:29:41 Packaging and Running Application
01:34:52 Next steps
источник
👉@BookJava
Java. Быстрая сортировка. Реализация алгоритма QuickSort.
Как работает быстрая сортировка, разбор и реализация алгоритма.
источник
👉@BookJava
🙌🏼 Привет, на связи команда MWS Cloud Platform!
Приезжаем в Казань и будем рады вас видеть на нашем митапе о Java/Kotlin 30 сентября в пространстве MEDIAPORT. Соберёмся обсудить подходы, которые мы используем при строительстве облака, а ещё привезём с собой жаркую дискуссию о будущем Java и Go в энтерпрайзе.
⚡️Мероприятие бесплатное, но количество мест ограничено, поэтому регистрация обязательна.
📋Что в программе:
— Интеграция IAM и Compute в MWS Cloud Platform
— Облачный сетевой балансировщик нагрузки своими руками
— Java vs Go: будущее энтерпрайза под вопросом
⚡️После докладов будем знакомиться и общаться в неформальной обстановке с закусками и напитками. Приходите узнать новое, увидеться с коллегами и техническим сообществом Казани!
До встречи на митапе,
команда MWS Cloud Platform
Подборка из 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
Что такое «лямбда»? Какова структура и особенности использования лямбда-выражения?
Лямбда представляет собой набор инструкций, которые можно выделить в отдельную переменную и затем многократно вызвать в различных местах программы.
Основу лямбда-выражения составляет лямбда-оператор, который представляет стрелку ->. Этот оператор разделяет лямбда-выражение на две части: левая часть содержит список параметров выражения, а правая собственно представляет тело лямбда-выражения, где выполняются все действия.
Лямбда-выражение не выполняется само по себе, а образует реализацию метода, определенного в функциональном интерфейсе. При этом важно, что функциональный интерфейс должен содержать только один единственный метод без реализации.interface Operationable {
int calculate(int x, int y);
}
public static void main(String[] args) {
Operationable operation = (x, y) -> x + y;
int result = operation.calculate(10, 20);
System.out.println(result); //30
}
По факту лямбда-выражения являются в некотором роде сокращенной формой внутренних анонимных классов, которые ранее применялись в Java.
Отложенное выполнение (deferred execution) лямбда-выражения- определяется один раз в одном месте программы, вызываются при необходимости, любое количество раз и в произвольном месте программы.
Параметры лямбда-выражения должны соответствовать по типу параметрам метода функционального интерфейса:operation = (int x, int y) -> x + y;
//При написании самого лямбда-выражения тип параметров разрешается не указывать:
(x, y) -> x + y;
//Если метод не принимает никаких параметров, то пишутся пустые скобки, например:
() -> 30 + 20;
//Если метод принимает только один параметр, то скобки можно опустить:
n -> n * n;
Конечные лямбда-выражения не обязаны возвращать какое-либо значение.interface Printable {
void print(String s);
}
public static void main(String[] args) {
Printable printer = s -> System.out.println(s);
printer.print("Hello, world");
}
Блочные лямбда-выражения обрамляются фигурными скобками. В блочных лямбда-выражениях можно использовать внутренние вложенные блоки, циклы, конструкции if, switch, создавать переменные и т.д. Если блочное лямбда-выражение должно возвращать значение, то явным образом применяется оператор return:Operationable operation = (int x, int y) -> {
if (y == 0) {
return 0;
}
else {
return x / y;
}
};
Передача лямбда-выражения в качестве параметра метода:interface Condition {
boolean isAppropriate(int n);
}
private static int sum(int[] numbers, Condition condition) {
int result = 0;
for (int i : numbers) {
if (condition.isAppropriate(i)) {
result += i;
}
}
return result;
}
public static void main(String[] args) {
System.out.println(sum(new int[] {0, 1, 0, 3, 0, 5, 0, 7, 0, 9}, (n) -> n != 0));
}
👉@BookJava
🏗 Курс “Software Architect” от OTUS — старт набора в группу обучения
Если хотите проектировать отказоустойчивые и масштабируемые системы — этот курс для вас!
Почему стоит пойти:
• 100% практики на реальных проектах
• Проектирование гибких архитектур
• Микросервисы, интеграции, Big Data
• Современные паттерны: CQRS, Event Sourcing и др.
💡 Кому подойдёт:
• Разработчикам, готовым выйти на новый уровень
• Архитекторам, углубляющим экспертизу
• Тимлидам и менеджерам
✅После курса вы сможете:
• Проектировать масштабируемые архитектуры
• Оптимизировать взаимодействие сервисов
• Повышать качество и устойчивость систем
👉 Пройдите вступительное тестирование: https://vk.cc/cOLiuq
Совет по Java💡
При использовании Projections и QueryDSL, вместо того чтобы использовать Projections.constructor(Class type, Expression ...), можно добиться большей типобезопасности, применяя аннотации @QueryProjection и @QueryEntity. Таким образом, для вашей проекции будет сгенерирован типобезопасный QClass.
👉@BookJava
Как выполнять итерацию по коллекции в Java?
Коллекция в Java — это объект, который группирует несколько элементов в единое целое и является частью Java Collections Framework. Она часто используется для хранения, извлечения, обработки и передачи агрегированных данных.
Чтобы пройтись по коллекции, можно использовать цикл for-each, итератор или традиционный цикл for. Пример ниже показывает использование for-each и обычного цикла for:
// Example using for-each loop:
List<String> fruits = Arrays.asList("Apple", "Banana", "Orange");
for (String fruit : fruits) {
System.out.println(fruit);
}
// Example using regular for loop:
for (int i = 0; i < fruits.size(); i++) {
System.out.println(fruits.get(i));
}
Парсинг на Java. От основ до парсинга Яндекс Карт
Сегодня я рассмотрю основы парсинга на Java, используя как пример Яндекс Карты.
В этой статье мы рассмотрим, что такое HTTP и какие бывают методы запроса, как работать с HttpClient в Java 11+, как отправлять GET и POST-запросы, как обрабатывать HTTP-ответы и извлекать данные, и как всё это можно использовать для парсинга данных с внешнего сервера на примере Яндекс Карт.
https://habr.com/ru/companies/amvera/articles/937894/
👉 @BookJava
🔧 Сложности с масштабированием консьюмеров в RabbitMQ? Узнайте, как избежать ошибок, которые могут привести к потерям в порядке обработки сообщений.
📅 На открытом уроке 21 августа в 20:00 МСК разберём реальные кейсы и покажем, как правильно масштабировать консьюмеры, сохраняя порядок обработки. Узнаете, какие проблемы могут возникнуть при некорректном масштабировании и как их решить.
🎯 Получите ценные знания по прогнозированию и устранению проблем, повысите производительность системы и избегайте критических ошибок.
🚀 Зарегистрируйтесь на вебинар и получите в подарок записи трёх уроков по «Symfony», а также скидку на полный курс «Symfony Framework». Подарки доступны всем участникам! Регистрация по ссылке:
https://vk.cc/cOFmfT
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Когда лучше использовать record, а когда class в Java.
Record vs Class в Java ☕️📦
С 2021-го в Java появилась новая зверушка - record.
Сначала все радовались: "О, меньше кода, equals/hashCode/constructor сами пишутся!" 🎉
А потом пошли странные вопросы в код-ревью:
"А почему у тебя тут record, а не class?"
"record же immutable, а ты тут мутируешь поле через рефлексию, ты что…"
record в Java — это особый вид final-класса с:equals, hashCode и toString из коробки.private final для каждого компонента.record - лучший выбор ✅
public record UserDto(String name, int age) {}
equals и hashCode генерятся честно и по всем полям - отличная стабильная ключевая структура.class лучше 🚫record тебе мешает: поля final, сеттеров нет.final. Забудь про расширение.record они просто не подружатся (даже если будут пытаться через магию).record будет ломаться при парсинге, потому что конструктор фиксирован.
public record Point(int x, int y) {
public double length() {
return Math.sqrt(x*x + y*y);
}
}
record).record - это не замена class, а инструмент для конкретных задач.
В чем разница между перегрузкой метода и переопределением метода в Java?
🧠 Перегрузка метода (Method Overloading)
Это когда в одном классе есть методы с одинаковым именем, но разными сигнатурами (количеством или типами параметров).
* Компилятор выбирает метод на этапе compile-time.
* Можно менять:
* количество параметров
* тип параметров
* порядок параметров
* Нельзя перегружать метод, меняя только возвращаемый тип.
💡 Пример:
public class MathUtil {
public int sum(int a, int b) { return a + b; }
public double sum(double a, double b) { return a + b; }
public int sum(int a, int b, int c) { return a + b + c; }
}
public / protected (не private).@Override.
class Animal {
public void makeSound() {
System.out.println("Some sound");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Woof!");
}
}