uk
Feedback
Java | Фишки и трюки

Java | Фишки и трюки

Відкрити в Telegram

Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg Менеджер по рекламе: @shmyzna

Показати більше
6 954
Підписники
-124 години
-117 днів
+1330 день
Архів дописів
Что выведет код?
Anonymous voting

public class Quest {
    public static void main(String[] args) {
        int[][] tests = {{6, 5, 4, 3, 2, 1}, {1, 2},
                {1, 2, 3}, {1, 2, 3, 4}, {1}};
        int successCount = 0;
        try {
            int i = 0;
            while (true) {
                if (thirdElementIsThree(tests[i++]))
                    successCount++;
            }
        } catch (ArrayIndexOutOfBoundsException e) {
            
        }
        System.out.println(successCount);
    }

    private static boolean thirdElementIsThree(int[] a) {
        return a.length >= 3 & a[2] == 3;
    }
}

⌨️ Парсинг и форматирование дат с DateTimeFormatter DateTimeFormatter из пакета java.time — это удобный инструмент для форматирования и парсинга дат и времени. Он гибкий, лаконичный и поддерживает локализацию. 🔍 Форматирование даты:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class DateFormattingExample {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");

        String formattedDate = date.format(formatter);
        System.out.println("Formatted date: " + formattedDate); // Formatted date: 05-01-2025
    }
}
🔗 Парсинг строки в дату:

String dateString = "05-01-2025";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");

LocalDate date = LocalDate.parse(dateString, formatter);
System.out.println("Parsed date: " + date); // Parsed date: 2025-01-05
Предустановленные форматы: Для стандартных форматов можно использовать готовые константы: - DateTimeFormatter.ISO_DATE2025-01-05 - DateTimeFormatter.RFC_1123_DATE_TIMEFri, 20 Dec 2024 00:00:00 GMT 📌 Пример с локализацией:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class LocalizedDateTimeExample {
    public static void main(String[] args) {
        LocalDateTime dateTime = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE, dd MMMM yyyy", Locale.FRENCH);

        String formatted = dateTime.format(formatter);
        System.out.println(formatted); // dimanche, 05 janvier 2025
    }
}
💡 Когда использовать? 1️⃣ Для вывода дат в красивом формате. 2️⃣ Для парсинга пользовательского ввода. 3️⃣ В приложениях с поддержкой нескольких языков. #Java #DateTimeFormatter

Онлайн-курс «Java-разработчик» от EdMe: 6-8 месяцев, гарантия получения работы, оплата обучения после трудоустройства Образов
Онлайн-курс «Java-разработчик» от EdMe: 6-8 месяцев, гарантия получения работы, оплата обучения после трудоустройства Образовательный проект EdMe открывает набор на курс по Java-разработке, который стартует в январе. Новый год — идеальный момент, чтобы выполнить обещания себе и сделать шаг к новой профессии! Обучение построено на менторстве и направлено на комплексную подготовку к трудоустройству. Программа подойдет для начинающих и тех, кто хочет улучшить свои навыки. За 6-8 месяцев вы сможете достичь уровня middle, для этого нужно уделять обучению от 20 часов в неделю. Вы будете взаимодействовать с опытным разработчиком, который объяснит, что нужно учить и как это делать, а также чего избегать, чтобы быстрее освоить необходимые навыки и получить оффер. Ментор будет направлять вас, советовать, как решать технические вопросы, и помогать готовиться к собеседованиям. Плюсы курса:Гарантированное трудоустройство с зарплатой от 140 000 рублей. ➕Оплата после выхода на работу: вы платите только 20% от зарплаты в течение 18 месяцев. ➕Карьерная поддержка даже после окончания курса. ➕Если по каким-то причинам вы не сможете завершить обучение, это можно сделать без оплаты. Во время обучения вы будете использовать Jira, Confluence, Bitbucket, GitLab – те самые системы, которые станут вашими рабочими инструментами в IT-компаниях. Программа курса: ▪️Основы Java: Java Core, List, JDBC, Hibernate, Spring (Core, MVC, Security), Spring Boot, Git ▪️Проект ▪️Подготовка к собеседованиям (составление резюме, прохождение тестовых собеседований) ▪️Прохождение реальных собеседований Узнать подробности и записаться на курс «Java-разработчик» можно на EdMe.pro Отбор включает тестовое задание, которое под силу выполнить человеку без опыта, и собеседование. Реклама. ООО "БАКСЭТ", ИНН 4345115602. Erid 2VtzqvdvWcS

