Что такое класс и объект в Java? 🤓
Ответ:
Класс — это шаблон, описывающий свойства (поля) и поведение (методы) объектов.
Объект — экземпляр класса, созданный с помощью оператора new. Например, Car car = new Car(); создает объект car на основе класса Car.
#собеседование
Ответ:
Объект — экземпляр класса, созданный с помощью оператора new. Например, Car car = new Car(); создает объект car на основе класса Car.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
С 17.05 по 23.05
Предыдущий пост(с 10.05 по 16.05)
Следующая неделя
Воскресный мотивационный пост:
Как заставить себя учиться?🤓
Запись встреч
Controllers in Spring. Разбираем создание и устройство.
Обучающие статьи
Глубокое изучение типа данных short в Java
Глубокое изучение типа данных long в Java
Работа с коллекциями, вложенными объектами и generic-типами в Gson
Кастомизация и адаптеры в Gson
Работа с JsonElement и полезные советы в Gson
Полезные статьи и видео:
«Голая Java» или разработка без всего
Глубокое погружение в процедуру запуска JVM
Простое руководство по самой универсальной разметке - Markdown
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
#memory
Предыдущий пост(с 10.05 по 16.05)
Следующая неделя
Воскресный мотивационный пост:
Как заставить себя учиться?
Запись встреч
Controllers in Spring. Разбираем создание и устройство.
Обучающие статьи
Глубокое изучение типа данных short в Java
Глубокое изучение типа данных long в Java
Работа с коллекциями, вложенными объектами и generic-типами в Gson
Кастомизация и адаптеры в Gson
Работа с JsonElement и полезные советы в Gson
Полезные статьи и видео:
«Голая Java» или разработка без всего
Глубокое погружение в процедуру запуска JVM
Простое руководство по самой универсальной разметке - Markdown
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
#memory
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
После проведенного голосования, определилась тема для рассмотрения в выходные.
Так как ранее мы уже подробно разбирали эту тему в подробностях, предлагаю погрузиться в общее описание термина, его историю и применение.
В конце статьи будут ссылки на видео, где Вы сможете подробно ознакомиться с каждым типом паттернов.
Паттерны проектирования на Java: суть, история и применение
Что такое паттерны проектирования?
Паттерн проектирования — это обобщенное, повторно используемое решение для часто встречающихся проблем в проектировании программного обеспечения. Это не готовый код, а скорее шаблон или схема, которая описывает, как организовать взаимодействие объектов и классов для достижения определенной цели. Паттерны проектирования помогают разработчикам создавать гибкие, масштабируемые и поддерживаемые системы.
Представьте, что вы архитектор, строящий дом. Вместо того чтобы изобретать новые способы возведения стен или фундамента, вы используете проверенные методы, которые уже доказали свою эффективность. Паттерны проектирования выполняют аналогичную роль в программировании: они предлагают стандартные подходы к решению задач, таких как управление зависимостями, организация кода или обеспечение расширяемости системы.
В контексте Java паттерны особенно ценны, поскольку этот язык широко используется для создания сложных корпоративных приложений, где важны модульность, читаемость кода и его долгосрочная поддержка. Например, паттерны помогают управлять сложными связями между объектами в системах с сотнями классов, таких как веб-приложения или серверные платформы.
История возникновения паттернов проектирования
Идея паттернов проектирования зародилась за пределами программирования. В 1977 году архитектор Кристофер Александер в своей книге A Pattern Language: Towns, Buildings, Construction описал концепцию "паттернов" как универсальных решений для архитектурных задач. Он утверждал, что хорошие архитектурные решения можно описать в виде шаблонов, которые можно применять в разных контекстах.
Эта идея вдохновила программистов. В конце 1980-х годов Кент Бек и Уорд Каннингем начали экспериментировать с применением концепции паттернов в разработке программного обеспечения. Однако настоящий прорыв произошел в 1994 году, когда вышла книга Design Patterns: Elements of Reusable Object-Oriented Software, написанная Эрихом Гаммой, Ричардом Хелмом, Ральфом Джонсоном и Джоном Влиссидесом, известными как "Банда четырех" (Gang of Four, GoF). Эта книга систематизировала 23 классических паттерна проектирования, которые стали стандартом в индустрии.
Книга GoF была ориентирована на объектно-ориентированное программирование (ООП), что сделало её особенно актуальной для Java, языка, построенного на принципах ООП, таких как инкапсуляция, наследование и полиморфизм. С тех пор паттерны проектирования стали неотъемлемой частью разработки на Java, используясь в библиотеках, фреймворках и прикладных системах.
Зачем нужны паттерны проектирования?
Паттерны проектирования решают несколько ключевых задач:
Упрощение проектирования: Паттерны предлагают готовые решения, которые экономят время на разработку и уменьшают вероятность ошибок. Вместо того чтобы изобретать собственный способ организации кода, разработчик может использовать проверенный паттерн.
Улучшение коммуникации: Паттерны формируют общий язык для разработчиков. Названия паттернов, такие как "Синглтон" или "Фабрика", сразу дают понять, как организован код, что упрощает обсуждение и понимание архитектуры.
Гибкость и масштабируемость: Паттерны помогают создавать код, который легко адаптировать к новым требованиям. Например, использование паттерна "Стратегия" позволяет легко заменять алгоритмы без изменения основного кода.
Поддерживаемость: Код, построенный с использованием паттернов, легче читать и модифицировать, так как он следует стандартным подходам.
#Java #для_новичков #beginner #patterns
👍1
Применение паттернов проектирования в Java
Паттерны проектирования находят широкое применение в Java благодаря её объектно-ориентированной природе и богатой экосистеме.
1. Разработка корпоративных приложений
Java часто используется для создания сложных серверных систем, таких как банковские платформы или системы управления контентом. В таких проектах паттерны проектирования помогают структурировать код.
Например:
Фреймворк Spring: Использует паттерн "Внедрение зависимостей" для управления жизненным циклом объектов. Это позволяет разработчикам сосредоточиться на бизнес-логике, а не на создании и настройке объектов.
Hibernate: Применяет паттерн "Фасад" для упрощения работы с базой данных, скрывая сложность SQL-запросов за простым API.
2. Создание библиотек и API
Паттерны проектирования упрощают создание библиотек, которые другие разработчики могут использовать.
Например:
В Java API паттерн "Итератор" используется в коллекциях (например, List или Set), чтобы обеспечить единообразный способ перебора элементов.
Паттерн "Фабричный метод" применяется в классе java.util.Calendar, где метод getInstance() создает объекты в зависимости от локализации.
3. Управление многопоточностью
Java широко используется для многопоточного программирования, и паттерны помогают управлять сложностью.
Например:
Паттерн "Синглтон" часто используется для создания единственного экземпляра менеджера ресурсов, такого как пул соединений с базой данных.
Паттерн "Монитор" встроен в Java на уровне языка (через ключевое слово synchronized), что упрощает синхронизацию потоков.
4. Упрощение тестирования
Паттерны способствуют написанию тестируемого кода. Например, использование "Внедрения зависимостей" позволяет легко заменять реальные компоненты на заглушки (mocks) во время тестирования.
Проблемы и критика паттернов проектирования
Хотя паттерны проектирования чрезвычайно полезны, их применение не лишено недостатков:
Избыточная сложность: Иногда использование паттерна усложняет код там, где можно было бы обойтись более простым решением.
Злоупотребление: Новички могут применять паттерны везде, даже когда они не нужны, что приводит к "паттерн-ориентированному" программированию.
Контекстная зависимость: Не все паттерны подходят для всех ситуаций. Например, "Синглтон" может быть проблематичным в многопоточных приложениях, если не позаботиться о синхронизации.
В Java-разработке важно понимать, когда и какой паттерн использовать, чтобы избежать ненужной сложности. Опытные разработчики часто комбинируют паттерны, адаптируя их под конкретные задачи.
Для более подробного изучения паттернов, предлагаю к просмотру 4 ранее записанных видео:
Порождающие паттерны проектирования на Java
Структурные паттерны проектирования на Java
Поведенческие паттерны проектирования на Java. Часть 1
Поведенческие паттерны проектирования на Java. Часть 2
Для полезного чтения, рекомендую сайт (может не работать без VPN)
#Java #для_новичков #beginner #on_request #patterns
Паттерны проектирования находят широкое применение в Java благодаря её объектно-ориентированной природе и богатой экосистеме.
1. Разработка корпоративных приложений
Java часто используется для создания сложных серверных систем, таких как банковские платформы или системы управления контентом. В таких проектах паттерны проектирования помогают структурировать код.
Например:
Фреймворк Spring: Использует паттерн "Внедрение зависимостей" для управления жизненным циклом объектов. Это позволяет разработчикам сосредоточиться на бизнес-логике, а не на создании и настройке объектов.
Hibernate: Применяет паттерн "Фасад" для упрощения работы с базой данных, скрывая сложность SQL-запросов за простым API.
2. Создание библиотек и API
Паттерны проектирования упрощают создание библиотек, которые другие разработчики могут использовать.
Например:
В Java API паттерн "Итератор" используется в коллекциях (например, List или Set), чтобы обеспечить единообразный способ перебора элементов.
Паттерн "Фабричный метод" применяется в классе java.util.Calendar, где метод getInstance() создает объекты в зависимости от локализации.
3. Управление многопоточностью
Java широко используется для многопоточного программирования, и паттерны помогают управлять сложностью.
Например:
Паттерн "Синглтон" часто используется для создания единственного экземпляра менеджера ресурсов, такого как пул соединений с базой данных.
Паттерн "Монитор" встроен в Java на уровне языка (через ключевое слово synchronized), что упрощает синхронизацию потоков.
4. Упрощение тестирования
Паттерны способствуют написанию тестируемого кода. Например, использование "Внедрения зависимостей" позволяет легко заменять реальные компоненты на заглушки (mocks) во время тестирования.
Проблемы и критика паттернов проектирования
Хотя паттерны проектирования чрезвычайно полезны, их применение не лишено недостатков:
Избыточная сложность: Иногда использование паттерна усложняет код там, где можно было бы обойтись более простым решением.
Злоупотребление: Новички могут применять паттерны везде, даже когда они не нужны, что приводит к "паттерн-ориентированному" программированию.
Контекстная зависимость: Не все паттерны подходят для всех ситуаций. Например, "Синглтон" может быть проблематичным в многопоточных приложениях, если не позаботиться о синхронизации.
В Java-разработке важно понимать, когда и какой паттерн использовать, чтобы избежать ненужной сложности. Опытные разработчики часто комбинируют паттерны, адаптируя их под конкретные задачи.
Для более подробного изучения паттернов, предлагаю к просмотру 4 ранее записанных видео:
Порождающие паттерны проектирования на Java
Структурные паттерны проектирования на Java
Поведенческие паттерны проектирования на Java. Часть 1
Поведенческие паттерны проектирования на Java. Часть 2
Для полезного чтения, рекомендую сайт (может не работать без VPN)
#Java #для_новичков #beginner #on_request #patterns
YouTube
Порождающие паттерны проектирования на Java. Онлайн встреча от 04.08.2024
Онлайн встреча нашего канала, которую мы провели совместно с подписчиками.
Сегодня мы рассмотрели на примерах следующие паттерны проектирования:
- Фабричный метод (Factory Method)
- Абстрактная фабрика (Abstract Factory)
- Прототип (Prototype)
- Одиночка…
Сегодня мы рассмотрели на примерах следующие паттерны проектирования:
- Фабричный метод (Factory Method)
- Абстрактная фабрика (Abstract Factory)
- Прототип (Prototype)
- Одиночка…
👍2
Есть предложение встретиться завтра в 16:00 по МСК на лайвкодинг!
Тема будет: Swagger
Тема будет: Swagger
Anonymous Poll
50%
Да, я обязательно приду! 🙂
45%
Я хотел бы прийти, но не могу 🤷♀️
5%
Не приду, фигню какую-то рассматриваете 🤢
👍1
Всем привет! ✌️
Приглашаю всех желающих сегодня собраться в Яндекс.Телемост в 16:00 по МСК!
В этот раз, дошла очередь рассказать о том, как в контроллере в экосистеме Spring, добавить Swagger.
И даже если раньше вы и не слышали о таком слове - уверен, Вам это пригодится!
Рассмотрим:
- Зачем нам вообще нужен Swagger
- Какие существуют основные принципы его написания
- Основные аннотации Swagger
- Все это посмотрим на примере кода
Приходите, будет весьма интересно🧑💻
Как всегда жду всех! 🫡
Приглашаю всех желающих сегодня собраться в Яндекс.Телемост в 16:00 по МСК!
В этот раз, дошла очередь рассказать о том, как в контроллере в экосистеме Spring, добавить Swagger.
И даже если раньше вы и не слышали о таком слове - уверен, Вам это пригодится!
Рассмотрим:
- Зачем нам вообще нужен Swagger
- Какие существуют основные принципы его написания
- Основные аннотации Swagger
- Все это посмотрим на примере кода
Приходите, будет весьма интересно
Как всегда жду всех! 🫡
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
"Твой первый проект — важнее, чем думаешь"
Не знаю как все, а я хорошо помню как писал свой первый проект😉
И пускай сейчас я лишь улыбнусь, вспоминая его, но тогда мне казалось, что я как минимум сделал что-то великое✈️
И наверно лишь после этого, я смог окончательно поверить, что стану программистом.💪
И если Вы 🫵 до сих пор считаете, что писать пет-проекты - это как минимум ерунда и никому не нужно, спешу огорчить - Вы не правы.
Так почему же стоит попробовать реализовать свою самую смелую и сложную идею, самым простым образом?
🔴 Первый завершённый проект — это точка отсчёта. Он показывает, что ты не просто учишься, а уже умеешь создавать что-то настоящее.
Это по сути, первая проверка твоих настоящих умений, а не копирование кода с видео или сайта. И пускай чатями ты все равно берешь код с Stack Owerflow или из LLM, но сама проработка идеи, наполнение смыслом безликого кода, порождает в тебе уверенность в своих силах.
🔴 Доведение проекта до конца — уже победа.
Ведь большинство бросает обучение, написание проекта на середине, а то и в самом начале!
Так вот, завершив проект, ты входишь в то меньшинство, кто реально двигается вперёд. Тех, кто преодолел свою лень, свои слабости и сомнения.
🔴 Обучение в процессе
Ведь в даже самом простом проекте ты сталкиваешься как минимум с:
⚫ структурой кода,
⚫ ООП (объектно-ориентированным программированием),
⚫ работой с вводом/выводом,
⚫ дебагом и ошибками,
⚫ поиском информации и документацией.
А это как минимум зарядка для твоего серого вещества!
🔴 Маленький проект - это уже портфолио.
Даже самый простой проект можно показать на GitHub. А это твой первый кирпичик в карьеру.
А если он написан с использованием топовых технологий - это лишний повод гордится собой и давать ссылку на GitHub собеседующему.
🔴 С каждым следующим проектом будет легче.
После первого проекта страх уходит. После второго ты начинаешь думать не “смогу ли?”, а “что сделаю дальше?”. После третьего ты уже сам можешь кого-то научить🙂
😎
#motivation
Не знаю как все, а я хорошо помню как писал свой первый проект
И пускай сейчас я лишь улыбнусь, вспоминая его, но тогда мне казалось, что я как минимум сделал что-то великое
И наверно лишь после этого, я смог окончательно поверить, что стану программистом.
И если Вы 🫵 до сих пор считаете, что писать пет-проекты - это как минимум ерунда и никому не нужно, спешу огорчить - Вы не правы.
Так почему же стоит попробовать реализовать свою самую смелую и сложную идею, самым простым образом?
Это по сути, первая проверка твоих настоящих умений, а не копирование кода с видео или сайта. И пускай чатями ты все равно берешь код с Stack Owerflow или из LLM, но сама проработка идеи, наполнение смыслом безликого кода, порождает в тебе уверенность в своих силах.
Ведь большинство бросает обучение, написание проекта на середине, а то и в самом начале!
Вы знаете сколько пользователей JavaRush достигли 10 уровня? Из нескольких миллионов - 3%! Да, Карл, всего 3%!
Так вот, завершив проект, ты входишь в то меньшинство, кто реально двигается вперёд. Тех, кто преодолел свою лень, свои слабости и сомнения.
Ведь в даже самом простом проекте ты сталкиваешься как минимум с:
А это как минимум зарядка для твоего серого вещества!
Даже самый простой проект можно показать на GitHub. А это твой первый кирпичик в карьеру.
А если он написан с использованием топовых технологий - это лишний повод гордится собой и давать ссылку на GitHub собеседующему.
После первого проекта страх уходит. После второго ты начинаешь думать не “смогу ли?”, а “что сделаю дальше?”. После третьего ты уже сам можешь кого-то научить
#motivation
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10 1
Предлагаем темы для разбора и публикации! 📖
В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.
Голосование будет проводиться всю неделю, а статья или видео - выходить по выходным.
Примерные правила:
🟢 темы, не выше уровня middle, чтоб был интерес общим.
🟢 один человек - одна тема.
🟢 Тема должна быть отдельным теоретически-практическим вопросом. Готовый проект - это не тема!
Жду Ваших предложений!👏
В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.
Голосование будет проводиться всю неделю, а статья или видео - выходить по выходным.
Примерные правила:
Жду Ваших предложений!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Голосуем за предложенные (одним человеком!) темы!
Anonymous Poll
27%
Keycloak
32%
MVC
30%
EntityManager
11%
EntityGraph
👍1
Изучаем Swagger
Встреча от 25.05.2025
Запись встречи -
YOUTUBE
RUTUBE
На сегодняшней встрече мы разобрали часто встречающуюся библиотеку - Swagger UI
Что мы успели:
➡️ Зачем нам вообще нужен Swagger UI
➡️ Какие существуют основные принципы его написания
➡️ Основные аннотации Swagger Core
➡️ Все это посмотрели на примере кода
Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!
Кому нужно проект на гитхабе (кому не жалко поставьте звездочек)
Спасибо всем кто пришел, респект 🫡
Встреча от 25.05.2025
Запись встречи -
YOUTUBE
RUTUBE
На сегодняшней встрече мы разобрали часто встречающуюся библиотеку - Swagger UI
Что мы успели:
Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!
Кому нужно проект на гитхабе (кому не жалко поставьте звездочек)
Спасибо всем кто пришел, респект 🫡
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
А вы знали, что термин Boilerplate (Шаблонный код) пришел к нам из начала 20 века?
Изначально термином Boiler plate описывалась согнутая в цилиндры сталь для изготовления водонагревателей. Затем начал применяться в СМИ для банального или неоригинального текста. Также этим термином называли металлические печатные формы с заранее подготовленным текстом, например, с рекламой или синдицированными колонками, которые передавались в небольшие местные газеты. По аналогии сами печатные формы тоже стали называть boilerplates. Одним из крупных поставщиков таких форм была компания Western Newspaper Union. Она предлагала газетам с небольшим географическим покрытием «готовые к печати истории, содержащие национальные или международные новости». Эти «истории» могли содержать рекламные объявления, размещённые рядом с обычным текстом.
proof
#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
"Пользовательский интерфейс — это лицо вашего продукта."
Алан Купер, отец визуального программирования (Visual Basic), сказал это в 1995 году в книге "About Face".
Немного хабра
#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Чтение на выходные: «Психбольница в руках пациентов. Алан Купер об интерфейсах»
Алан Купер — дизайнер и разработчик из США. Отец Visual Basic — языка программирования, на котором до сих пор работают макросы Office. Как личность сильно неравнодушен ко всему удобному. По...
👍1
Глубокое изучение типа данных double в Java: сравнение с целочисленными типами
Тип данных double в Java — это примитивный числовой тип, предназначенный для хранения вещественных чисел двойной точности, то есть чисел с плавающей запятой. Он используется везде, где необходима работа с дробями, приближёнными значениями, математическими и научными вычислениями, где целочисленных типов недостаточно.
Размер и назначение
double занимает 8 байт (64 бита) и поддерживает числа с высокой точностью в достаточно большом диапазоне — от ±10⁻³⁰⁸ до ±10³⁰⁸. При этом точность составляет около 15–17 десятичных цифр. Это делает double универсальным для большинства задач, связанных с вещественной арифметикой.
В отличие от int и long, которые могут хранить только целые числа, double может представлять дробные значения. Например, 3.14, -0.0001, 2.71828.
Формат хранения и особенности
Числа типа double хранятся в формате IEEE 754 — стандарте представления чисел с плавающей точкой.
Эти 64 бита делятся на три части:
1 бит знака;
11 бит на экспоненту;
52 бита на мантиссу (значащие цифры).
Такое представление даёт широкий диапазон значений, но не обеспечивает абсолютную точность — дробные значения могут быть представлены с ошибкой округления.
Сравнение с целочисленными типами
byte, short, int, long обеспечивают точную арифметику в рамках своего диапазона. double же — приближённую, и это накладывает ограничения.
Например, выражение 0.1 + 0.2 == 0.3 даст false, потому что 0.1 и 0.2 не имеют точного двоичного представления, и результат чуть отличается от 0.3.
double может без ошибок хранить целые числа, но только до 2⁵³ (около 9 квадриллионов). После этого точность теряется: не каждое целое число может быть представлено уникально.
Попытка точно представить большие целые (long) в double может привести к неожиданным ошибкам.
Автоматическое приведение типов
При работе в выражениях:
Все целочисленные типы (byte, short, int, long) автоматически продвигаются до double, если в выражении участвует double.
Приведение от double к целым типам выполняется явно, с усечением дробной части.
Пример:
Переполнение и особые значения
В отличие от целочисленных типов, double не оборачивается при переполнении, а уходит в бесконечность:
Также возможны:
NaN (Not a Number) — результат недопустимых операций (например, 0.0 / 0.0)
+Infinity и -Infinity — результат переполнения или деления на ноль
Производительность и использование
Арифметика с double обычно медленнее, чем с целыми числами, особенно на старых процессорах или в JVM без JIT-оптимизаций. В современных системах разница не всегда критична, но при массовых расчётах (for-циклы, обработка массивов) её стоит учитывать.
Когда использовать double, а когда — целые типы
Используйте double, если:
нужно представлять дробные числа;
важна относительная точность, а не абсолютная;
вы работаете с физикой, графикой, научными расчётами.
Выбирайте int или long, если:
работаете с точным счётом (деньги, единицы, индексы);
важна предсказуемость и надёжность арифметики;
нужны точные операции без округлений.
Выбирайте BigDecimal, если:
нужна максимальная точность и надежность расчетов.
Рекомендации
Для точных денежных расчётов не используйте double — он не гарантирует точность. Лучше использовать BigDecimal.
Избегайте == для сравнения double — сравнивайте с допустимой дельтой (например, Math.abs(a - b) < epsilon)
Помните, что double не хранит точных значений, даже для простых дробей вроде 0.1
#Java #для_новичков #beginner #double
Тип данных double в Java — это примитивный числовой тип, предназначенный для хранения вещественных чисел двойной точности, то есть чисел с плавающей запятой. Он используется везде, где необходима работа с дробями, приближёнными значениями, математическими и научными вычислениями, где целочисленных типов недостаточно.
Размер и назначение
double занимает 8 байт (64 бита) и поддерживает числа с высокой точностью в достаточно большом диапазоне — от ±10⁻³⁰⁸ до ±10³⁰⁸. При этом точность составляет около 15–17 десятичных цифр. Это делает double универсальным для большинства задач, связанных с вещественной арифметикой.
В отличие от int и long, которые могут хранить только целые числа, double может представлять дробные значения. Например, 3.14, -0.0001, 2.71828.
Формат хранения и особенности
Числа типа double хранятся в формате IEEE 754 — стандарте представления чисел с плавающей точкой.
Эти 64 бита делятся на три части:
1 бит знака;
11 бит на экспоненту;
52 бита на мантиссу (значащие цифры).
Такое представление даёт широкий диапазон значений, но не обеспечивает абсолютную точность — дробные значения могут быть представлены с ошибкой округления.
Сравнение с целочисленными типами
byte, short, int, long обеспечивают точную арифметику в рамках своего диапазона. double же — приближённую, и это накладывает ограничения.
Например, выражение 0.1 + 0.2 == 0.3 даст false, потому что 0.1 и 0.2 не имеют точного двоичного представления, и результат чуть отличается от 0.3.
double может без ошибок хранить целые числа, но только до 2⁵³ (около 9 квадриллионов). После этого точность теряется: не каждое целое число может быть представлено уникально.
Попытка точно представить большие целые (long) в double может привести к неожиданным ошибкам.
Автоматическое приведение типов
При работе в выражениях:
Все целочисленные типы (byte, short, int, long) автоматически продвигаются до double, если в выражении участвует double.
Приведение от double к целым типам выполняется явно, с усечением дробной части.
Пример:
int x = 5;
double y = 2.5;
double z = x + y; // x автоматически превращается в double
int i = (int) y; // i = 2, дробная часть отбрасывается
Переполнение и особые значения
В отличие от целочисленных типов, double не оборачивается при переполнении, а уходит в бесконечность:
double x = Double.MAX_VALUE;
System.out.println(x * 2); // Infinity
Также возможны:
NaN (Not a Number) — результат недопустимых операций (например, 0.0 / 0.0)
+Infinity и -Infinity — результат переполнения или деления на ноль
Производительность и использование
Арифметика с double обычно медленнее, чем с целыми числами, особенно на старых процессорах или в JVM без JIT-оптимизаций. В современных системах разница не всегда критична, но при массовых расчётах (for-циклы, обработка массивов) её стоит учитывать.
Когда использовать double, а когда — целые типы
Используйте double, если:
нужно представлять дробные числа;
важна относительная точность, а не абсолютная;
вы работаете с физикой, графикой, научными расчётами.
Выбирайте int или long, если:
работаете с точным счётом (деньги, единицы, индексы);
важна предсказуемость и надёжность арифметики;
нужны точные операции без округлений.
Выбирайте BigDecimal, если:
нужна максимальная точность и надежность расчетов.
Рекомендации
Для точных денежных расчётов не используйте double — он не гарантирует точность. Лучше использовать BigDecimal.
Избегайте == для сравнения double — сравнивайте с допустимой дельтой (например, Math.abs(a - b) < epsilon)
Помните, что double не хранит точных значений, даже для простых дробей вроде 0.1
#Java #для_новичков #beginner #double
👍5
Продолжаем выбирать темы для разбора и голосовать за рассмотрение предложенных! 🤓
Голосуем за тему к рассмотрению в эти выходные!
Выбираем новую тему!
(можете предложить что-то из того что предлагали на прошлой неделе и что проигрывает в голосовании!)
Не стесняемся!✌️
Голосуем за тему к рассмотрению в эти выходные!
Выбираем новую тему!
(можете предложить что-то из того что предлагали на прошлой неделе и что проигрывает в голосовании!)
Не стесняемся!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Что выведет код?
#Tasks
public class Task260525 {
public static void main(String[] args) {
double d1 = 0.1 + 0.2;
double d2 = 0.3;
System.out.println(d1 == d2);
}
}
#Tasks
👍1
👍1
Объясните основные принципы ООП в Java? 🤓
Ответ:
Инкапсуляция: сокрытие данных (через private) и предоставление доступа через методы (геттеры/сеттеры).
Наследование: класс может наследовать свойства и методы другого класса (extends).
Полиморфизм: возможность использовать объекты разных классов через общий интерфейс или родительский класс.
Абстракция: сокрытие деталей реализации, предоставление только необходимого интерфейса (через абстрактные классы или интерфейсы).
#собеседование
Ответ:
Наследование: класс может наследовать свойства и методы другого класса (extends).
Полиморфизм: возможность использовать объекты разных классов через общий интерфейс или родительский класс.
Абстракция: сокрытие деталей реализации, предоставление только необходимого интерфейса (через абстрактные классы или интерфейсы).
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍1
А вы знали, что термин Cursor (Курсор) пришел к нам из древней Греции?
Cursor в переводе с латыни — бегун. Этим словом называли прозрачную каретку на логарифмической линейке — бегунок, ползунок. На бегунке была нанесена тончайшая линия для выбора нужной позиции на линейке. Позднее термин «курсор» перекочевал в компьютеры.
#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1