Тюнинг: параметры брокеров (num.partitions, min.insync.replicas, log.retention.hours), GC tuning для Java 21
Тюнинг оптимизирует под нагрузку.
- Параметры брокеров:
- num.partitions: Количество разделов по умолчанию для новых топиков (default 1). Больше — выше parallelism, но overhead на метаданные (каждый раздел — ~1 МБ RAM на брокере).
- min.insync.replicas: Минимальное количество синхронизированных реплик для acks=all (default 1). Установите 2 для durability, но снижает availability при сбоях.
- log.retention.hours: Время хранения логов (default 168 часов). Баланс: дольше — больше диск, короче — риск потери для replay.
- GC tuning для Java 21: Kafka работает на JVM, GC (сборка мусора) влияет на latency. Используйте Shenandoah или ZGC для low-pause (sub-ms).
Параметры: -XX:+UseZGC -XX:ZCollectionInterval=10 (интервал 10 сек), -XX:MaxGCPauseMillis=5.
В памяти: ZGC использует colored pointers для concurrent marking, снижая паузы. Нюанс: для heap >64GB добавьте -XX:+ZGenerational для generational mode. Тестируйте с GC logs (-Xlog:gc*).
Компромиссы: агрессивный тюнинг снижает latency, но требует benchmark (k6 или Kafka's perf tools).
Восстановление после катастроф: MirrorMaker 2, репликация между регионами
Disaster recovery обеспечивает continuity.
- MirrorMaker 2 (MM2): Инструмент для зеркалирования тем между кластерами (active-passive или active-active). Работает как consumer-producer: читает из source, пишет в target. Поддерживает offset translation, topic renaming. В памяти: MM2 использует Connect framework, с tasks для parallelism.
- Репликация между регионами: Настройте MM2 с remote clusters, используя topics like mm2-offset-syncs для синхронизации offset'ов. Для cross-DC: настройте replication.factor>1, с geo-aware rack.aware.mode. Нюанс: latency добавляет 100-500 мс, мониторьте replication lag.
Стратегия: регулярные drills, с failover скриптами (изменение bootstrap.servers в клиентах).
Пример конфигурации безопасности (ZooKeeper и KRaft)
Вот пример конфигурации брокера для SASL_SSL с SCRAM (работает как с ZooKeeper, так и KRaft):
В production: генерируйте сертификаты с CA (Let's Encrypt или self-signed), храните секреты в Vault.
#Java #middle #Kafka #Kafka_securiy
Тюнинг оптимизирует под нагрузку.
- Параметры брокеров:
- num.partitions: Количество разделов по умолчанию для новых топиков (default 1). Больше — выше parallelism, но overhead на метаданные (каждый раздел — ~1 МБ RAM на брокере).
- min.insync.replicas: Минимальное количество синхронизированных реплик для acks=all (default 1). Установите 2 для durability, но снижает availability при сбоях.
- log.retention.hours: Время хранения логов (default 168 часов). Баланс: дольше — больше диск, короче — риск потери для replay.
- GC tuning для Java 21: Kafka работает на JVM, GC (сборка мусора) влияет на latency. Используйте Shenandoah или ZGC для low-pause (sub-ms).
Параметры: -XX:+UseZGC -XX:ZCollectionInterval=10 (интервал 10 сек), -XX:MaxGCPauseMillis=5.
В памяти: ZGC использует colored pointers для concurrent marking, снижая паузы. Нюанс: для heap >64GB добавьте -XX:+ZGenerational для generational mode. Тестируйте с GC logs (-Xlog:gc*).
Компромиссы: агрессивный тюнинг снижает latency, но требует benchmark (k6 или Kafka's perf tools).
Восстановление после катастроф: MirrorMaker 2, репликация между регионами
Disaster recovery обеспечивает continuity.
- MirrorMaker 2 (MM2): Инструмент для зеркалирования тем между кластерами (active-passive или active-active). Работает как consumer-producer: читает из source, пишет в target. Поддерживает offset translation, topic renaming. В памяти: MM2 использует Connect framework, с tasks для parallelism.
- Репликация между регионами: Настройте MM2 с remote clusters, используя topics like mm2-offset-syncs для синхронизации offset'ов. Для cross-DC: настройте replication.factor>1, с geo-aware rack.aware.mode. Нюанс: latency добавляет 100-500 мс, мониторьте replication lag.
Стратегия: регулярные drills, с failover скриптами (изменение bootstrap.servers в клиентах).
Пример конфигурации безопасности (ZooKeeper и KRaft)
Вот пример конфигурации брокера для SASL_SSL с SCRAM (работает как с ZooKeeper, так и KRaft):
# Прослушиватели
listeners=SASL_SSL://:9092
advertised.listeners=SASL_SSL://broker-host:9092
# SSL настройки
ssl.keystore.location=/etc/kafka/secrets/kafka.keystore.jks
ssl.keystore.password=keystore-pass
ssl.truststore.location=/etc/kafka/secrets/kafka.truststore.jks
ssl.truststore.password=truststore-pass
ssl.client.auth=required # Требовать клиентские сертификаты
# SASL
sasl.enabled.mechanisms=SCRAM-SHA-512
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
# Для KRaft добавьте:
process.roles=broker,controller
controller.listener.names=CONTROLLER
listener.security.protocol.map=CONTROLLER:PLAINTEXT,SASL_SSL:SASL_SSL
# ACL
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
super.users=User:admin
allow.everyone.if.no.acl.found=false
В production: генерируйте сертификаты с CA (Let's Encrypt или self-signed), храните секреты в Vault.
#Java #middle #Kafka #Kafka_securiy
👍1
Нюансы
- Планирование ёмкости по количеству разделов: Разделы — единица parallelism, но лимит ~4K на брокер (из-за открытых файлов, RAM ~10 КБ на раздел). Планируйте: throughput / partition-throughput (например, 10 МБ/с на раздел). Для 100K TPS — 100 разделов. Нюанс: слишком много (>1M в кластере) замедляет контроллер (leader election до минут); используйте формулу: num_partitions = (desired_throughput / partition_throughput) * replication_factor.
- Оповещения по недореплицированным разделам: Метрика kafka.server:ReplicaManager:UnderReplicatedPartitions >0 сигнализирует о проблемах (сбой фолловера). Alerting в Prometheus: alert если >0 >5 мин, с playbook (проверить network, restart брокер). Нюанс: chronic under-replication приводит к data loss при unclean election.
- Типичные антипаттерны:
- Слишком много разделов: Приводит к overhead (метаданные, ZK load в старых версиях). Решение: consolidate темы, используйте compaction.
- Unclean election (unclean.leader.election.enable=true): Позволяет non-ISR лидеру, рискуя потерей данных. Держите false, жертвуйте availability.
- Отключенный мониторинг: Без alerting на lag или CPU>80% сбои незаметны. Всегда интегрируйте с ELK/Prometheus, с on-call ротацией.
#Java #middle #Kafka #Kafka_securiy
- Планирование ёмкости по количеству разделов: Разделы — единица parallelism, но лимит ~4K на брокер (из-за открытых файлов, RAM ~10 КБ на раздел). Планируйте: throughput / partition-throughput (например, 10 МБ/с на раздел). Для 100K TPS — 100 разделов. Нюанс: слишком много (>1M в кластере) замедляет контроллер (leader election до минут); используйте формулу: num_partitions = (desired_throughput / partition_throughput) * replication_factor.
- Оповещения по недореплицированным разделам: Метрика kafka.server:ReplicaManager:UnderReplicatedPartitions >0 сигнализирует о проблемах (сбой фолловера). Alerting в Prometheus: alert если >0 >5 мин, с playbook (проверить network, restart брокер). Нюанс: chronic under-replication приводит к data loss при unclean election.
- Типичные антипаттерны:
- Слишком много разделов: Приводит к overhead (метаданные, ZK load в старых версиях). Решение: consolidate темы, используйте compaction.
- Unclean election (unclean.leader.election.enable=true): Позволяет non-ISR лидеру, рискуя потерей данных. Держите false, жертвуйте availability.
- Отключенный мониторинг: Без alerting на lag или CPU>80% сбои незаметны. Всегда интегрируйте с ELK/Prometheus, с on-call ротацией.
#Java #middle #Kafka #Kafka_securiy
👍3
Сколько стоит Ваша компьютерная система в целом?
Anonymous Poll
0%
Больше 300 тыщ ☺️
20%
От 100 до 300 тыщ 🙂
17%
У меня дорогой ноутбук 🫰
60%
Менее 100 тысяч🤫
3%
Я работаю с телефона, у меня нет компа 😄
👍1
Что выведет код?
#Tasks
class Parent220825 {
private int value = 10;
}
class Child220825 extends Parent220825 {
public void printValue(Parent220825 p) {
System.out.println(p.value);
}
}
public class Task220825 {
public static void main(String[] args) {
new Child220825().printValue(new Parent220825());
}
}
#Tasks
👍2
👍2
Что такое ZonedDateTime в Java? 🤓
Ответ:
ZonedDateTime (Java 8) представляет дату и время с учетом часового пояса.
Пример:
ZonedDateTime zdt = ZonedDateTime.now (ZoneId.of("Europe/Paris"));
System.out.println(zdt); // 2025-08-04T04:57+02:00[Europe/Paris]
Используется для работы с международными приложениями.
#собеседование
Ответ:
Пример:
ZonedDateTime zdt =
System.out.println(zdt); // 2025-08-04T04:57+02:00[Europe/Paris]
Используется для работы с международными приложениями.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Константи́н Серге́евич Новосёлов (англ. Konstantin Sergeevich Novoselov; род. 23 августа 1974, Нижний Тагил, СССР) — российский и британский физик. Лауреат Нобелевской премии по физике 2010 года (совместно с Андреем Геймом), член Лондонского королевского общества (2011), иностранный член Национальной академии наук США (2019).
Георгий Павлович Лопато (23 августа 1924 — 13 февраля 2003) — советский инженер-компьютерщик, один из создателей серии ЭВМ «Минск».
Сигаев, Фёдор Геннадьевич (23 августа 1973 г.) — российский программист, сооснователь и технический директор компании Постгресс Профессиональный (Postgres Pro), ведущий разработчик (Major Contributor) и коммитер СУБД PostgreSQL, один из крупнейших мировых экспертов по этой СУБД.
Эдгар Франк «Тед» Кодд (англ. Edgar Frank Codd; 23 августа 1923 — 18 апреля 2003) — британский учёный, работы которого заложили основы теории реляционных баз данных. Работая в компании IBM, он создал реляционную модель данных. Он также внёс существенный вклад в другие области информатики.
1955 — первый полёт первого конвертоплана с поворотным ротором — «Белл XV-3».
1966 — аппарат Lunar Orbiter 1 сделал первую в истории фотографию Земли с Луны. Эталонное событие в истории ДЗЗ и лунной разведки площадок для «Сервеера» и «Аполлона».
1991 — Всемирная паутина стала общедоступной: британский ученый Тим Бернерс-Ли открыл доступ к первому в мире веб-серверу, расположенному в ЦЕРН, что ознаменовало начало доступности Всемирной паутины (World Wide Web) для широкой публики.
2023 — Chandrayaan-3 совершил посадку у южного полюса Луны — первая успешная посадка Индии и первая близ южнополярной области.
#Biography #Birth_Date #Events #23Августа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
С 16.08 по 22.08
Предыдущий пост(с 09.08 по 15.08)
Воскресный мотивационный пост:
Если твой баг стоит миллионы: кто виноват и кто заплатит?
Выбранная голосованием тема:
не было
Запись встреч/видео:
Тестирование в Spring
3. Модульные тесты через TDD в Spring. Тестирование Spring Security и Spring Cash.
Обучающие статьи:
Apache Kafka Consumer — группы, оффсеты, ребалансинг
Apache Kafka Схемы, сериализация и эволюция контрактов
Apache Kafka Безопасность, мониторинг и эксплуатация
Классы и объекты Конструкторы. Перегрузка. Ключевое слово this
Инкапсуляция Принцип инкапсуляции: скрытие внутреннего состояния
Полезные статьи и видео:
Безопасность приложений: инструменты и практики для Java-разработчиков
Технический разбор Max: что внутри APK
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
#memory
Предыдущий пост(с 09.08 по 15.08)
Воскресный мотивационный пост:
Если твой баг стоит миллионы: кто виноват и кто заплатит?
Выбранная голосованием тема:
не было
Запись встреч/видео:
Тестирование в Spring
3. Модульные тесты через TDD в Spring. Тестирование Spring Security и Spring Cash.
Обучающие статьи:
Apache Kafka Consumer — группы, оффсеты, ребалансинг
Apache Kafka Схемы, сериализация и эволюция контрактов
Apache Kafka Безопасность, мониторинг и эксплуатация
Классы и объекты Конструкторы. Перегрузка. Ключевое слово this
Инкапсуляция Принцип инкапсуляции: скрытие внутреннего состояния
Полезные статьи и видео:
Безопасность приложений: инструменты и практики для Java-разработчиков
Технический разбор Max: что внутри APK
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
#memory
🔥2
Предлагаем темы для разбора и публикации! 📖
В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.
Голосование будет проводиться всю неделю, а статья или видео - выходить по выходным.
Примерные правила:
🟢 темы, не выше уровня middle, чтоб был интерес общим.
🟢 Один человек - одна тема.
🟢 Тема должна быть отдельным теоретически-практическим вопросом. Готовый проект - это не тема!
Жду Ваших предложений!👏
В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.
Голосование будет проводиться всю неделю, а статья или видео - выходить по выходным.
Примерные правила:
Жду Ваших предложений!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Выбираем темы для рассмотрения в следующие выходные! 🤨
Anonymous Poll
30%
AOP
37%
NoSQL BD, вводная информация
30%
REST рекомендации
3%
Phaser
👍4
Forwarded from ChatRoom (Java for Beginner) (Первожрец Java)
«МТС Линк»;
«Контур Толк»;
SaluteJazz;
VK Звонки;
Saby Meet;
CallBridge;
FreeConference;
Jisti Meet.
вот аналоги для встреч, кто что советует?
«Контур Толк»;
SaluteJazz;
VK Звонки;
Saby Meet;
CallBridge;
FreeConference;
Jisti Meet.
вот аналоги для встреч, кто что советует?
Ви́ктор Миха́йлович Глушко́в (24 августа 1923, Ростов-на-Дону, РСФСР, СССР — 30 января 1982, Москва, СССР) — советский математик, кибернетик. Основоположник советской кибернетики; проекты ОГАС и теоретические основы ИТ. Автор трудов по алгебре, кибернетике и вычислительной технике. Под его руководством в 1966 году была разработана первая в СССР персональная ЭВМ «МИР-1».
Хидэо Кодзима (яп. 小島 秀夫 Кодзима Хидэо, род. 24 августа 1963, Токио) — японский геймдизайнер, геймдиректор, режиссёр, сценарист, продюсер и актёр.
Майкл Артур Сайман (родился 24 августа 1996 года) — перуано - боливийско-американский предприниматель в области мобильных приложений, инженер-программист, политический активист и писатель. Он наиболее известен созданием популярных приложений в подростковом возрасте.
1995 — Windows 95 поступила в розницу (GA). Запуск, введший «Пуск»/Taskbar и массовое «Plug and Play», стал поворотным для пользовательских ОС.
#Biography #Birth_Date #Events #24Августа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Предлагаю сегодня собраться! Пообсуждать наболевшее и просто интересное.
Время встречи в 16:00 МСК!😎
Время встречи в 16:00 МСК!
Anonymous Poll
44%
Я приду! 👋
44%
Я хотел бы, но не смогу 🤷♀️
13%
Не интересно 👎
👍2
Программист — это не тот, кто знает все.
А тот, кто не боится не знать всего.
Вот скажи, ты реально думаешь, что программисты — это ходячие энциклопедии?
Что в голове у седого синьора-джависта сидят все библиотеки, алгоритмы и спецификации?
Если кто-то говорит что это так, не верь. Это вранье.
Культ незнания
Вот запускаешь ты код.
Видишь ошибку и стек-трейс на 200 строк.
И мозг кричит: Твою мать WTF?! Я не понимаю, что это такое!
И тут ты можешь решить для себя, кто ты.
🙅♂️ Либо ты впадешь в панику и начнешь сомневаться в себе, в своем выборе и вернешься к тому месту, где удобнее и привычнее.
🆗 Либо ты спокойно говоришь себе: Да, я не знаю. Но я разберусь.
На самом деле это происходит ежедневно даже с топовыми программистами. Всегда находится новая ошибка, новая логика, новое приложение которое им не знакомо и не понятно.
Но топовый программист тем и отличается от новичка, что он точно знает как и когда он разберется в этом.
Нужно просто понять и принять то, что КАЖДЫЙ день, ты БУДЕШЬ встречать что-то новое и разбираться в этом.
Нужно просто понять и принять то, что КАЖДЫЙ день, ты ОБЯЗАН искать что-то новое и разбираться в этом.
И это бесконечный процесс пока ты программист.
Почему это важно
Технологии меняются быстрее, чем ты успеваешь их выучить.
Сегодня ты крутой джавист, завтра твоя компания мигрирует на Kotlin или Go.
Через 5 лет твой стек устареет, и если ты привык знать всё, ты сгоришь.
Настоящая сила — не в том, чтобы знать всё.
Настоящая сила — не бояться не знать и быстро учиться.
Иначе завтра, тебя задвинут как старую печатную машинку на антресоль (вроде бы и нахер не нужен, но вдруг пригодится), если вообще не выкинут на свалку.
Как приручить хаос незнания
🟡 Признай его. Не пытайся выглядеть всезнайкой. Скажи - я не знаю, но разберусь. Это нормальная фраза для профессионала.
🟡 Задавай вопросы. Коллегам, гуглу, сообществам, LLM. Ты не глупый, если спрашиваешь. Ты глуп, если молчишь и деградируешь или не развиваешься.
🟡 Учись учиться. Не накапливай статические знания, а тренируй мышцу поиска и анализа.
🟡 Не прячься за комфортным. Вечно ковыряться в том, что ты знаешь — это не рост, это болото.
Понравилась статья - поделись с другом, позови его на канал и будет тебе моя благодарность 🤝
😎
#motivation
А тот, кто не боится не знать всего.
Вот скажи, ты реально думаешь, что программисты — это ходячие энциклопедии?
Что в голове у седого синьора-джависта сидят все библиотеки, алгоритмы и спецификации?
Если кто-то говорит что это так, не верь. Это вранье.
Вот несколько лет назад, я вообще не знал о существовании Java. Я видел только установщик JVM и java-игры на древнем телефоне. Ничего не слышал о SOLID и ACID, Spring даже на английском встречал редко.
А теперь я программист. И каждый день узнаю что-то новое о Java (по крайней мере стараюсь).
Почему так получилось? И почему 40-летний дяденька, смог успешно поменять свою жизнь?
Потому, что я признал, что не знаю ВСЕГО.
Но могу попытаться.
Что не смотря на накопленный опыт и знания, мне есть еще чему поучиться.
Чем собственно ежедневно я и занимаюсь.☺️
Культ незнания
Вот запускаешь ты код.
Видишь ошибку и стек-трейс на 200 строк.
И мозг кричит: Твою мать WTF?! Я не понимаю, что это такое!
И тут ты можешь решить для себя, кто ты.
На самом деле это происходит ежедневно даже с топовыми программистами. Всегда находится новая ошибка, новая логика, новое приложение которое им не знакомо и не понятно.
Но топовый программист тем и отличается от новичка, что он точно знает как и когда он разберется в этом.
Нужно просто понять и принять то, что КАЖДЫЙ день, ты БУДЕШЬ встречать что-то новое и разбираться в этом.
Нужно просто понять и принять то, что КАЖДЫЙ день, ты ОБЯЗАН искать что-то новое и разбираться в этом.
И это бесконечный процесс пока ты программист.
Почему это важно
Технологии меняются быстрее, чем ты успеваешь их выучить.
Сегодня ты крутой джавист, завтра твоя компания мигрирует на Kotlin или Go.
Через 5 лет твой стек устареет, и если ты привык знать всё, ты сгоришь.
Настоящая сила — не в том, чтобы знать всё.
Настоящая сила — не бояться не знать и быстро учиться.
Иначе завтра, тебя задвинут как старую печатную машинку на антресоль (вроде бы и нахер не нужен, но вдруг пригодится), если вообще не выкинут на свалку.
Как приручить хаос незнания
И вот парадокс: именно постоянное напоминание, что я чего-то не знаю, даёт мне такое чувство свободы и силы. Ежедневный поиск и изучение, напоминает, что я уже на шаг впереди тех, кто что-то выучил на отлично и довольствуется этим.
Я не обязан знать всё.
Я ОБЯЗАН не бояться не знать.
#motivation
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3 1
Всем привет!
Жду Вас в Яндекс.Телемост!
Заходите поболтаем о IT и около него.
Интересно Ваше мнение о происходящем на рынке и в целом!
Ссылку Вам выдаст бот, не стесняйтесь писать ему) ->
@JFB_admin_bot
Жду Вас в Яндекс.Телемост!
Заходите поболтаем о IT и около него.
Интересно Ваше мнение о происходящем на рынке и в целом!
Ссылку Вам выдаст бот, не стесняйтесь писать ему) ->
@JFB_admin_bot
👍3
Всем спасибо кто заходил! Хорошо поболтали 🙂
Бот пошел баиньки, можете ему не писать)
Бот пошел баиньки, можете ему не писать)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Чен Шиджун (кит. трад. 陳士駿, пиньинь Chén Shìjùn), впоследствии известный как Стивен «Стив» Ши Чен (англ. Steven «Steve» Shih Chen; род. 18 августа 1978 года) — со-основатель YouTube, отвечал за раннюю архитектуру и масштабирование сервиса.
Майк Кон (англ. Mike Cohn; род. 25 августа 1962, Анахайм, Калифорния) — американский эксперт в области разработки программного обеспечения, известный своим вкладом в развитие гибких методологий, в частности Scrum и Agile. Является одним из основателей и лидеров Scrum Alliance, одной из ведущих организаций, продвигающих Scrum как метод управления проектами.
Роберт Джексон Маркс II (родился 25 августа 1950 года) — американский инженер-электрик , учёный в области вычислительной техники и выдающийся профессор Университета Бэйлора . Среди его вкладов — распределение времени и частоты Чжао-Атласа-Маркса (ZAM) в области обработки сигналов, теорема Чынга-Маркса в теории выборок Шеннона и подход Папулиса-Маркса-Чынга (PMC) в многомерной выборке . Он сыграл важную роль в определении области вычислительного интеллекта и был соредактором первой книги, в названии которой был использован термин «вычислительный интеллект» .
Зенон Уолтер Пилишин FRSC ( / ˈ z ɛ n ən p ə ˈ l ɪ ʃ ən / ; 25 августа 1937 — 6 декабря 2022) — когнитивная наука и ИИ, работы по зрению и символической архитектуре разума.
1609 — Галилео Галилей демонстрирует Большому совету и дожу Венеции новое устройство — телескоп.
1981 — Voyager 2: ближайшее сближение с Сатурном (первая детальная съёмка колец, триггер к будущей миссии Cassini-Huygens).
1989 — Voyager 2: исторический пролёт Нептуна (первые крупные планы планеты/Тритона, фиксирование штормов и тонких колец).
1991 — Линус Торвальдс опубликовал в comp.os.minix знаменитое сообщение: «маленький хобби-проект», который стал Linux. Дата письма — 25.08.1991 20:57:08 GMT (архив CMU).
#Biography #Birth_Date #Events #25Августа
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Основы ООП в Java
Глава 2. Инкапсуляция
Геттеры и сеттеры. Инкапсуляция как интерфейс класса
Геттеры и сеттеры — это специальные методы, которые предоставляют контролируемый доступ к приватным полям класса. Они являются инструментом для реализации инкапсуляции на практике.
Геттеры (Getters): Методы для чтения значения поля. Они возвращают значение и обычно называются getFieldName() (например, getName()).
Сеттеры (Setters): Методы для записи значения в поле. Они принимают параметр и обычно называются setFieldName() (например, setName(String name)). В сеттерах можно добавить проверки для обеспечения валидности данных.
Это позволяет скрыть поля (private), но дать внешнему коду возможность работать с ними безопасно.
Пример класса с геттерами и сеттерами:
Инкапсуляция как интерфейс класса
Инкапсуляция превращает класс в "капсулу" с четким интерфейсом — набором публичных методов (включая геттеры и сеттеры), которые определяют, как внешний код может взаимодействовать с объектом. Интерфейс класса — это как API: он показывает, что можно делать, но скрывает как.
Интерфейс через геттеры/сеттеры: Внешний код видит только методы, такие как getAge() или setName(), а не внутренние данные. Это делает класс "черным ящиком": вы можете изменить реализацию (например, хранить возраст в днях), но интерфейс остается тем же, и внешний код не сломается.
Преимущества как интерфейса:
Гибкость: Изменения внутри класса не влияют на пользователей.
Контроль: Сеттеры позволяют валидировать входные данные, геттеры — форматировать выход (например, вернуть возраст как строку).
Безопасность: Скрытие предотвращает прямой доступ к чувствительным данным.
Пример использования:
Как создать это в IntelliJ IDEA
Генерация геттеров/сеттеров:
В классе Person выделите поля.
Правой кнопкой → Generate → Getter and Setter.
Выберите поля и сгенерируйте методы — IntelliJ добавит их автоматически.
Тестируйте:
Создайте Main, добавьте код и запустите.
Полезные советы для новичков
Конвенции имен: Всегда используйте get/set + имя поля с большой буквы (CamelCase).
Добавляйте логику: В сеттерах проверяйте вход (if-else), в геттерах — форматируйте (например, добавить единицы измерения).
Избегайте публичных полей: Даже если кажется проще — это нарушает инкапсуляцию.
Автоматизация: В IDE генерируйте геттеры/сеттеры, чтобы сэкономить время.
Ресурсы: Почитайте о "JavaBeans" — стандарте, где геттеры/сеттеры играют ключевую роль.
#Java #для_новичков #beginner #incapsulation #setter #getter
Глава 2. Инкапсуляция
Геттеры и сеттеры. Инкапсуляция как интерфейс класса
Геттеры и сеттеры — это специальные методы, которые предоставляют контролируемый доступ к приватным полям класса. Они являются инструментом для реализации инкапсуляции на практике.
Геттеры (Getters): Методы для чтения значения поля. Они возвращают значение и обычно называются getFieldName() (например, getName()).
Сеттеры (Setters): Методы для записи значения в поле. Они принимают параметр и обычно называются setFieldName() (например, setName(String name)). В сеттерах можно добавить проверки для обеспечения валидности данных.
Это позволяет скрыть поля (private), но дать внешнему коду возможность работать с ними безопасно.
Пример класса с геттерами и сеттерами:
public class Person {
private String name; // Скрытое поле
private int age; // Скрытое поле
// Геттер для name
public String getName() {
return name;
}
// Сеттер для name
public void setName(String name) {
if (name != null && !name.isEmpty()) {
this.name = name;
} else {
System.out.println("Имя не может быть пустым!");
}
}
// Геттер для age
public int getAge() {
return age;
}
// Сеттер для age с проверкой
public void setAge(int age) {
if (age > 0 && age < 150) {
this.age = age;
} else {
System.out.println("Некорректный возраст!");
}
}
}
Здесь поля private, так что внешний код не может напрямую сказать person.name = "Invalid";.
Сеттеры добавляют логику: проверка на пустоту или диапазон, что сохраняет целостность объекта.
Инкапсуляция как интерфейс класса
Инкапсуляция превращает класс в "капсулу" с четким интерфейсом — набором публичных методов (включая геттеры и сеттеры), которые определяют, как внешний код может взаимодействовать с объектом. Интерфейс класса — это как API: он показывает, что можно делать, но скрывает как.
Интерфейс через геттеры/сеттеры: Внешний код видит только методы, такие как getAge() или setName(), а не внутренние данные. Это делает класс "черным ящиком": вы можете изменить реализацию (например, хранить возраст в днях), но интерфейс остается тем же, и внешний код не сломается.
Преимущества как интерфейса:
Гибкость: Изменения внутри класса не влияют на пользователей.
Контроль: Сеттеры позволяют валидировать входные данные, геттеры — форматировать выход (например, вернуть возраст как строку).
Безопасность: Скрытие предотвращает прямой доступ к чувствительным данным.
Пример использования:
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setName("Алексей"); // Через сеттер
person.setAge(35); // Через сеттер с проверкой
System.out.println("Имя: " + person.getName()); // Имя: Алексей
System.out.println("Возраст: " + person.getAge()); // Возраст: 35
person.setAge(-5); // Вывод: Некорректный возраст! (поле не изменится)
}
}
Внешний код работает только через интерфейс, что обеспечивает инкапсуляцию.
Как создать это в IntelliJ IDEA
Генерация геттеров/сеттеров:
В классе Person выделите поля.
Правой кнопкой → Generate → Getter and Setter.
Выберите поля и сгенерируйте методы — IntelliJ добавит их автоматически.
Тестируйте:
Создайте Main, добавьте код и запустите.
Полезные советы для новичков
Конвенции имен: Всегда используйте get/set + имя поля с большой буквы (CamelCase).
Добавляйте логику: В сеттерах проверяйте вход (if-else), в геттерах — форматируйте (например, добавить единицы измерения).
Избегайте публичных полей: Даже если кажется проще — это нарушает инкапсуляцию.
Автоматизация: В IDE генерируйте геттеры/сеттеры, чтобы сэкономить время.
Ресурсы: Почитайте о "JavaBeans" — стандарте, где геттеры/сеттеры играют ключевую роль.
#Java #для_новичков #beginner #incapsulation #setter #getter
👍4
Есть желание создать отдельный чат для АКТИВНЫХ пользователей (так сказать "только для своих").
Интересно?
Интересно?
Anonymous Poll
44%
Да! Я с радостью присоединюсь! 🙂
52%
Интересно, но не понятно чем лучше текущего чата? 🚽
4%
Не интересно. Я здесь не чтобы общаться. 🤓
👍1