Что произойдёт, если в конструкторе выбросить исключение?
Пример
public class Main {
public static void main(String[] args) {
try {
new User();
} catch (RuntimeException e) {
System.out.println("Исключение поймано: " + e.getMessage());
}
}
}
class User {
public User() {
System.out.println("Конструктор вызван");
throw new RuntimeException("Ошибка при создании объекта");
}
}Ответ
Если конструктор выбрасывает исключение, объект не будет создан. Сборщик мусора может вызвать finalize(), если он переопределён, но ссылку на объект получить невозможно.
📌 Это важно при работе с зависимостями, особенно если конструктор делает что-то кроме инициализации (например, открывает соединения или файлы).
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14🤯2
Please open Telegram to view this post
VIEW IN TELEGRAM
default-методы позволяют определять реализацию методов прямо в интерфейсах. Это решает проблему, когда нужно добавить новый метод в интерфейс, не ломая все его реализации.
С помощью default можно добавлять поведение без необходимости переписывать существующие классы.
• Позволяют расширять интерфейсы без потери совместимости
• Уменьшают дублирование кода
• Упрощают поддержку библиотек и API
interface Greeter {
default void greet() {
System.out.println("Hello from interface!");
}
}
public class Main implements Greeter {
public static void main(String[] args) {
new Main().greet(); // ➔ Hello from interface!
}
}👀 default-методы особенно полезны в больших проектах и библиотеках, где интерфейсы часто меняются и нужно обеспечить обратную совместимость без дублирования кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥4
Я собрал систему, которая сама читает статьи с Хабра, вытаскивает из них суть с помощью локальной LLM и ищет похожие по смыслу, а не по ключевым словам.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁31🔥4❤3
Можно ли перегрузить методы с
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). Это может вести к неоднозначности при наличии других перегрузок.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
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, и других утилитах, где важно писать чистый и декларативный код.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
В этой статье мы научимся разворачивать Angular+Java веб-приложение на виртуальном сервере Ubuntu Linux с помощью Ansible.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔4
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰5❤1
В каком порядке инициализируются поля и блоки в 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();
}
}Ответ
Порядок инициализации:
Статические поля и статические блоки — один раз при первом обращении к классу
При создании объекта: сначала инициализируются поля в порядке объявления, затем выполняются нестатические блоки, и только потом вызывается конструктор
📌 Это важно при использовании зависимых полей, шаблонов "инициализация-через-блок", и при создании сложных объектов с логикой в полях.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
В 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 особенно полезен, когда у тебя есть ограниченное количество вариантов с разным поведением — например, арифметические операции, роли пользователей, состояния задач и др.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤5🔥5
Please open Telegram to view this post
VIEW IN TELEGRAM