SoftReference — это тип ссылки, который позволяет объекту быть удалённым сборщиком мусора, если в системе заканчивается память, но до тех пор он остаётся доступным. Это полезно для построения умных кэшей, которые не мешают работе JVM.
В отличие от обычной ссылки, SoftReference не мешает сбору мусора, и в отличие от WeakReference, она удаляется только при нехватке памяти.
• Идеальна для кэширования больших объектов
• Помогает избежать OutOfMemoryError
• Учитывает приоритет: сначала удаляются weak, потом soft
import java.lang.ref.SoftReference;
public class Main {
public static void main(String[] args) {
SoftReference<byte[]> cache = new SoftReference<>(new byte[10 * 1024 * 1024]); // 10MB
byte[] data = cache.get();
if (data != null) {
System.out.println("Кэш доступен");
} else {
System.out.println("Кэш удалён сборщиком мусора");
}
}
}
👀 SoftReference особенно полезна в ситуациях, где нужно хранить тяжёлые объекты (например, образы, данные из БД или сжатие), но не жертвовать стабильностью приложения при нехватке памяти.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😭12
В каком порядке вызываются конструкторы при наследовании в Java?
Пример
class Parent {
Parent() {
System.out.println("Конструктор родителя");
}
}
class Child extends Parent {
Child() {
System.out.println("Конструктор потомка");
}
}
public class Main {
public static void main(String[] args) {
new Child();
}
}Ответ
При создании объекта дочернего класса сначала вызывается конструктор родителя, а затем — конструкция потомка. Это гарантирует, что базовая часть объекта будет инициализирована до расширений.
📌 Даже если в конструкторе дочернего класса нет явного вызова super(), он вставляется компилятором автоматически
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
В Java можно реализовать шаблон "Singleton" с помощью enum. Это считается самым безопасным и лаконичным способом создания синглтона, так как гарантирует:
🟢 отсутствие повторного создания🟢 защиту от сериализации и reflection-атак🟢 потокобезопасность без дополнительного кода
• Простой синтаксис
• Безопасность на уровне JVM
• Гарантированная единственность экземпляра
public enum AppConfig {
INSTANCE;
private final String baseUrl = "https://example.com";
public String getBaseUrl() {
return baseUrl;
}
}
public class Main {
public static void main(String[] args) {
System.out.println(AppConfig.INSTANCE.getBaseUrl()); // ➔ https://example.com
}
}👀 enum-синглтон особенно полезен для конфигураций, логгеров, глобальных менеджеров ресурсов и других классов, где нужен один и только один экземпляр во всём приложении.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰10❤4
Что делает instanceof и как работает Pattern Matching в Java?
Пример
public class Main {
public static void main(String[] args) {
Object obj = "Hello, world!";
if (obj instanceof String str) {
System.out.println("Длина строки: " + str.length()); // ➔ 13
}
}
}Ответ
Раньше instanceof только проверял тип, но с Pattern Matching можно одновременно проверить и привести объект к нужному типу — безопасно и без дополнительного кастинга.
📌 Это делает код короче и безопаснее, особенно при работе с объектами неизвестного типа. Можно применять в if, switch, и других конструкциях
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7
Optional — это контейнер-обёртка, предназначенный для работы с потенциально null-значениями. Он помогает явно выражать возможность отсутствия значения и избегать NullPointerException.• Упрощает читаемость кода
• Избавляет от if (x != null)
• Поддерживает декларативный стиль (map, filter, orElse)
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Optional<String> name = Optional.ofNullable(getName());
name.ifPresentOrElse(
n -> System.out.println("Привет, " + n),
() -> System.out.println("Имя не указано")
);
}
static String getName() {
return Math.random() > 0.5 ? "Alice" : null;
}
}
👀 Optional особенно полезен в API-методах, где важно явно указать, что результат может отсутствовать — например, при поиске сущностей, чтении из конфигураций, или безопасной обработке данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣15🤔2
Зачем в Java используют модификатор final у классов?
Пример
final class UserService {
public void process() {
System.out.println("Обработка пользователя");
}
}
// class CustomService extends UserService {} // ❌ Ошибка: нельзя наследовать final-классОтвет
final у класса означает, что этот класс нельзя расширять (наследовать). Это часто используется, когда класс:
должен быть закрыт для модификации,
является частью критичной логики (например, безопасность),
или содержит деликатную реализацию, которую нельзя переопределять.
📌 Многие utility-классы в JDK (например, java.lang.Math, java.lang.String) сделаны final — чтобы избежать наследования и сохранить надёжность.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1