Please open Telegram to view this post
VIEW IN TELEGRAM
😁28😭12
Можно ли вызвать
return изнутри try и при этом выполнить finally?Пример
public class Main {
public static void main(String[] args) {
System.out.println(test()); // ➔ Выполнен finally ➔ 5
}
static int test() {
try {
return 5;
} finally {
System.out.println("Выполнен finally");
}
}
}Ответ
Да, блок finally всегда выполняется, даже если в try есть return.
Это гарантирует, что важные действия (например, закрытие ресурсов) не будут пропущены.
📌 Даже при return, break, continue или выбрасывании исключения — finally обязательно сработает.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍9
try-with-resources — это конструкция, которая автоматически закрывает ресурсы (например, файлы, потоки), когда они больше не нужны. Она работает с любыми объектами, реализующими интерфейс
AutoCloseable.Не нужно вручную вызывать close() — Java сама закроет ресурс даже при исключении. Это делает код чище и безопаснее.
• Автоматически закрывает ресурсы
• Защищает от утечек памяти
• Упрощает работу с I/O и JDBC
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) {
System.out.println(reader.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
}
👀 try-with-resources особенно полезен при работе с файлами, сетевыми соединениями, базами данных и любыми ресурсами, которые нужно явно закрывать.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥4
Когда
java -jar цинично игнорирует ваш -cp, хочется грустить, но спокойствие, сегодня рассмотрим, почему так происходит и как это обойти.Please open Telegram to view this post
VIEW IN TELEGRAM
🤔3
❤10
Please open Telegram to view this post
VIEW IN TELEGRAM
👍27😁15❤5🤔3🤣1😭1
Что произойдёт, если в конструкторе выбросить исключение?
Пример
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