Java Learning
18.5K 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
🤔 Как это работает? — 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
Что будет выведено при выполнении кода?

Пояснение
⬇️
Переменная counter является статической, поэтому она общая для всех экземпляров класса Test. Каждый раз при создании нового объекта конструктора Test значение counter увеличивается. После создания трёх объектов значение переменной counter будет равно 3.


Java Learning 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
👍12