Java Learning
18.4K subscribers
1.62K photos
1 video
3 files
1K links
№ 5079899194

Обучающий канал по Java

Ссылка для друга - https://t.iss.one/+ZEYYht6-46w5MDM6

По всем вопросам @mascarov_valentin

Реклама на бирже - https://telega.in/c/Java_per_month
Download Telegram
⚙️ Collectors.toSet()

В Java метод Collectors.toSet() из Stream API позволяет собрать элементы потока в Set, автоматически убирая дубликаты.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2
⚙️ Map.replace()

Метод Map.replace() позволяет заменить значение, связанное с определённым ключом, если этот ключ уже существует в словаре. Это полезно для безопасного обновления данных.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
⚙️ CompletableFuture.supplyAsync()

В Java метод CompletableFuture.supplyAsync() позволяет выполнять асинхронные задачи в фоновом потоке, возвращая результат. Это удобно для выполнения длительных операций без блокировки основного потока.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🤔 Как это работает? — Java: Цикл for-each

В Java цикл for-each (или enhanced for loop) упрощает итерацию по коллекциям и массивам. Давайте посмотрим, как он работает.

➡️ Как это работает:

• numbers — это массив целых чисел.
В строке for (int number : numbers) переменная number последовательно принимает значения из массива numbers.
На каждой итерации выводится текущее значение number.

Развернутый аналог:
for (int i = 0; i < numbers.length; i++) {
System.out.println(numbers[i]);
}

1
2
3
4
5


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Антипаттерн недели: Забытая блокировка в многопоточном коде

Если использовать блокировки (synchronized) и забыть их освободить в случае исключения, можно легко привести к deadlock (взаимоблокировке).

Если во время выполнения блока synchronized возникает исключение, блокировка остаётся захваченной, что может заблокировать другие потоки навсегда.

✔️ Как исправить:

Используйте try-finally для гарантированного освобождения блокировки:
public class FixedExample {
private final Object lock = new Object();

public void performTask() {
synchronized (lock) {
try {
System.out.println("Задача выполняется...");
if (true) {
throw new RuntimeException("Ошибка!");
}
System.out.println("Задача завершена.");
} finally {
System.out.println("Блокировка освобождена.");
}
}
}

public static void main(String[] args) {
FixedExample example = new FixedExample();
example.performTask();
}
}


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
Напоминаю, что у нас есть свой чат, где вы можете задать свой вопрос
@Java_Learning_Chat
🎄2❤‍🔥1
⚙️ ThreadLocal

В Java класс ThreadLocal позволяет хранить переменные, привязанные к конкретному потоку. Каждый поток имеет свою копию переменной, что удобно для работы с многопоточностью, когда нужно избежать совместного доступа к данным.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤‍🔥1
Что будет выведено при выполнении кода?

Пояснение
⬇️
Массивы в Java передаются по ссылке. Метод modifyArray изменяет первый элемент массива на 42. Изменение сохраняется, потому что arr и numbers указывают на один и тот же массив.


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
👍7🎄4
⚙️ Stream.flatMap()

В Java метод Stream.flatMap() используется для преобразования каждого элемента потока в другой поток и «выпрямления» (объединения) этих потоков в один. Это полезно для работы со вложенными структурами данных, такими как списки списков.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
⚙️ Phaser

В Java класс Phaser из пакета java.util.concurrent является синхронизатором для управления фазами выполнения в многопоточной среде. Он позволяет координировать выполнение задач, разбитых на этапы (фазы), и является более гибкой альтернативой CountDownLatch и CyclicBarrier.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤔1
Вопрос на собеседовании

Как работает концепция method reference в Java и в каких случаях она может быть полезна?

Ответ ⬇️
Method reference — это сокращённая форма записи для лямбда-выражений, когда метод, передаваемый в лямбду, уже существует. Метод можно ссылаться через его имя, что делает код более читаемым и удобным.

Типы ссылок на методы:

Ссылка на статический метод
Ссылка на метод экземпляра
Ссылка на конструктор


Пример использования ⚙️
import java.util.Arrays;
import java.util.List;

public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

// Использование method reference для вывода элементов
names.forEach(System.out::println);

// Без использования method reference
names.forEach(name -> System.out.println(name));
}
}

В этом примере System.out::println является ссылкой на метод, заменяющей более громоздкое лямбда-выражение name -> System.out.println(name). Это улучшает читаемость и делает код компактнее.

Когда полезно использовать:

Когда у вас уже есть готовые методы для выполнения задачи.
Когда необходимо сделать код чище и понятнее.


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
⚙️ Stream.of()

Метод Stream.of() используется для создания потока (stream) из различных объектов или коллекций. Этот метод упрощает создание потоков и применяется для выполнения операций над данными в функциональном стиле.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
➡️ Интересный факт о языке: Локальные классы в методах

Локальные классы объявляются внутри методов и видны только в пределах этих методов. Они полезны для инкапсуляции вспомогательной логики, которая не нужна за пределами метода.

Как это работает:

Локальный класс объявляется внутри метода.
Имеет доступ к переменным метода, если они final или эффективно final.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4😱3
⚙️ Class.getDeclaredMethods()

Метод Class.getDeclaredMethods() позволяет получить массив всех методов класса, включая приватные, защищённые и публичные методы. Это полезно для рефлексии и анализа структуры классов во время выполнения программы.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7😁1
Что будет выведено при выполнении кода?

Пояснение
⬇️
Два потока вызывают increment() по 1000 раз каждый. Метод increment() синхронизирован, что предотвращает одновременный доступ. В итоге counter увеличивается на 2000 без гонок.


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
⚙️ String.intern()

Метод String.intern() в Java возвращает каноническое представление строки из пула строк (string pool). Если строка уже есть в пуле, возвращается ссылка на неё. Это позволяет экономить память и ускорять сравнение строк.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🎄1
⚙️ Устранение автобоксинга

Автобоксинг (преобразование примитивов в объекты) в Java приводит к накладным расходам в циклах. Для массивов чисел вместо коллекций, таких как ArrayList<Integer>, используйте примитивные массивы.

Проблема: Использование Integer приводит к накладным расходам на упаковку и распаковку значений.

✔️ Решение: Используйте массивы примитивов (int[]) вместо коллекций объектов.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2
⚙️ Class.forName()

Метод Class.forName() в Java используется для загрузки класса по его имени во время выполнения. Это полезно для рефлексии и динамической работы с классами, которые неизвестны на этапе компиляции.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1🎄1
⚙️ MethodHandles.publicLookup()

Метод MethodHandles.publicLookup() в Java предоставляет доступ к публичным методам и полям класса с использованием MethodHandle. Это мощный инструмент для выполнения операций рефлексии с высокой производительностью.

Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1😱1