⌨️ DecimalFormat: сложные шаблоны для чисел DecimalFormat из пакета java.text — мощный инструмент для форматирования чисел в сложных шаблонах. Он поддерживает различные настройки, включая разделители, округление, количество знаков после запятой и даже локализацию. 🔍 Простой пример: форматирование числа с фиксированным количеством знаков после запятой.

import java.text.DecimalFormat;

public class DecimalFormatExample {
    public static void main(String[] args) {
        DecimalFormat df = new DecimalFormat("#.00");
        System.out.println(df.format(123.456)); // Вывод: 123.46
        System.out.println(df.format(78));      // Вывод: 78.00
    }
}
🔗 Ключевые символы шаблона: # — необязательный знак (только значащие цифры). 0 — обязательный знак (добавляются нули, если цифр меньше). , — разделитель тысяч. . — десятичный разделитель. 📌 Сложный пример: форматирование с тысячными разделителями и символами валюты.

DecimalFormat df = new DecimalFormat("¤#,##0.00");
System.out.println(df.format(1234567.89)); 
// Вывод: ₽1 234 567,89
🔍 Локализация: С помощью DecimalFormatSymbols можно изменить разделители и символы.

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;

DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.FRANCE);
symbols.setDecimalSeparator(',');
symbols.setGroupingSeparator('\'');
DecimalFormat df = new DecimalFormat("#,##0.00", symbols);
System.out.println(df.format(1234567.89)); // Вывод: 1'234'567,89
✨ Когда использовать? 1️⃣ Для форматирования чисел в финансовых и аналитических приложениях. 2️⃣ Когда требуется гибкость с шаблонами или поддержка локализации. 3️⃣ Для генерации отчетов или красивого вывода данных. #Java #DecimalFormat

⌨️ FileLock: блокировка файлов для безопасного доступа FileLock из java.nio.channels — это инструмент для предотвращения одновременного изменения файла несколькими процессами или потоками. Если ваше приложение работает с общими файлами, FileLock помогает избежать конфликтов. 🔍 Что нужно знать о FileLock? 1️⃣ Поддерживает эксклюзивные и разделяемые блокировки. 2️⃣ Может работать с любыми типами файлов: текстовыми, бинарными и т.д. 3️⃣ Совместим с каналами FileChannel. 📌 Пример использования FileLock:

import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;

