Java | Фишки и трюки
Открыть в Telegram
Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg Менеджер по рекламе: @shmyzna
Больше6 950
Подписчики
-124 часа
-137 дней
+1430 день
Архив постов
6 950
☕️Использование ScheduledExecutorService
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
public class MultithreadingExample {
public static void main(String[] args) {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
// Запланировать выполнение задачи через определенное время
ScheduledFuture<?> future = executor.schedule(() -> {
// Выполнить задачу
System.out.println("Выполняется отложенная задача");
}, 3, TimeUnit.SECONDS);
// Планирование регулярного выполнения задачи с определенной задержкой
executor.scheduleAtFixedRate(() -> {
// Выполнить регулярную задачу
System.out.println("Выполняется регулярная задача");
}, 0, 1, TimeUnit.SECONDS);
// Завершение работы с пулом потоков
executor.shutdown();
}
}
⚙️В данном примере мы используем ScheduledExecutorService для планирования отложенного выполнения задачи и регулярного выполнения задачи с определенной задержкой. ScheduledExecutorService позволяет управлять выполнением задач в установленное время и в регулярном режиме с учетом временных интервалов.6 950
☕️Использование метода computeIfAbsent() из интерфейса Map.
Этот метод предлагает удобный способ вычисления и вставки значений в карту, если они отсутствуют.
Пример кода с объяснением:
import java.util.HashMap;
import java.util.Map;
public class MapExample {
public static void main(String[] args) {
Map<String, Integer> wordLengths = new HashMap<>();
String word = "apple";
// Использование computeIfAbsent для вычисления и вставки значения в карту
wordLengths.computeIfAbsent(word, String::length);
// Вывод длины слова "apple", которая была вычислена и вставлена в карту
System.out.println("Длина слова apple: " + wordLengths.get(word));
}
}
🔒В этом примере мы используем метод computeIfAbsent() для карты wordLengths, чтобы вычислить и вставить длину слова "apple" в карту, если она отсутствует. Если значение уже присутствует, метод возвращает текущее значение.
Этот метод предоставляет удобный и эффективный способ добавления значений в карту, если они отсутствуют, что может помочь упростить код и избежать лишних проверок на наличие ключей в карте.6 950
3, 2 … Остановимся здесь.⤵️
Потому что 2 недель достаточно, чтобы познакомиться с основами Java и понять, подходит ли вам это направление.
Не обещаем, что будет легко, но интересно, полезно и недорого (всего 990 рублей!) – гарантируем.
Расклад такой: мы даем вам базу — больше 60 уроков, вебинары, лайвкодинг, а вы пишете собственную программу.
Если переживаете — не переживайте :) Рядом всегда будет наставник, готовый ответить на любой ваш вопрос.
⏰ Старт курса уже 6 марта, присоединяйтесь!
6 950
⌨️ Использование Java Flight Recorder (JFR) для профилирования приложений в реальном времени.
С помощью Java Flight Recorder можно профилировать работу приложения в реальном времени, собирать данные о производительности и возможных узких местах.
Он позволяет записывать и в последствии анализировать огромное количество метрик и событий, происходящих внутри JVM, что значительно облегчает анализ проблем.
Более того, при определённых настройках его накладные расходы настолько малы, что многие (включая Oracle) рекомендуют держать его постоянно включённым везде, в том числе в прод, чтобы в случае возникновения проблем сразу иметь полную картину происходившего с приложением.
JFR это мощный инструмент для оптимизации производительности Java-приложений.
6 950
⌨️ Десериализация сложных типов с помощью Gson
String json = """
{
"Orwell1": "War is Peace.",
"Orwell2": "Freedom is Slavery.",
"Orwell3": "Ignorance is Strength."
}
""";
Type mapType = new TypeToken<Map<String, String>>() { }.getType();
Map<String, String> map = new Gson().fromJson(json, mapType);
Gson или Google Gson — это библиотека Java с открытым исходным кодом, которая сериализует объекты Java в JSON (и десериализует их обратно в Java).6 950
🔔Использование JShell для быстрой проверки и экспериментов с кодом.
Пример кода:
$ jshell | Welcome to JShell -- Version 11.0.12 | For an introduction type: /help intro jshell> int result = 10 + 20; result ==> 30 jshell> String message = "Hello, World!"; message ==> "Hello, World!"✔️JShell позволяет быстро проводить эксперименты, проверять короткие фрагменты кода, тестировать API и проводить быстрые исследования. Он предоставляет удобную среду для интерактивной работы с Java кодом без необходимости создания и компиляции отдельных файлов.
6 950
Самый необычный канал про Java, подписывайся – https://t.me/java_secrets 📲
Будь в курсе последних тенденций, лучших практик и отраслевых секретов Java.
Канал Секреты Java поможет тебе улучшить свой путь разработки Java.
6 950
📚 Чистый код. Наименования и разделения
✅ Используй понятные и удобнопроизносимые имена для любых сущностей. Они должны описывать почему эта сущность существует, что она делает и как используется.
✅ Не бойся тратить время на выбор лучшего и понятного имени. Ты выиграешь в будущем при работе или чтении этого кода.
✅ Если название сущности не соответствует еë функционалу или по названию не понятно, что сущность делает, то еë надо переименовать в самое понятное название. Если этого сделать невозможно, то значит с еë функционалом что-то не так и еë надо рефакторить.
✅ Сущность, которая имеет в названии "And", "With" — нарушает Single Responsibility. Функционал такой сущности стоит разделять. Но этим правилом стоит иногда пренебрегать.
✅ Непонятные тексты, строки стоит выносить в переменные и давать им понятные названия.
✅ Названия методов должны содержать глагол, который описывает, что этот метод делает и ключевое слово с которым работает данный метод. Если в названии метода нет глагола, то эта сущность не должна быть методом или ему нужно дать правильное название.
✅ Нужно избегать одинаковых наименований для двух разных целей.
✅ Если сущность имеет схожее с другой сущностью название, то скорее всего их функционал очень сильно похож и их нужно объединить? Если нет, то их названия нужно менять так, чтобы они не были похожими.
✅ Если ты мысленно переименовываешь сущность, когда читаешь код, чтобы тебе было понятнее понимать её функционал, то переименуй её в это мысленное название.
✅ Выбери одно слово для одной концепции. Сложно будет понимать функционал, когда у тебя есть fetch, retrieve и get в названиях. Пусть лучше везде будет get.
✅ Длинное и понятное имя лучше, чем короткое, но непонятное.
6 950
Java Developer — мастхев для любого джависта
За ручку проведём тебя к первому офферу, расскажем о сложных вещах простыми словами и научим смеяться с айтишных мемов.
👉🏻 Подписывайся и прокачивай свои навыки
6 950
⌨️ Использование аннотаций @Deprecated для метаданных и управления поведением программы.
Пример кода:
@Deprecated
public class OldFeature {
// Код устаревшей функциональности
}
✔️В данном примере аннотация @Deprecated помечает класс как устаревший, что уведомляет других разработчиков о том, что следует избегать использования этой функциональности в своем коде. Использование аннотаций позволяет добавлять метаданные и контролировать поведение программы, что делает код более понятным и управляемым.6 950
⌨️ Использование Java Flight Recorder (JFR) для профилирования приложений в реальном времени.
С помощью Java Flight Recorder можно профилировать работу приложения в реальном времени, собирать данные о производительности и возможных узких местах.
Он позволяет записывать и в последствии анализировать огромное количество метрик и событий, происходящих внутри JVM, что значительно облегчает анализ проблем.
Более того, при определённых настройках его накладные расходы настолько малы, что многие (включая Oracle) рекомендуют держать его постоянно включённым везде, в том числе прод, чтобы в случае возникновения проблем сразу иметь полную картину происходившего с приложением.
JFR это мощный инструмент для оптимизации производительности Java-приложений.
6 950
✅ IT Insider - авторский канал, который станет твоим гидом по главным трендам IT и нейросетям!
👉 Почему стоит подписаться:
- инсайдерские новости IT
- полезные материалы и инструменты
- всё о нейросетях: промпты, модели и многое другое!
✅ Заходи прямо сейчас и получай эксклюзивные инсайды в числе первых!
6 950
⌨️ "Фабричный метод" (
Factory Method).
Этот паттерн позволяет создавать объекты без указания конкретных классов объектов. Вместо прямого создания объекта класса, создание объекта делегируется методу (фабричному методу), который может быть переопределен подклассом, чтобы изменить тип создаваемого объекта.
Пример реализации:
1️⃣Создадим интерфейс продукта, который будет производиться фабричным методом.
interface Product {
void use();
}
2️⃣Создадим реализации продуктов.
class ConcreteProductA implements Product {
@Override
public void use() {
System.out.println("Using ConcreteProductA");
}
}
class ConcreteProductB implements Product {
@Override
public void use() {
System.out.println("Using ConcreteProductB");
}
}
3️⃣Создадим абстрактный класс с фабричным методом.
abstract class Creator {
public abstract Product factoryMethod();
public void anOperation() {
Product product = factoryMethod();
product.use();
}
}
4️⃣Реализуем конкретные создатели для каждого типа продукта.
class ConcreteCreatorA extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductA();
}
}
class ConcreteCreatorB extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductB();
}
}
5️⃣Демонстрация использования.
public class FactoryMethodDemo {
public static void main(String[] args) {
Creator creatorA = new ConcreteCreatorA();
creatorA.anOperation(); // Использует ConcreteProductA
Creator creatorB = new ConcreteCreatorB();
creatorB.anOperation(); // Использует ConcreteProductB
}
}
В этом примере FactoryMethodDemo класс демонстрирует использование фабричного метода. Creator класс содержит фабричный метод factoryMethod(), который переопределяется в подклассах ConcreteCreatorA и ConcreteCreatorB для создания конкретных продуктов ConcreteProductA и ConcreteProductB соответственно.6 950
Присоединяйтесь к нашему бесплатному курсу и начните увлекательное путешествие в мир Java!
Изучайте основы, создавайте программы, разбирайтесь с методами и анализируйте ошибки в коде. Практика, упражнения и проверочные тесты помогут вам освоить навыки программирования.
🎓 Чему вы научитесь:
— Создавать программы с использованием основных конструкций языка.
— Разделять код на методы для повторного использования.
— Анализировать ошибки в коде с использованием отладочной печати.
💼 Включено в курс:
29 уроков (видео и/или текст), 35 упражнений в тренажере, 95 проверочных тестов + дополнительные материалы.
Вы с нами?😉
6 950
⌨️ Использование аннотации @Override.
Эта аннотация используется для явного указания того, что метод в подклассе переопределяет метод из суперкласса, что помогает избежать ошибок при написании кода.
Пример использования аннотации @Override:
class Animal {
public void makeSound() {
System.out.println("Some sound");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Bark");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.makeSound();
}
}
В приведенном примере метод makeSound() в классе Dog переопределяет метод с таким же именем из класса Animal. При использовании аннотации @Override компилятор проверяет, действительно ли метод переопределяет метод суперкласса, что помогает избежать ошибок, например, опечаток в названии метода. Если метод в подклассе не переопределяет метод суперкласса, компилятор выдаст ошибку.
📈Использование аннотации @Override повышает качество кода, делает его более читаемым и помогает избегать ошибок при работе с наследованием методов. Рекомендуется использовать эту аннотацию при переопределении методов в Java.6 950
👍 Крайне полезный канал про Java, подписывайся – https://t.me/+vSmDFIQQ-ts0MzYy
Канал Секреты Java расскажет о сложных вещах простыми словами и поможем улучшить свой путь в разработке Java.
Будь в курсе последних тенденций, лучших практик и отраслевых секретов Java.
6 950
⌨️ Использование
java.util.stream.Collectors для обработки коллекций
Код:
import java.util.List;
import java.util.stream.Collectors;
public class StreamCollectorsExample {
public static void main(String[] args) {
List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// Примеры использования Collectors
// Преобразование элементов коллекции в строку
String numbersAsString = numbers.stream()
.map(Object::toString)
.collect(Collectors.joining(", "));
System.out.println("Числа в виде строки: " + numbersAsString);
// Получение среднего значения всех элементов коллекции
double average = numbers.stream()
.collect(Collectors.averagingInt(Integer::intValue));
System.out.println("Среднее значение: " + average);
// Фильтрация элементов и сборка их в новую коллекцию
List<Integer> evenNumbers = numbers.stream()
.filter(num -> num % 2 == 0)
.collect(Collectors.toList());
System.out.println("Четные числа: " + evenNumbers);
// Группировка элементов по условию
System.out.println("Числа по остатку от деления на 3: " + numbers.stream()
.collect(Collectors.groupingBy(num -> num % 3)));
}
}
⚙️Этот пример демонстрирует использование класса Collectors из пакета java.util.stream для более эффективной обработки коллекций в Java. Методы класса Collectors предоставляют различные операции для сбора (collecting) элементов из потока данных в различные структуры данных или для выполнения агрегатных операций над элементами потока.6 950
⌨️ Использование
java.util.stream.Collectors для обработки коллекций
Код:
import java.util.List;
import java.util.stream.Collectors;
public class StreamCollectorsExample {
public static void main(String[] args) {
List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// Примеры использования Collectors
// Преобразование элементов коллекции в строку
String numbersAsString = numbers.stream()
.map(Object::toString)
.collect(Collectors.joining(", "));
System.out.println("Числа в виде строки: " + numbersAsString);
// Получение среднего значения всех элементов коллекции
double average = numbers.stream()
.collect(Collectors.averagingInt(Integer::intValue));
System.out.println("Среднее значение: " + average);
// Фильтрация элементов и сборка их в новую коллекцию
List<Integer> evenNumbers = numbers.stream()
.filter(num -> num % 2 == 0)
.collect(Collectors.toList());
System.out.println("Четные числа: " + evenNumbers);
// Группировка элементов по условию
System.out.println("Числа по остатку от деления на 3: " + numbers.stream()
.collect(Collectors.groupingBy(num -> num % 3)));
}
}
⚙️Этот пример демонстрирует использование класса Collectors из пакета java.util.stream для более эффективной обработки коллекций в Java. Методы класса Collectors предоставляют различные операции для сбора (collecting) элементов из потока данных в различные структуры данных или для выполнения агрегатных операций над элементами потока.
Уже доступно! Исследование Telegram 2025 — ключевые инсайты года 
