Easy Java
5.22K subscribers
311 photos
51 videos
463 links
Лучшие обучающие материалы и другие полезности для Java-разработчиков.

Сотрудничество: @heywan_n1

Цены: @heywan_media

Реклама на бирже: https://telega.in/c/+r8kkGSypBY84MmIy
Download Telegram
Вопрос с собеса

Можно ли перегрузить методы с varargs и как выбирается нужный?

Пример🔽
public class Main {
public static void main(String[] args) {
print(1); // ➔ Один int
print(1, 2); // ➔ Массив int
}

static void print(int a) {
System.out.println("Один int");
}

static void print(int... nums) {
System.out.println("Массив int");
}
}


Ответ🔽
Да, метод с varargs можно перегрузить. При этом, если аргументы точно подходят под метод без ..., вызывается он. Только если подходящего точного метода нет — выбирается varargs.

📌 Важно: если вызвать print() без аргументов, сработает print(int... nums). Это может вести к неоднозначности при наличии других перегрузок.


➡️ Easy Java | #Собес
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
Ответ:
Anonymous Quiz
45%
1
13%
2
36%
3
6%
4
👩‍💻 Что такое static-импорт в Java и зачем он нужен?

Static import позволяет импортировать статические члены классов (методы, поля, enum-константы) напрямую, без указания имени класса. Это делает код короче и читаемее, особенно при работе с утилитами и математикой.

Он полезен, когда ты часто используешь одни и те же статические методы или поля — например, Math.*, Assertions.*, Collectors.*.


• Упрощает вызовы утилит
• Повышает читаемость
• Удобен при написании тестов и DSL

⚡️ Пример:

import static java.lang.Math.*;

public class Main {
public static void main(String[] args) {
double r = 5;
double area = PI * pow(r, 2); // вместо Math.PI и Math.pow
System.out.println("Площадь круга: " + area);
}
}


👀 static-импорт особенно удобен в тестах (assertEquals, assertTrue), при работе с Collectors, TimeUnit, ChronoUnit, и других утилитах, где важно писать чистый и декларативный код.


➡️ Easy Java | #Теория
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
📖 DevOps Tutorials — Ansible: разворачиваем веб-приложение на виртуальном сервере

В этой статье мы научимся разворачивать Angular+Java веб-приложение на виртуальном сервере Ubuntu Linux с помощью Ansible.

Читать статью

➡️ Easy Java | #Статья
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔4
Такое нам надо

➡️ Easy Java | #Мемы
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰51
Вопрос с собеса

В каком порядке инициализируются поля и блоки в Java?

Пример🔽
public class InitDemo {
static {
System.out.println("Статический блок");
}

{
System.out.println("Нестатический блок");
}

int x = printX();

public InitDemo() {
System.out.println("Конструктор");
}

int printX() {
System.out.println("Инициализация x");
return 10;
}

public static void main(String[] args) {
new InitDemo();
}
}


Ответ🔽
Порядок инициализации:

Статические поля и статические блоки — один раз при первом обращении к классу

При создании объекта: сначала инициализируются поля в порядке объявления, затем выполняются нестатические блоки, и только потом вызывается конструктор

📌 Это важно при использовании зависимых полей, шаблонов "инициализация-через-блок", и при создании сложных объектов с логикой в полях.


➡️ Easy Java | #Собес
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43
Please open Telegram to view this post
VIEW IN TELEGRAM
Ответ:
Anonymous Quiz
4%
1
28%
2
64%
3
4%
4
👩‍💻 Что такое enum с логикой в Java и зачем это нужно?

В Java enum — это не просто набор констант. Это полноценные классы, которые могут содержать поля, методы и даже переопределять поведение для каждой константы.

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


• Позволяет добавить поведение к enum
• Заменяет switch-логику внутри самого enum
• Делает код чище и расширяемее

⚡️ Пример:

enum Operation {
PLUS {
public int apply(int a, int b) { return a + b; }
},
MINUS {
public int apply(int a, int b) { return a - b; }
};

public abstract int apply(int a, int b);
}

public class Main {
public static void main(String[] args) {
int result = Operation.PLUS.apply(3, 5);
System.out.println(result); // ➔ 8
}
}


👀 Такой enum особенно полезен, когда у тебя есть ограниченное количество вариантов с разным поведением — например, арифметические операции, роли пользователей, состояния задач и др.


➡️ Easy Java | #Теория
Please open Telegram to view this post
VIEW IN TELEGRAM
👍105🔥5
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁174🥰1
Вопрос с собеса

Что произойдёт, если в catch-блоке снова выбросить исключение?

Пример🔽
public class Main {
public static void main(String[] args) {
try {
risky();
} catch (Exception e) {
System.out.println("Обработка в main: " + e.getMessage());
}
}

static void risky() {
try {
throw new RuntimeException("Ошибка в try");
} catch (RuntimeException e) {
System.out.println("Поймано: " + e.getMessage());
throw new IllegalStateException("Повторно выброшено");
}
}
}


Ответ🔽
Если в блоке catch выбросить новое исключение, предыдущее "теряется", и наружу выйдет только то, что выбросили повторно.

📌 Чтобы сохранить оригинальное исключение, его можно передать как cause:
throw new IllegalStateException("...", e);

Это важно для правильной диагностики и трассировки ошибок в продакшене


➡️ Easy Java | #Собес
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥4👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
Ответ:
Anonymous Quiz
4%
1
85%
2
7%
3
3%
4
👩‍💻 Что такое ключевое слово transient в Java и зачем оно нужно?

transient — это модификатор, который используется для исключения поля из сериализации. Если объект сериализуется (например, в файл или по сети), поля с transient не будут сохранены.

Это полезно для чувствительных данных (например, паролей), временных кэшей или зависимостей, которые не нужно сохранять и восстанавливать.


• Исключает поле из сериализации
• Помогает защитить конфиденциальные данные
• Уменьшает размер сериализованных объектов

⚡️ Пример:

import java.io.*;

class User implements Serializable {
String name;
transient String password;

User(String name, String password) {
this.name = name;
this.password = password;
}
}

public class Main {
public static void main(String[] args) throws Exception {
User user = new User("admin", "12345");

// Сериализация
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("user.ser"))) {
out.writeObject(user);
}

// Десериализация
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("user.ser"))) {
User loaded = (User) in.readObject();
System.out.println("Name: " + loaded.name); // ➔ admin
System.out.println("Password: " + loaded.password); // ➔ null
}
}
}


👀 transient особенно полезен в ситуациях, когда часть данных не должна сохраняться между сессиями — будь то безопасность, производительность или структура бизнес-логики.


➡️ Easy Java | #Теория
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73
Please open Telegram to view this post
VIEW IN TELEGRAM