public class FileLockExample {
    public static void main(String[] args) {
        try (RandomAccessFile file = new RandomAccessFile("example.txt", "rw");
             FileChannel channel = file.getChannel()) {

            // Устанавливаем блокировку
            FileLock lock = channel.lock();
            System.out.println("Файл заблокирован.");

            // Выполняем операции
            file.writeBytes("Добавляем данные, пока файл заблокирован...\n");

            // Освобождаем блокировку
            lock.release();
            System.out.println("Файл разблокирован.");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
🔗 Ключевые особенности: 1️⃣ Эксклюзивная блокировка: channel.lock() — блокирует файл для всех, кроме текущего процесса. 2️⃣ Разделяемая блокировка: channel.lock(start, size, true) — доступна только для чтения. 3️⃣ Блокировки не являются межпотоковыми; они работают на уровне процесса. ✨ Когда использовать? - Для работы с общими ресурсами в распределённых приложениях. - Для предотвращения одновременной записи в файл несколькими процессами. - Для контроля доступа к критически важным данным. 💡 Совет: Всегда освобождайте блокировку (lock.release()), чтобы другие процессы могли получить доступ к файлу. #Java #FileLock #nio

⌨️ Класс Phaser (из пакета java.util.concurrent) используется для координации потоков, которые выполняют этапы работы (phases). Он позволяет потокам синхронизироваться на каждом этапе, продолжая выполнение только тогда, когда все участвующие потоки завершили текущий этап. Рассмотрим пример, где несколько потоков выполняют 3 этапа работы:

import java.util.concurrent.Phaser;

public class PhaserExample {
    public static void main(String[] args) {
        // Создаем Phaser для 3 потоков (регистрация)
        Phaser phaser = new Phaser(3);

        // Запускаем 3 потока
        for (int i = 0; i < 3; i++) {
            new Thread(new Worker(phaser), "Поток-" + (i + 1)).start();
        }
    }
}

class Worker implements Runnable {
    private final Phaser phaser;

    public Worker(Phaser phaser) {
        this.phaser = phaser;
    }

    @Override
    public void run() {
        try {
            for (int phase = 1; phase <= 3; phase++) {
                System.out.println(Thread.currentThread().getName() + " выполняет этап " + phase);
                
                // Имитация работы
                Thread.sleep(1000);

                // Сообщаем о завершении этапа
                phaser.arriveAndAwaitAdvance();
            }
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}
Объяснение: 1️⃣ Создание Phaser: Phaser phaser = new Phaser(3); — регистрируем 3 участника. 2️⃣ Работа потоков: Каждый поток выполняет работу, моделируемую с помощью Thread.sleep(1000), и вызывает phaser.arriveAndAwaitAdvance() для синхронизации. 3️⃣ Синхронизация фаз: arriveAndAwaitAdvance() — сообщает о завершении текущей фазы и блокируется, пока другие участники не завершат фазу. 4️⃣ Количество фаз: Здесь 3 фазы, и каждый поток выполняет все три, прежде чем завершить выполнение. Пример вывода:
Поток-1 выполняет этап 1
Поток-2 выполняет этап 1
Поток-3 выполняет этап 1
Поток-1 выполняет этап 2
Поток-2 выполняет этап 2
Поток-3 выполняет этап 2
Поток-1 выполняет этап 3
Поток-2 выполняет этап 3
Поток-3 выполняет этап 3
Все потоки синхронизируются после завершения каждого этапа, прежде чем приступить к следующему. Phaser полезен для задач, где требуется циклическая барьерная синхронизация, например, в обработке нескольких этапов или итерациях вычислений. #java #Phaser

⌨️ Создание собственных Unchecked Exceptions В Java вы можете создавать свои собственные исключения, чтобы сделать код более читаемым и выразительным. Если ошибка относится к категории Unchecked Exceptions, ваш класс должен наследоваться от RuntimeException. 🔍 Зачем нужны Unchecked Exceptions? - Они используются для ошибок, которые не требуют явной обработки с помощью try-catch. - Примеры: NullPointerException, IllegalArgumentException. 📌 Пример создания Unchecked Exception:

// Определяем исключение
class InvalidAgeException extends RuntimeException {
    public InvalidAgeException(String message) {
        super(message);
    }
}

// Используем в коде
public class CustomUncheckedExample {
    public static void main(String[] args) {
        int age = -5;

        if (age < 0) {
            throw new InvalidAgeException("Возраст не может быть отрицательным: " + age);
        }
    }
}
🔗 Ключевые моменты: 1️⃣ Наследуйтесь от RuntimeException для создания Unchecked Exceptions. 2️⃣ Добавляйте понятное сообщение, чтобы упростить отладку. 3️⃣ Используйте, когда ошибка связана с некорректным использованием API или данных. ✨ Когда использовать? - Если ошибка относится к программной логике. - Когда обработка исключения должна быть необязательной. 💡 Совет: Используйте Unchecked Exceptions для сигнализации о проблемах, которые можно избежать с помощью правильного использования API. #Java #Exceptions #UncheckedExceptions

⌨️ Suppressed Exceptions в Java появились с введением механизма try-with-resources в Java 7. Они используются для того, чтобы не терять исключения, которые могут возникнуть при автоматическом закрытии ресурсов. Когда внутри блока try происходит исключение, а при закрытии ресурса (например, в методе close() интерфейса AutoCloseable) возникает другое исключение, это второе исключение считается подавленным и сохраняется в основном исключении. Таким образом, вы не теряете информацию о проблемах, возникших при закрытии ресурсов. Пример:

import java.io.*;

public class SuppressedExceptionsExample {
    public static void main(String[] args) {
        try (MyResource resource = new MyResource()) {
            throw new RuntimeException("Исключение в блоке try");
        } catch (Exception e) {
            System.out.println("Основное исключение: " + e.getMessage());
            for (Throwable suppressed : e.getSuppressed()) {
                System.out.println("Подавленное исключение: " + suppressed.getMessage());
            }
        }
    }
}

class MyResource implements AutoCloseable {
    @Override
    public void close() throws Exception {
        throw new Exception("Исключение при закрытии ресурса");
    }
}
Объяснение: 1️⃣ В блоке try выбрасывается исключение RuntimeException с сообщением "Исключение в блоке try". 2️⃣ Во время закрытия ресурса (метод close()), генерируется другое исключение с сообщением "Исключение при закрытии ресурса". 3️⃣ Исключение из close() добавляется в список подавленных исключений основного исключения. Вывод:
Основное исключение: Исключение в блоке try
Подавленное исключение: Исключение при закрытии ресурса
Этот механизм позволяет сохранять информацию о всех проблемах, которые возникли, включая те, что произошли при управлении ресурсами. #java #Suppressed

В России можно посещать бесплатные IT-мероприятия хоть каждый день: как оффлайн, так и онлайн. Чтобы не пропустить полезные —
В России можно посещать бесплатные IT-мероприятия хоть каждый день: как оффлайн, так и онлайн. Чтобы не пропустить полезные — сохраните канал @FreeItEvent. Анонсы вебинаров, хакатонов, конференций, мастер-классов и других событий в IT. Ивенты от гигантов индустрии и лучших специалистов в сфере IT. Всё публикуют здесь.

photo content

⌨️ StackTraceElement StackTraceElement — это класс, который предоставляет информацию о стеке вызовов во время исключения. Понимание его возможностей помогает лучше отлаживать код и искать причины ошибок. 🔍 Что можно узнать с помощью StackTraceElement? 1️⃣ Имя класса, где возникло исключение. 2️⃣ Имя метода, вызвавшего ошибку. 3️⃣ Имя файла и номер строки, где произошла ошибка. 📌 Пример использования:

public class StackTraceExample {
    public static void main(String[] args) {
        try {
            methodA();
        } catch (Exception e) {
            for (StackTraceElement element : e.getStackTrace()) {
                System.out.println("Class: " + element.getClassName());
                System.out.println("Method: " + element.getMethodName());
                System.out.println("Line: " + element.getLineNumber());
                System.out.println("File: " + element.getFileName());
                System.out.println("---");
            }
        }
    }

    static void methodA() {
        methodB();
    }

    static void methodB() {
        throw new RuntimeException("Test exception");
    }
}
🔗 Что будет на выходе? При возникновении исключения вы получите информацию о каждом уровне стека вызовов:
Class: StackTraceExample
Method: methodB
Line: 23
File: StackTraceExample.java
---
Class: StackTraceExample
Method: methodA
Line: 19
File: StackTraceExample.java
---
Class: StackTraceExample
Method: main
Line: 6
File: StackTraceExample.java
---
Зачем это изучать? 1️⃣ Быстрое выявление проблем в коде. 2️⃣ Удобная диагностика ошибок в логах. 3️⃣ Возможность точечно логировать критичные места. #Java #StackTraceElement

Что выведет код?
Anonymous voting

public class Quest {
    public static void main(String[] args) {
        System.out.println("a\".length() + \"b".length());
    }
}

⌨️ Optional.orElse() и Optional.orElseGet() Optional.orElseGet() — это метод, который позволяет задать значение по умолчанию, вызывая поставщик (Supplier) только тогда, когда Optional пуст. Если значение присутствует, возвращается оно. Если значение отсутствует, вызывается Supplier, который возвращает значение по умолчанию. 📌 Пример:

import java.util.Optional;

public class OptionalOrElseGetExample {
    public static void main(String[] args) {
        String defaultValue = "Default Value";

        // Пример с orElse
        System.out.println("Using orElse:");
        System.out.println(getValue().orElse(expensiveOperation(defaultValue)));

        // Пример с orElseGet
        System.out.println("Using orElseGet:");
        System.out.println(getValue().orElseGet(() -> expensiveOperation(defaultValue)));
    }

    private static Optional<String> getValue() {
        return Optional.empty(); // Эмулируем пустой Optional
    }

    private static String expensiveOperation(String input) {
        System.out.println("Executing expensive operation...");
        return input;
    }
}
🔗 Ключевая разница между orElse и orElseGet: ✔️orElse() всегда вычисляет значение по умолчанию, даже если оно не нужно. ✔️orElseGet() вызывает логику только при необходимости, что экономит ресурсы. 💡 Совет: Используйте orElseGet, если значение по умолчанию требует сложных вычислений или вызовов. Это сделает ваш код эффективнее. #Java #Optional #orElse #orElseGet

"В стране дефицит айтишников..." говорили они. А по факту по 1000 откликов на одну вакансию на HH•ru и ни одного собеса. Как
"В стране дефицит айтишников..." говорили они. А по факту по 1000 откликов на одну вакансию на HH•ru и ни одного собеса. Как быть? Подпишись на эти каналы и получай первым доступ к стажировкам и вакансиям в IT: Young & Junior - вакансии IT Вакансии для разработчиков, аналитиков и QA-специалистов с весьма привлекательными зарплатами. посмотреть вакансии >> Young Стажёр - стажировки ИТ Оплачиваемые стажировки для джунов из разных сфер. посмотреть стажировки >> БИГТЕХ - вакансии и стажировки Для тех кто хочет попробовать свои силы в реально больших компаниях. посмотреть вакансии >> Подписался? Ну теперь точно работодатели заметят тебя! Желаю успехов в поиске вкусного оффера.

⌨️ Base64: стандартные методы кодирования и декодирования Base64 — это способ представления данных в текстовом формате, который можно безопасно передавать через сеть и использовать в текстовых форматах. В Java для работы с Base64 используется встроенный класс java.util.Base64. 🔍 Кодирование строки в Base64:

import java.util.Base64;

public class Base64Example {
    public static void main(String[] args) {
        String original = "Hello, Java!";
        String encoded = Base64.getEncoder().encodeToString(original.getBytes());
        
        System.out.println("Encoded: " + encoded); // Вывод: SGVsbG8sIEphdmEh
    }
}
🔗 Декодирование строки из Base64:

String encoded = "SGVsbG8sIEphdmEh";
String decoded = new String(Base64.getDecoder().decode(encoded));
System.out.println("Decoded: " + decoded); // Вывод: Hello, Java!
Варианты кодировщиков: 1️⃣ Base64.getEncoder() — стандартный кодировщик. 2️⃣ Base64.getUrlEncoder() — для URL и имён файлов (без символов + и /). 3️⃣ Base64.getMimeEncoder() — для MIME-форматов (разбивает строки на блоки по 76 символов). 💡 Когда использовать? 1️⃣ При передаче данных в текстовом виде (например, JSON или бинарные файлы). 2️⃣ Для работы с авторизацией (например, токены в Basic Auth). 3️⃣ Взаимодействие с API, использующими кодировку Base64. #Java #Base64

Облако — это конструктор! The Art of Programming — подкаст об ​​инструментах, технике и разработке ПО. По следам конференции
Облако — это конструктор! The Art of Programming — подкаст об ​​инструментах, технике и разработке ПО. По следам конференции HighLoad 2024 записали новый выпуск, в котором обсуждаем индустрию публичных облаков. Вместе с Данилой Дюгуровым, CTO MTC Web Services, говорим о новостях индустрии, создании новых облачных платформ, потенциале рынка и принципах формирования топовых команд разработки. 🎧Слушайте The Art of Programming на всех популярных подкаст-площадках.

⌨️ Collectors.teeing(): две операции над одним потоком С появлением Java 12 Collectors.teeing() стал удобным инструментом для объединения двух независимых операций над потоком. Этот коллектор позволяет выполнять две разные операции над данными и объединять их результат с помощью функции-объединителя. 🔍 Как это работает? 1️⃣ Указываем два коллектора для операций. 2️⃣ Задаём функцию, которая объединит результаты этих операций. 📌 Пример: Найдём сумму и среднее списка чисел.

import java.util.List;
import java.util.stream.Collectors;

public class TeeingExample {
    public static void main(String[] args) {
        List<Integer> numbers = List.of(1, 2, 3, 4, 5);

        var result = numbers.stream().collect(
            Collectors.teeing(
                Collectors.summingInt(Integer::intValue), // Первая операция: сумма
                Collectors.averagingInt(Integer::intValue), // Вторая операция: среднее
                (sum, avg) -> "Sum: " + sum + ", Average: " + avg // Объединение результатов
            )
        );

        System.out.println(result); // Вывод: Sum: 15, Average: 3.0
    }
}
Это позволяет избавиться от многократного прохода по потоку, а код становится компактным и читаемым. ✨ Когда использовать? 1️⃣ Для выполнения нескольких независимых операций над данными потока. 2️⃣ Если нужно объединить результаты этих операций. 💡 Совет: Collectors.teeing() особенно полезен, когда результаты независимых операций логически связаны. Например, для расчёта статистики или агрегации данных. #Java #Streams #Collectors #teeing

Каждый ITшник получает от 250к Оставьте эту чушь для курсов, на которых дают обещания вместо реальных знаний. В 2025 году пол
Каждый ITшник получает от 250к Оставьте эту чушь для курсов, на которых дают обещания вместо реальных знаний. В 2025 году получить заветный оффер сможет только тот, у кого есть эти 10 мануалов: – Пошаговая road map по Java – Redis - 5 улучшений для твоего пет-проекта – Пошаговая RoadMap по Java – Мануал по Docker. Основные команды и концепции – Микросервисы. Вопросы с собеседований – Шпаргалка с горячими клавишами JetBrains IDE. Ускоришь работу в 10 раз – Шпаргалка по Kafka – Инструкция по работе с Git – Подробный гайд, как найти работу в IT без опыта – Подборка платформ с вакансиями для java-разработчиков Ребята из FAANG School собрали бесплатную библиотеку Java Junior с мега полезными материалами, которые помогут освоить сложные темы, упростить и ускорить работу, а также получить приглашение от IT-гигантов. Свежее пополнение - то, без чего не обойтись ни одному джуну - шпаргалка по основным командам SQL! Забрать можно по оранжевой кнопке. Доступ открыт всего на сутки - успевай.