en
Feedback
Библиотека Java разработчика

Библиотека Java разработчика

Open in Telegram

📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP

Show more

📈 Analytical overview of Telegram channel Библиотека Java разработчика

Channel Библиотека Java разработчика (@bookjava) in the Russian language segment is an active participant. Currently, the community unites 10 118 subscribers, ranking 11 683 in the Technologies & Applications category and 62 847 in the Russia region.

📊 Audience metrics and dynamics

Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 10 118 subscribers.

According to the latest data from 26 August, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -73 over the last 30 days and by -3 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 6.99%. Within the first 24 hours after publication, content typically collects 3.71% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 707 views. Within the first day, a publication typically gains 375 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 7.
  • Thematic interests: Content is focused on key topics such as string, интерфейс, строка, boot, api.

📝 Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
📚 Лайфхаки, приёмы и лучшие практики для Java-разработчиков. Всё, что ускорит код и прокачает навыки. Java, Spring, Maven, Hibernate. По всем вопросам @evgenycarter РКН clck.ru/3KoGeP

Thanks to the high frequency of updates (latest data received on 27 August, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

10 118
Subscribers
-324 hours
-187 days
-7330 days
Posts Archive
Когда лучше использовать record, а когда class в Java. Record vs Class в Java ☕️📦 С 2021-го в Java появилась новая зверушка - record. Сначала все радовались: "О, меньше кода, equals/hashCode/constructor сами пишутся!" 🎉 А потом пошли странные вопросы в код-ревью:
"А почему у тебя тут record, а не class?" "record же immutable, а ты тут мутируешь поле через рефлексию, ты что…"
Разберёмся, когда record - подарок, а когда - мина замедленного действия. Немного теории 📚 record в Java — это особый вид final-класса с: - Автоматическим конструктором по всем полям. - equals, hashCode и toString из коробки. - Неизменяемыми (final) полями. - Неявным private final для каждого компонента. Это всё звучит прекрасно, но у этого есть архитектурные последствия. Когда record - лучший выбор ✅ 1. DTO / данные без логики Когда объект нужен просто как "контейнер" для данных, особенно при обмене между сервисами.

   public record UserDto(String name, int age) {}
   
2. Иммутабельные объекты Нет сеттеров, нет сюрпризов. Многопоточка будет тебе благодарна ❤️. 3. Модели конфигураций Конфиг парсится один раз — и потом спокойно читается везде. 4. Key-объекты для Map/Set Так как equals и hashCode генерятся честно и по всем полям - отличная стабильная ключевая структура. Когда class лучше 🚫 1. Сложная логика внутри Если объект должен уметь менять своё состояние, record тебе мешает: поля final, сеттеров нет. 2. Наследование Record - всегда final. Забудь про расширение. 3. ORM (например, Hibernate) Многие ORM любят пустые конструкторы и сеттеры. С record они просто не подружатся (даже если будут пытаться через магию). 4. Сериализация с изменениями Если JSON-модель в будущем изменится, record будет ломаться при парсинге, потому что конструктор фиксирован. Хитрости и подводные камни ⚠️ - Можно добавлять методы в record.

  public record Point(int x, int y) {
      public double length() {
          return Math.sqrt(x*x + y*y);
      }
  }
  
- Поля можно менять через рефлексию (но не надо — это ломает смысл record). - Не стоит превращать record в «богатый объект» с кучей логики — это будет запутывать. Итог 💡 - Берём record, когда нужна простая, иммутабельная структура данных без лишней логики. - Берём class, когда есть сложное поведение, наследование, интеграция с фреймворками вроде Hibernate. record - это не замена class, а инструмент для конкретных задач. А вот если ты пишешь DTO и у тебя до сих пор class с геттерами/сеттерами, то, возможно, ты застрял в 2010-м 😏. 👉 @BookJava

⚙️ Микросервисы начинают тормозить под нагрузкой? 💡 Узнайте, как масштабировать и оптимизировать систему с помощью CQRS и Ev
⚙️ Микросервисы начинают тормозить под нагрузкой? 💡 Узнайте, как масштабировать и оптимизировать систему с помощью CQRS и Event Sourcing на .NET Aspire. На открытом вебинаре «Оптимизация микросервисов с CQRS и Event Sourcing на .NET Aspire» 19 августа в 20:00 МСК разберем: ◽️ Ограничения классических микросервисов при высокой нагрузке. ◽️ Принципы разделения команд и запросов (CQRS) и хранения истории через Event Sourcing. ◽️ Практическую реализацию: сервис заказов с «команда-обработчик» и хранением событий в MongoDB. ◽️ Конфигурацию проекций для чтения данных. ❗️ Вы освоите оркестрацию через .NET Aspire (API Gateway, Order Service, база событий), внедрите логирование и трейсинг через OpenTelemetry, а также протестируете создание заказа, обновление статуса и визуализацию потока событий. ➡️ Посетите открытый урок и получите скидку на большое обучение «C# ASP.NET Core разработчик»: https://vk.cc/cOz6s4 Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

В чем разница между перегрузкой метода и переопределением метода в Java? 🧠 Перегрузка метода (Method Overloading) Это когда в одном классе есть методы с одинаковым именем, но разными сигнатурами (количеством или типами параметров). * Компилятор выбирает метод на этапе compile-time. * Можно менять: * количество параметров * тип параметров * порядок параметров * Нельзя перегружать метод, меняя только возвращаемый тип. 💡 Пример:

public class MathUtil {
    public int sum(int a, int b) { return a + b; }
    public double sum(double a, double b) { return a + b; }
    public int sum(int a, int b, int c) { return a + b + c; }
}
🧠 Переопределение метода (Method Overriding) Это когда в классе-наследнике мы заново реализуем метод, который уже определён в родительском классе или интерфейсе. * Определяется на этапе runtime (динамический полиморфизм). * Сигнатура метода должна быть та же (имя, параметры, порядок, типы). * Возвращаемый тип может быть ковариантным (подтипом оригинального). * Доступ не может быть строже, чем у родительского метода. * Метод родителя должен быть public / protected (не private). * Для обязательности переопределения используют @Override. 💡 Пример:

class Animal {
    public void makeSound() {
        System.out.println("Some sound");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Woof!");
    }
}
👉 @BookJava

☕ Совет дня по Java: JDK vs JRE vs JVM 🔹 JVM (Java Virtual Machine) Машина, которая выполняет Java-байткод, обеспечивая крос
☕ Совет дня по Java: JDK vs JRE vs JVM 🔹 JVM (Java Virtual Machine) Машина, которая выполняет Java-байткод, обеспечивая кроссплатформенность. 🔹 JRE (Java Runtime Environment) Содержит JVM + необходимые библиотеки для запуска Java-приложений. 🔹 JDK (Java Development Kit) Всё, что нужно разработчику — JRE + компилятор + инструменты для написания, компиляции и отладки Java-кода. 👉 Если запускаешь Java-приложения → тебе нужен JRE 👉 Если разрабатываешь Java-приложения → тебе нужен JDK 👉 А выполняет всю тяжёлую работу всегда JVM. 👉 @BookJava

🚀 Хотите научиться интегрировать Apache Kafka и ClickHouse для эффективной обработки и анализа данных? 🚀 Присоединяйтесь к
🚀 Хотите научиться интегрировать Apache Kafka и ClickHouse для эффективной обработки и анализа данных? 🚀 Присоединяйтесь к открытому уроку 20 августа в 20:00 МСК! 📚 Мы разберём, как настроить потоковую передачу данных, обеспечить надёжность и производительность, а также оптимизировать хранение и запросы. Вы узнаете, как использовать нативные коннекторы и Kafka Connect для интеграции этих двух мощных инструментов. Мы покажем реальные кейсы, лучшие практики и как избежать частых ошибок при работе с Kafka и ClickHouse. Это знание поможет вам настроить эффективный pipeline и ускорить загрузку данных. Присоединяйтесь и получите скидку на курс «Apache Kafka»: https://vk.cc/cOz3C2 🎯 Не пропустите! Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Конструкторы в Java: виды, инициализация и примеры В Java конструктор — это специальный метод, который автоматически вызывается при создании нового объекта. Он заботится о том, чтобы сразу «обеспечить» объект всеми необходимыми начальным значениями - как Lego‑инструкция, превращающая вас в сразу работающего робота. Что важно знать о конструкторах: - Конструктор по умолчанию Создаётся автоматически, если вы не объявили ни одного конструктора. Не имеет параметров и не задаёт пользовательские значения - поля получают только значения по умолчанию. - Конструктор с параметрами Позволяет инициализировать объект сразу нужными данными:

  House myHouse = new House(2, "Синий", true);
  
В этом примере мы сразу получаем дом с двумя этажами, синим цветом и гаражом - благодаря конструктору House(...). - Конструктор копирования Создает новую копию существующего объекта со всеми его полями - полезно, если нужно сохранить исходное состояние или избежать его изменения. Перегрузка конструкторов - гибкость и удобство Можно объявить несколько конструкторов в классе с разными параметрами:

class Book {
    String title;
    String author;
    int year;

    // По умолчанию
    Book() {
        this.title = "Неизвестно";
        this.author = "Неизвестно";
        this.year = 0;
    }

    // Только с названием
    Book(String title) { /*...*/ }

    // Полная инициализация
    Book(String title, String author, int year) { /*...*/ }
}
Такой подход позволяет создавать объекты Book с разными уровнями наполненности в зависимости от ситуации. Ещё один пример - класс Person

class Person {
    String name;
    int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

Person person = new Person("Алексей", 30);
Получили объект person сразу с заданными именем и возрастом - без лишнего кода. - Конструктор = автоматическая инициализация объекта. - Виды: по умолчанию, с параметрами, копирующий. - Перегрузка - возможность гибко задавать разные способы создания объектов. - Это делает код чище, логичнее и безопаснее. 👉 @BookJava

Spring Debugger: Working With Dynamic Database Connections Just Got Simpler Туториал демонстрирует очень крутую фичу плагина Spring Debugger. При запуске Spring-приложения или тестов в режиме отладки этот плагин автоматически находит и регистрирует в секции DataSource подключения к БД, которые были подняты в Testcontainers. Далее с этим можно работать как со стандартными дата-сорсами: смотреть схему, данные, делать запросы и так далее. Это сильно упрощает жизнь при отладке подобных тестов. https://blog.jetbrains.com/idea/2025/07/spring-debugger-working-with-dynamic-database-connections-just-got-simpler/ 👉 @BookJava

🧠 Можно ли переопределить getClass() в Java? Нет, нельзя. Метод getClass() в java.lang.Object объявлен так: public final nat
🧠 Можно ли переопределить getClass() в Java? Нет, нельзя. Метод getClass() в java.lang.Object объявлен так:

public final native Class<?> getClass();
📌 Почему: - final — запрещает переопределение в наследниках. - native — реализован в JVM, а не на Java. - Гарантирует, что при вызове obj.getClass() всегда вернётся реальный класс объекта, без подмен и сюрпризов. 💡 Если хотите вернуть “свой” тип, делайте отдельный метод:

class MyClass {
    public String getTypeName() {
        return "CustomType";
    }
}
⚠️ Переопределяемый getClass() сломал бы рефлексию, сериализацию и кучу системных механизмов. Именно поэтому Java защищает его. 👉 @BookJava

Распространённые заблуждения«var делает Java динамически типизированным» Неверно: Java остаётся статически типизированным языком. Компилятор по‑прежнему проверяет типы на этапе компиляции. ❌ «var ухудшает производительность» Неверно: Никакого влияния на выполнение. Это всего лишь синтаксический сахар. ❌ «var снижает читаемость кода» Зависит: При правильном использовании — улучшает читаемость, убирая лишний шум. При чрезмерном — может сделать код менее понятным. Чек‑лист быстрой миграции [ ] Найдите многословные объявления переменных в кодовой базе [ ] Замените очевидные случаи на var (сложные дженерики, builders) [ ] Установите командные правила использования var [ ] Обновите процессы код‑ревью с учётом лучших практик применения var [ ] Используйте возможности IDE для проверки выведенных типов Итог Локальная типовая инференция с var — небольшое изменение, которое значительно улучшает читаемость кода и опыт разработчика. Речь не о том, чтобы писать меньше кода, а о том, чтобы писать более понятный и поддерживаемый код, избавляясь от избыточных объявлений типов. Начните использовать var уже сегодня — и сразу заметите, насколько чище станет ваш Java‑код! 👉@BookJava

💡Совет по Java №1: Прощай, многословные объявления переменных — здравствуй, var ! Java 8 vs Java 21 — Часть 1 Одно из самых заметных улучшений при переходе с Java 8 на современные версии — это введение локальной типовой инференции, более известной как ключевое слово var. Появившееся в Java 10, это нововведение устраняет избыточные объявления типов и делает код чище и читаемее. Проблема Java 8 В Java 8 приходилось явно указывать тип каждой локальной переменной, даже когда он был очевиден из контекста:

// Java 8 - Verbose and redundant
Map<String, List<Customer>> customersByCity = new HashMap<String, List<Customer>>();
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
Optional<Customer> customer = customerService.findById(123L);
Эта многословность становилась особенно болезненной при работе с: - сложными обобщёнными типами, - шаблонами Builder, - потоковыми операциями со сложными промежуточными типами. Решение в Java 21 С var компилятор автоматически выводит тип:

// Java 21 - Clean and concise
var customersByCity = new HashMap<String, List<Customer>>();
var names = Arrays.asList("Alice", "Bob", "Charlie");
var customer = customerService.findById(123L); 
Примеры из реальной практики 1. Работа с коллекциями

// Before (Java 8)
List<Map<String, Object>> configurations = new ArrayList<Map<String, Object>>();
Map<String, List<ValidationResult>> validationResults = new ConcurrentHashMap<String, List<ValidationResult>>();

// After (Java 21)
var configurations = new ArrayList<Map<String, Object>>();
var validationResults = new ConcurrentHashMap<String, List<ValidationResult>>(); 
2. Шаблоны проектирования

// Before (Java 8)
HttpURLConnection connection = (HttpURLConnection) new URL("https://api.example.com")
    .openConnection();

// After (Java 21)
var connection = (HttpURLConnection) new URL("https://api.example.com")
    .openConnection(); 
```Java

3. Потоковые операции

```Java
// Before (Java 8)
Stream<String> filteredNames = customers.stream()
    .map(Customer::getName)
    .filter(name -> name.startsWith("A"));

// After (Java 21)
var filteredNames = customers.stream()
    .map(Customer::getName)
    .filter(name -> name.startsWith("A")); 
Когда использовать var (лучшие практики) ✅ Хорошие случаи использования:

// Clear from initialization
var users = new ArrayList<User>();
var config = ConfigurationBuilder.create().build();
var response = httpClient.execute(request);

// With method calls that have descriptive names
var isValid = validator.validateEmail(email);
var totalAmount = calculator.computeTotal(items); 
❌ Избегайте использования, когда:

// Type is not obvious
var data = processData(); // What type is this?
var result = calculate(); // Unclear return type

// Primitives where explicitness helps
int count = 0; // Better than var count = 0;
boolean isActive = true; // Better than var isActive = true; 
Стратегия миграции Постепенный подход к внедрению: - Начните с очевидных случаев: сложные обобщённые типы, шаблоны Builder. - Сфокусируйтесь на читаемости: используйте var там, где он улучшает восприятие кода. - Поддерживайте единообразие: выработайте командные правила использования var. - Проводите ревью и рефакторинг: обновляйте существующий код в процессе регулярного сопровождения. Поддержка в IDE: Большинство современных IDE отлично работают с var: - IntelliJ IDEA: предлагает подсказки и отображает выведенные типы. - Eclipse: показывает информацию о типе при наведении курсора. - VS Code: расширения для Java поддерживают отображение выведенных типов. Влияние на производительность var — это исключительно функция времени компиляции, без какого‑либо накладного расхода во время выполнения. Сгенерированный байткод полностью идентичен коду с явно указанными типами. 👉@BookJava

⁉️ Хотите научиться строить масштабируемые и отказоустойчивые решения на Kafka? На открытом уроке «Архитектурные паттерны раб
⁉️ Хотите научиться строить масштабируемые и отказоустойчивые решения на Kafka? На открытом уроке «Архитектурные паттерны работы с Kafka: от простого к масштабируемому» 13 августа в 18:00 МСК мы разберем основные паттерны и архитектурные подходы для работы с Kafka в микросервисах. Вы освоите Event Sourcing и CQRS и узнаете, как правильно обрабатывать ошибки и гарантировать доставку сообщений. Этот урок откроет перед вами новые возможности: вы научитесь строить архитектуру для обработки больших потоков данных и получите опыт работы с реальными кейсами. ➡️ Присоединяйтесь и получите скидку на большой курс «Apache Kafka»: https://vk.cc/cOir4i Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

💡10 незаменимых советов и приёмов Java, которые должен знать каждый разработчик 1. Используйте улучшенный цикл for Улучшенный цикл for, появившийся в Java 5, позволяет лаконично и эффективно проходить по массивам и коллекциям. Вместо традиционного цикла с индексами можно итерироваться напрямую по элементам, что повышает читаемость кода и снижает вероятность ошибок выхода за пределы массива.

int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
 System.out.println(number);
}
2. Используйте дженерики (Generics) Дженерики позволяют создавать переиспользуемый код, работающий с разными типами данных. Они обеспечивают безопасность типов и избавляют от необходимости явного приведения типов. Результат — более надёжный и удобный для поддержки код.

List<String> names = new ArrayList<>();
names.add("John");
names.add("Jane");
String firstName = names.get(0);
3. Применяйте StringBuilder для работы со строками При конкатенации большого количества строк или частых изменениях строки класс StringBuilder работает эффективнее, чем оператор + или методы конкатенации. StringBuilder изменяем (mutable) и предоставляет удобные методы для работы со строками.

StringBuilder message = new StringBuilder("Hello");
message.append(" World");
message.insert(5, " Java");
String result = message.toString();
4. Понимайте управление памятью в Java Java автоматически управляет памятью через механизм сборщика мусора, но важно понимать, как создаются, используются и уничтожаются объекты. Грамотное управление памятью помогает избежать утечек и повышает производительность приложения. 5. Используйте неизменяемые классы (Immutable) Неизменяемые классы потокобезопасны и дают преимущества в кэшировании, работе с многопоточностью и повышении безопасности. Создавая неизменяемые классы, вы исключаете риск случайных изменений и обеспечиваете целостность данных. 6. Применяйте try-with-resources При работе с ресурсами, которые нужно закрывать (например, файлы или подключения к базе данных), конструкция try-with-resources гарантирует автоматическое закрытие ресурсов, даже если произойдут исключения. Это упрощает управление ресурсами и снижает риск утечек.

try (FileReader fileReader = new FileReader("data.txt");
 BufferedReader bufferedReader = new BufferedReader(fileReader)) {
 String line = bufferedReader.readLine();
 // Process the data
} catch (IOException e) {
 // Handle the exception
}
7. Используйте перечисления (enum) для констант Если у вас есть набор связанных констант, лучше использовать enum, а не простые переменные или целочисленные константы. Перечисления обеспечивают безопасность типов, улучшают читаемость кода и легко расширяются.

enum Days {
 MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
Days today = Days.MONDAY;
8. Оптимизируйте циклы с помощью break и continue Оператор break позволяет выйти из цикла досрочно, а continue — пропустить текущую итерацию и перейти к следующей. Грамотное использование этих операторов делает код более эффективным и читаемым.

for (int i = 1; i <= 10; i++) {
 if (i == 5) {
 break; // Exit the loop when i equals 5
 }
 if (i % 2 == 0) {
 continue; // Skip even numbers
 }
 System.out.println(i);
}
9. Используйте библиотеки и фреймворки В экосистеме Java есть огромное количество библиотек и фреймворков, которые упрощают разработку. Применяйте популярные решения вроде Apache Commons, Gson или Jackson для задач работы с файлами, JSON или базами данных. Это экономит время и избавляет от необходимости «изобретать велосипед». 10. Практикуйте грамотную обработку ошибок Обработка ошибок — ключ к созданию надёжного и поддерживаемого кода. Используйте механизмы исключений для корректного перехвата и обработки ошибок. Логируйте важные сообщения и давайте пользователям понятную обратную связь при возникновении ошибок. Это облегчает отладку и улучшает пользовательский опыт. 👉@BookJava

В чём разница между == и .equals() при сравнении строк? == сравнивает ссылки на объекты (адреса в памяти), а .equals() сравни
В чём разница между == и .equals() при сравнении строк? == сравнивает ссылки на объекты (адреса в памяти), а .equals() сравнивает содержимое строк. Для сравнения строк всегда используйте .equals(). Вот пример, иллюстрирующий разницу:

String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");
System.out.println(str1 == str2);       // true (один и тот же объект)
System.out.println(str1 == str3);       // false (разные объекты)
System.out.println(str1.equals(str2));  // true (одинаковое содержимое)
System.out.println(str1.equals(str3));  // true (одинаковое содержимое)
👉@BookJava

Какова цель ключевого слова static в Java? Ключевое слово static в Java используется для объявления членов (переменных, метод
Какова цель ключевого слова static в Java? Ключевое слово static в Java используется для объявления членов (переменных, методов, вложенных классов), которые принадлежат самому классу, а не его экземплярам. Объявление статических членов позволяет делиться данными между всеми экземплярами класса, создавать утилитарные методы, которые не требуют создания объекта, или определять ограничения. Например, в следующем классе BankAccount переменные totalAccounts и INTEREST_RATE являются статическими, поэтому они будут доступны только внутри самого класса.

public class BankAccount {
   private String accountHolder;
   private double balance;
   private static int totalAccounts = 0;
   private static final double INTEREST_RATE = 0.05;
  
  
   // The rest of the code here ...
}
👉@BookJava

⁉️👩‍💻Разрабатываете на Java, но проект на Spring превращается в черный ящик? Бины ведут себя непредсказуемо, конфигурация р
⁉️👩‍💻Разрабатываете на Java, но проект на Spring превращается в черный ящик? Бины ведут себя непредсказуемо, конфигурация разрастается, а ошибка в одном модуле рушит всю систему. Интервью на позицию Middle неудачно — не хватает уверенности в Spring. 🤝 Тем временем рынок требует специалистов, которые не просто знают Spring, а умеют строить продакшен-приложения с его помощью. Компании ищут разработчиков, которые понимают, как работают Spring Boot, Spring Security, Spring MVC и могут строить микросервисную архитектуру. ⚡️ На курсе «Разработчик на Spring Framework» мы закроем пробелы и дадим актуальные навыки. Практика на реальных кейсах, ревью заданий, тестовое собеседование — вы освоите Spring так, чтобы уверенно применять его в работе. ➡️ Пройдите вступительное тестирование и получите скидку на обучение: https://vk.cc/cO9GA3 🎁 Дарим промокод, который дает скидку на обучение - SRING7 Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

Как обрабатывать исключения в Java? Исключения в Java можно аккуратно обрабатывать с помощью блоков try-catch. В блоке try пи
Как обрабатывать исключения в Java? Исключения в Java можно аккуратно обрабатывать с помощью блоков try-catch. В блоке try пишется код, который может выбросить исключение, а в блоке catch — что нужно сделать, если это исключение произошло. Блок finally можно использовать для операций очистки, если в try-catch задействованы внешние ресурсы, такие как файловые менеджеры, соединения с базой данных и т.д. Вот пример кода, демонстрирующий обработку исключений в Java:

import java.io.FileReader;
import java.io.IOException;
public class ExceptionHandlingExample {
   public static void main(String[] args) {
       FileReader reader = null;
       try {
           reader = new FileReader("nonexistent.txt");
           // Code that might throw an exception
           int character = reader.read();
           System.out.println((char) character);
       } catch (IOException e) {
           // Handling the specific exception
           System.out.println("An error occurred while reading the file: " + e.getMessage());
       } finally {
           // Cleanup code that always executes
           if (reader != null) {
               try {
                   reader.close();
               } catch (IOException e) {
                   System.out.println("Error closing file: " + e.getMessage());
               }
           }
       }
   }
}
👉@BookJava

Совет 💡 Добавьте в JDBC URL свойство ApplicationName (зависит от БД, не в каждой БД оно есть!). Таким образом, в списке сесс
Совет 💡 Добавьте в JDBC URL свойство ApplicationName (зависит от БД, не в каждой БД оно есть!). Таким образом, в списке сессий вместо имени JDBC-драйвера будет отображаться имя набора. Это поможет при поиске неисправностей, когда несколько приложений подключаются к одной и той же БД. 👉@BookJava

🚀 Подборка Telegram каналов для программистов Системное администрирование, DevOps 📌 https://t.me/bash_srv Bash Советы https://t.me/win_sysadmin Системный Администратор Windows https://t.me/sysadmin_girl Девочка Сисадмин https://t.me/srv_admin_linux Админские угодья https://t.me/linux_srv Типичный Сисадмин https://t.me/devopslib Библиотека девопса | DevOps, SRE, Sysadmin https://t.me/linux_odmin Linux: Системный администратор https://t.me/devops_star DevOps Star (Звезда Девопса) https://t.me/i_linux Системный администратор https://t.me/linuxchmod Linux https://t.me/sys_adminos Системный Администратор https://t.me/tipsysdmin Типичный Сисадмин (фото железа, было/стало) https://t.me/sysadminof Книги для админов, полезные материалы https://t.me/i_odmin Все для системного администратора https://t.me/i_odmin_book Библиотека Системного Администратора https://t.me/i_odmin_chat Чат системных администраторов https://t.me/i_DevOps DevOps: Пишем о Docker, Kubernetes и др. https://t.me/sysadminoff Новости Линукс Linux 1C разработка 📌 https://t.me/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С https://t.me/DevLab1C 1С:Предприятие 8 https://t.me/razrab_1C 1C Разработчик https://t.me/buh1C_prog 1C Программист | Бухгалтерия и Учёт https://t.me/rabota1C_rus Вакансии для программистов 1С Программирование C++📌 https://t.me/cpp_lib Библиотека C/C++ разработчика https://t.me/cpp_knigi Книги для программистов C/C++ https://t.me/cpp_geek Учим C/C++ на примерах Программирование Python 📌 https://t.me/pythonofff Python академия. https://t.me/BookPython Библиотека Python разработчика https://t.me/python_real Python подборки на русском и английском https://t.me/python_360 Книги по Python Java разработка 📌 https://t.me/BookJava Библиотека Java разработчика https://t.me/java_360 Книги по Java Rus https://t.me/java_geek Учим Java на примерах GitHub Сообщество 📌 https://t.me/Githublib Интересное из GitHub Базы данных (Data Base) 📌 https://t.me/database_info Все про базы данных Мобильная разработка: iOS, Android 📌 https://t.me/developer_mobila Мобильная разработка https://t.me/kotlin_lib Подборки полезного материала по Kotlin Фронтенд разработка 📌 https://t.me/frontend_1 Подборки для frontend разработчиков https://t.me/frontend_sovet Frontend советы, примеры и практика! https://t.me/React_lib Подборки по React js и все что с ним связано Разработка игр 📌 https://t.me/game_devv Все о разработке игр Библиотеки 📌 https://t.me/book_for_dev Книги для программистов Rus https://t.me/programmist_of Книги по программированию https://t.me/proglb Библиотека программиста https://t.me/bfbook Книги для программистов БигДата, машинное обучение 📌 https://t.me/bigdata_1 Big Data, Machine Learning Программирование 📌 https://t.me/bookflow Лекции, видеоуроки, доклады с IT конференций https://t.me/rust_lib Полезный контент по программированию на Rust https://t.me/golang_lib Библиотека Go (Golang) разработчика https://t.me/itmozg Программисты, дизайнеры, новости из мира IT https://t.me/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻 https://t.me/nodejs_lib Подборки по Node js и все что с ним связано https://t.me/ruby_lib Библиотека Ruby программиста https://t.me/lifeproger Жизнь программиста. Авторский канал. QA, тестирование 📌 https://t.me/testlab_qa Библиотека тестировщика Шутки программистов 📌 https://t.me/itumor Шутки программистов Защита, взлом, безопасность 📌 https://t.me/thehaking Канал о кибербезопасности https://t.me/xakep_2 Хакер Free Книги, статьи для дизайнеров 📌 https://t.me/ux_web Статьи, книги для дизайнеров Математика 📌 https://t.me/Pomatematike Канал по математике https://t.me/phis_mat Обучающие видео, книги по Физике и Математике https://t.me/matgeoru Математика | Геометрия | Логика Excel лайфхак📌 https://t.me/Excel_lifehack https://t.me/mir_teh Мир технологий (Technology World) Вакансии 📌 https://t.me/sysadmin_rabota Системный Администратор https://t.me/progjob Вакансии в IT

🧠 Быстрый профилинг Java: -XX:+PrintCompilation Хотите понять, что JIT-компилятор делает с вашим кодом и где реально тратитс
🧠 Быстрый профилинг Java: -XX:+PrintCompilation Хотите понять, что JIT-компилятор делает с вашим кодом и где реально тратится время? Есть скрытая, но очень полезная фича JVM — флаг:

java -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompilation -jar app.jar
📌 Что даёт? JVM начнёт логировать все методы, которые JIT компилирует, и в какой момент. Вы увидите: - какие методы вызываются чаще всего (горячие точки); - какие инлайнятся и оптимизируются; - где есть неожиданные “узкие места”. 💡 Зачем это нужно? - Быстро найти кандидатов на оптимизацию; - Понять, почему приложение медленно стартует (компиляция тяжёлых методов); - Увидеть, какие части кода JIT не трогает (и, возможно, почему). ⚠️ Нюанс: это диагностический инструмент. На продакшене лучше использовать аккуратно (или дублировать трафик на стенд). 👉 Хочешь глубже? Смотри ещё -XX:+PrintInlining — покажет какие методы JVM решила инлайнить (и почему отказалась). Быстрый взгляд на JIT — и вы понимаете поведение кода куда глубже. 👉@BookJava

👩‍💻 31 июля стартует курс «Java-разработчик» от OTUS — это то, что нужно, если вы хотите успешно вкатиться в разработку в 2
👩‍💻 31 июля стартует курс «Java-разработчик» от OTUS — это то, что нужно, если вы хотите успешно вкатиться в разработку в 2025 🦾 Вас ждет огромное количество практики и реальные кейсы: настройка окружения, базовые алгоритмы, синтаксис Java, Spring и Docker. Мы покажем, почему диплом OTUS ценят HR в крупных компаниях. Если вы сисадмин, тестировщик, аналитик или просто хотите освоить программирование с нуля — этот курс для вас. Мы научим создавать серверные веб-приложения, работать с PostgreSQL, Kafka и Kubernetes, формировать портфолио и готовить резюме под Middle-Java-Dev. 🎁 Дарим промокод, который дает скидку на обучение - JAVA7 👉 Оставьте заявку и и присоединяйтесь к группе: https://vk.cc/cNTEMq Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576