Глубокое изучение типа данных long в Java: сравнение с byte, short и int
Тип данных long в Java — это 64-битное целое число со знаком. Он используется, когда диапазона int недостаточно для представления чисел, особенно в финансовых расчётах, временных метках, системах счёта, генерации идентификаторов и других задачах, связанных с большими значениями.
Размер и диапазон
long занимает 8 байт (64 бита) и позволяет представлять значения от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807. Это примерно ±9 квинтиллионов.
Для сравнения:
byte: 1 байт, от -128 до 127
short: 2 байта, от -32 768 до 32 767
int: 4 байта, от -2.1 млрд до 2.1 млрд
Когда ни byte, ни short, ни даже int не покрывают диапазон значений — long становится необходимостью.
Внутреннее представление
Как и остальные знаковые целые типы в Java, long реализован через дополнительный код (two’s complement). Старший (64-й) бит отвечает за знак: 0 — положительное число или ноль, 1 — отрицательное. Всё остальное аналогично другим типам, но с удвоенным количеством бит по сравнению с int.
Работа с памятью
long — примитивный тип, поэтому:
локальные переменные long хранятся в стеке;
поля объектов — в куче;
память управляется виртуальной машиной Java автоматически: выделяется при создании переменной, освобождается при выходе из области видимости (для локальных) или сборке мусора (для объектов).
Массив long[] из миллиона элементов потребует 8 МБ памяти, тогда как int[] — всего 4 МБ, а byte[] — 1 МБ. Это важно учитывать при проектировании систем, чувствительных к объёму памяти.
Арифметика и автоматическое повышение типов
Арифметика с long происходит без повышения до int, в отличие от byte и short, которые автоматически продвигаются до int в выражениях. Однако, при использовании int и long в одном выражении, результат будет long.
Пример:
Здесь сначала перемножаются два int, а потом результат приводится к long. Чтобы избежать переполнения, нужно один из операндов явно сделать long:
Переполнение и wraparound
Тип long, несмотря на огромный диапазон, всё равно может переполниться. Если результат выходит за пределы диапазона, он не вызывает исключения, а оборачивается по модулю 2⁶⁴:
Беззнаковость и побитовая работа
В Java нет беззнакового long. Для имитации поведения 64-битного беззнакового числа можно использовать BigInteger, либо применять побитовые маски и операторы, чтобы интерпретировать старшие биты корректно.
Например:
С Java 8 появилась поддержка методов для unsigned арифметики: Long.divideUnsigned, Long.toUnsignedString и т.п., но сами типы остались только знаковыми.
Сравнение с младшими типами
byte и short — экономны по памяти, но быстро переполняются. Используются в низкоуровневом коде, где важен каждый байт.
int — универсален, безопасен по диапазону для большинства задач.
long — выбор для работы с большими числами, когда int недостаточен.
Однако, использование long без необходимости может привести к перерасходу памяти — особенно в коллекциях, структурах данных, больших массивах. Используйте long там, где это действительно оправдано.
Особенности и рекомендации
При передаче литералов типа long, добавляйте суффикс L, чтобы избежать ошибочного приведения к int:
long big = 3000000000L; // без 'L' это вызовет переполнение int
Проверяйте выражения на потенциальное переполнение при арифметике. Для критических расчётов используйте Math.addExact(), Math.multiplyExact() — они выбрасывают ArithmeticException при переполнении.
Если требуется более 64 бит — используйте BigInteger. Это объектный тип, не примитив, но позволяет работать с произвольно большими целыми числами.
#Java #для_новичков #beginner #long
Тип данных long в Java — это 64-битное целое число со знаком. Он используется, когда диапазона int недостаточно для представления чисел, особенно в финансовых расчётах, временных метках, системах счёта, генерации идентификаторов и других задачах, связанных с большими значениями.
Размер и диапазон
long занимает 8 байт (64 бита) и позволяет представлять значения от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807. Это примерно ±9 квинтиллионов.
Для сравнения:
byte: 1 байт, от -128 до 127
short: 2 байта, от -32 768 до 32 767
int: 4 байта, от -2.1 млрд до 2.1 млрд
Когда ни byte, ни short, ни даже int не покрывают диапазон значений — long становится необходимостью.
Внутреннее представление
Как и остальные знаковые целые типы в Java, long реализован через дополнительный код (two’s complement). Старший (64-й) бит отвечает за знак: 0 — положительное число или ноль, 1 — отрицательное. Всё остальное аналогично другим типам, но с удвоенным количеством бит по сравнению с int.
Работа с памятью
long — примитивный тип, поэтому:
локальные переменные long хранятся в стеке;
поля объектов — в куче;
память управляется виртуальной машиной Java автоматически: выделяется при создании переменной, освобождается при выходе из области видимости (для локальных) или сборке мусора (для объектов).
Массив long[] из миллиона элементов потребует 8 МБ памяти, тогда как int[] — всего 4 МБ, а byte[] — 1 МБ. Это важно учитывать при проектировании систем, чувствительных к объёму памяти.
Арифметика и автоматическое повышение типов
Арифметика с long происходит без повышения до int, в отличие от byte и short, которые автоматически продвигаются до int в выражениях. Однако, при использовании int и long в одном выражении, результат будет long.
Пример:
int a = 1_000_000_000;
int b = 3;
long result = a * b; // результат может быть неверным!
Здесь сначала перемножаются два int, а потом результат приводится к long. Чтобы избежать переполнения, нужно один из операндов явно сделать long:
long result = (long) a * b; // безопасно
Переполнение и wraparound
Тип long, несмотря на огромный диапазон, всё равно может переполниться. Если результат выходит за пределы диапазона, он не вызывает исключения, а оборачивается по модулю 2⁶⁴:
long x = Long.MAX_VALUE;
x++;
System.out.println(x); // выведет отрицательное число: Long.MIN_VALUE
Это поведение аналогично тому, что происходит с int, short и byte, но требует повышенного внимания при работе с предельными значениями.
Беззнаковость и побитовая работа
В Java нет беззнакового long. Для имитации поведения 64-битного беззнакового числа можно использовать BigInteger, либо применять побитовые маски и операторы, чтобы интерпретировать старшие биты корректно.
Например:
long l = -1L;
String binary = Long.toBinaryString(l); // все 64 бита — единицы
С Java 8 появилась поддержка методов для unsigned арифметики: Long.divideUnsigned, Long.toUnsignedString и т.п., но сами типы остались только знаковыми.
Сравнение с младшими типами
byte и short — экономны по памяти, но быстро переполняются. Используются в низкоуровневом коде, где важен каждый байт.
int — универсален, безопасен по диапазону для большинства задач.
long — выбор для работы с большими числами, когда int недостаточен.
Однако, использование long без необходимости может привести к перерасходу памяти — особенно в коллекциях, структурах данных, больших массивах. Используйте long там, где это действительно оправдано.
Особенности и рекомендации
При передаче литералов типа long, добавляйте суффикс L, чтобы избежать ошибочного приведения к int:
long big = 3000000000L; // без 'L' это вызовет переполнение int
Проверяйте выражения на потенциальное переполнение при арифметике. Для критических расчётов используйте Math.addExact(), Math.multiplyExact() — они выбрасывают ArithmeticException при переполнении.
Если требуется более 64 бит — используйте BigInteger. Это объектный тип, не примитив, но позволяет работать с произвольно большими целыми числами.
#Java #для_новичков #beginner #long
👍4🤯2
Продолжаем выбирать темы для разбора и голосовать за рассмотрение предложенных! 🤓
Голосуем за тему к рассмотрению в эти выходные!
Выбираем новую тему!
(можете предложить что-то из того что предлагали на прошлой неделе и что проигрывает в голосовании!)
Не стесняемся!✌️
Голосуем за тему к рассмотрению в эти выходные!
Выбираем новую тему!
(можете предложить что-то из того что предлагали на прошлой неделе и что проигрывает в голосовании!)
Не стесняемся!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Что выведет код?
#Tasks
public class Task220525 {
public static void main(String[] args) {
long a = 1_000_000_000 * 3_000;
long b = 1_000_000_000L * 3_000;
System.out.println(a == b);
}
}
#Tasks
🔥2
👍5
Зачем нужен метод main в Java? 🤓
Ответ:Метод public static void main(String[] args) — точка входа в программу. JVM вызывает его при запуске приложения. Он должен быть public и static, чтобы JVM могла его вызвать без создания экземпляра класса.
В новых версиях Java (21 и выше) метод main не обязателен в строгом виде для простых программ благодаря неименованным классам и упрощённым методам main. Однако для большинства реальных приложений и для совместимости с более ранними версиями Java традиционный метод public static void main(String[] args) всё ещё необходим.
#собеседование
Ответ:
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
А вы знали, что около 95% подводных интернет-кабелей принадлежат частным компаниям?
По данным 2025 года, 95% из более чем 1,4 миллиона километров подводных кабелей, обеспечивающих глобальный интернет, принадлежат компаниям вроде Google, Meta и Amazon, а не государствам.
Позволяется задуматься, что будет если корпорации захотят ограничить интернет по миру...
#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
😱1
"Персональные компьютеры никому не нужны."
Кен Олсен, основатель DEC, сказал это в 1977 году на конференции, став примером ошибочного прогноза в IT.
Биография
#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
Цифровой океан
20 февраля 1926 года родился предприниматель Кен Олсен
В 1986 году журнал Fortune назвал Кена самым успешным предпринимателем года. В 2011 году Олсен вошел в список лучших новаторов Массачусетского технологического института, опубликованный изданием Boston Globe к 150-летию университета
👍1
Работа с JsonElement и полезные советы в Gson
JsonElement, JsonObject, JsonArray — работа с JSON вручную
Библиотека Gson предоставляет классы JsonElement, JsonObject и JsonArray для ручного разбора и модификации JSON.
Основные классы:
JsonElement — базовый абстрактный класс, представляющий любой элемент JSON (объект, массив, примитив).
JsonObject — подкласс JsonElement, представляющий JSON-объект ({ ... }).
JsonArray — подкласс JsonElement, представляющий JSON-массив ([ ... ]).
Пример разбора JSON вручную:
Когда не знаешь точную структуру JSON
Если структура JSON может меняться, можно проверять наличие полей и их типы:
Добавление и изменение значений вручную
Преобразование между JsonElement и Java-объектами
Использование fromJson и toJsonTree
Из JSON в POJO (fromJson)
#Java #middle #Gson #JsonElement #JsonObject #JsonArray
JsonElement, JsonObject, JsonArray — работа с JSON вручную
Библиотека Gson предоставляет классы JsonElement, JsonObject и JsonArray для ручного разбора и модификации JSON.
Основные классы:
JsonElement — базовый абстрактный класс, представляющий любой элемент JSON (объект, массив, примитив).
JsonObject — подкласс JsonElement, представляющий JSON-объект ({ ... }).
JsonArray — подкласс JsonElement, представляющий JSON-массив ([ ... ]).
Пример разбора JSON вручную:
import com.google.gson.*;
import com.google.gson.JsonObject;
import com.google.gson.JsonArray;
public class ManualJsonParsing {
public static void main(String[] args) {
String json = """
{
"name": "John",
"age": 30,
"skills": ["Java", "Kotlin"],
"address": {
"city": "New York",
"zip": "10001"
}
}
""";
JsonElement rootElement = JsonParser.parseString(json);
// Проверяем, что корневой элемент — JsonObject
if (rootElement.isJsonObject()) {
JsonObject rootObject = rootElement.getAsJsonObject();
// Доступ к примитивным полям
String name = rootObject.get("name").getAsString();
int age = rootObject.get("age").getAsInt();
System.out.println("Name: " + name);
System.out.println("Age: " + age);
// Доступ к массиву
JsonArray skills = rootObject.get("skills").getAsJsonArray();
System.out.println("Skills:");
for (JsonElement skill : skills) {
System.out.println("- " + skill.getAsString());
}
// Доступ к вложенному объекту
JsonObject address = rootObject.get("address").getAsJsonObject();
String city = address.get("city").getAsString();
String zip = address.get("zip").getAsString();
System.out.println("City: " + city);
System.out.println("Zip: " + zip);
}
}
}
Когда не знаешь точную структуру JSON
Если структура JSON может меняться, можно проверять наличие полей и их типы:
JsonObject userObject = rootElement.getAsJsonObject();
// Проверка наличия поля
if (userObject.has("email")) {
String email = userObject.get("email").getAsString();
System.out.println("Email: " + email);
} else {
System.out.println("Email not provided");
}
// Проверка типа поля
JsonElement ageElement = userObject.get("age");
if (ageElement != null && !ageElement.isJsonNull()) {
if (ageElement.isJsonPrimitive() && ageElement.getAsJsonPrimitive().isNumber()) {
int age = ageElement.getAsInt();
System.out.println("Age: " + age);
} else {
System.out.println("Age is not a number");
}
}
Добавление и изменение значений вручную
JsonObject user = new JsonObject();
user.addProperty("name", "Alice"); // Добавление строки
user.addProperty("age", 25); // Добавление числа
user.addProperty("isActive", true); // Добавление булева значения
// Добавление массива
JsonArray languages = new JsonArray();
languages.add("Java");
languages.add("Python");
user.add("languages", languages);
// Добавление вложенного объекта
JsonObject address = new JsonObject();
address.addProperty("city", "London");
address.addProperty("country", "UK");
user.add("address", address);
user.addProperty("age", 26); // Перезаписываем age
System.out.println(new Gson().toJson(user));
Преобразование между JsonElement и Java-объектами
Использование fromJson и toJsonTree
Из JSON в POJO (fromJson)
Gson gson = new Gson();
String json = "{\"name\":\"Bob\",\"age\":40}";
// Прямое преобразование строки в объект
Person person = gson.fromJson(json, Person.class);
System.out.println(person.getName()); // Bob
// Если есть JsonElement, можно использовать его
JsonElement jsonElement = JsonParser.parseString(json);
Person personFromElement = gson.fromJson(jsonElement, Person.class);
#Java #middle #Gson #JsonElement #JsonObject #JsonArray
👍3
Преобразование между JsonElement и Java-объектами
Использование fromJson и toJsonTree
Из JSON в POJO (fromJson)
Из POJO в JsonElement (toJsonTree)
Как конвертировать JsonElement обратно в POJO
Полезные советы
Проверка isJsonNull() перед чтением значений
Обработка разных типов полей
Использование JsonParser для разбора строки
Создание сложных JSON структур
Эти методы позволяют гибко работать с JSON, когда точная структура неизвестна или требуется динамическая модификация данных.
#Java #middle #Gson #JsonElement #JsonObject #JsonArray
Использование fromJson и toJsonTree
Из JSON в POJO (fromJson)
Gson gson = new Gson();
String json = "{\"name\":\"Bob\",\"age\":40}";
// Прямое преобразование строки в объект
Person person = gson.fromJson(json, Person.class);
System.out.println(person.getName()); // Bob
// Если есть JsonElement, можно использовать его
JsonElement jsonElement = JsonParser.parseString(json);
Person personFromElement = gson.fromJson(jsonElement, Person.class);
Из POJO в JsonElement (toJsonTree)
Person person = new Person("Bob", 40);
JsonElement personElement = gson.toJsonTree(person);
// Теперь можно модифицировать JSON
if (personElement.isJsonObject()) {
JsonObject personObject = personElement.getAsJsonObject();
personObject.addProperty("email", "bob@example.com");
}
String modifiedJson = gson.toJson(personElement);
System.out.println(modifiedJson);
Как конвертировать JsonElement обратно в POJO
JsonObject userJson = new JsonObject();
userJson.addProperty("name", "Eve");
userJson.addProperty("age", 28);
// Преобразование JsonObject в POJO
Gson gson = new Gson();
Person person = gson.fromJson(userJson, Person.class);
System.out.println(person.getName()); // Eve
Полезные советы
Проверка isJsonNull() перед чтением значений
JsonElement element = jsonObject.get("optionalField");
if (element != null && !element.isJsonNull()) {
String value = element.getAsString();
}
Обработка разных типов полей
JsonElement dynamicField = jsonObject.get("dynamicField");
if (dynamicField.isJsonPrimitive()) {
JsonPrimitive primitive = dynamicField.getAsJsonPrimitive();
if (primitive.isString()) {
// Обработка строки
} else if (primitive.isNumber()) {
// Обработка числа
}
} else if (dynamicField.isJsonArray()) {
// Обработка массива
}
Использование JsonParser для разбора строки
JsonElement parsed = JsonParser.parseString(jsonString);
Создание сложных JSON структур
JsonObject response = new JsonObject();
JsonArray items = new JsonArray();
JsonObject item1 = new JsonObject();
item1.addProperty("id", 1);
item1.addProperty("name", "Item 1");
items.add(item1);
response.add("items", items);
response.addProperty("count", 1);
String jsonOutput = gson.toJson(response);
Эти методы позволяют гибко работать с JSON, когда точная структура неизвестна или требуется динамическая модификация данных.
#Java #middle #Gson #JsonElement #JsonObject #JsonArray
👍4
Продолжаем выбирать темы для разбора и голосовать за рассмотрение предложенных! 🤓
Голосуем за тему к рассмотрению в эти выходные!
Выбираем новую тему!
Что то как-то неактивно! Неужто нет вопросов??? Пишите, все что не понятно! Не стесняемся!✌️
Голосуем за тему к рассмотрению в эти выходные!
Выбираем новую тему!
Что то как-то неактивно! Неужто нет вопросов??? Пишите, все что не понятно! Не стесняемся!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Что выведет код?
#Tasks
public class Task230525 {
public static void main(String[] args) {
String str = " Hello ";
str = str.trim().replace('H', 'J').substring(1, 4);
System.out.println(str);
}
}
#Tasks
👍1
👍1
23 мая 1995 года Sun Microsystems официально представила язык Java на конференции SunWorld. И вот уже 30 лет как многие люди изучают этот язык, пишут на нем приложения, игры, бекенд для сайтов и финтехов!
По этому поводу Oracle запустил шестичасовой стрим про эволюцию Java! Смотрим!
Please open Telegram to view this post
VIEW IN TELEGRAM
🍾5👍1
Что такое класс и объект в 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