Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3
static. Он не имеет доступа к нестатическим полям и методам внешнего класса без создания его экземпляра. Такой класс может быть использован без создания объекта внешнего класса.
class Outer {
static class StaticInner {
// Статический внутренний класс
}
}
Нестатический внутренний класс имеет доступ ко всем полям и методам внешнего класса. Для его создания требуется экземпляр внешнего класса.
class Outer {
class NonStaticInner {
// Нестатический внутренний класс
}
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤4
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤4
public enum Day {
// Определение констант перечисления
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
public class EnumExample {
public static void main(String[] args) {
Day today = Day.MONDAY;
System.out.println("Today is: " + today);
}
}
Перечисления помогают избежать ошибок, связанных с использованием "магических" чисел или строк.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥2
Future используется для выполнения задач в отдельных потоках, что позволяет избежать блокировок основного потока.
ExecutorService executor = Executors.newFixedThreadPool(2);
Future<Integer> future = executor.submit(() -> {
// Долговременная задача или вычисление
Thread.sleep(2000);
return 42;
});
try {
// Ожидание результата, если задача завершилась
Integer result = future.get(); // может выбросить InterruptedException или ExecutionException
System.out.println(result);
} catch (InterruptedException | ExecutionException e) {
// Обработка исключений
} finally {
executor.shutdown();
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥2
Ключевые аспекты JMM:
- Happens-before: Отношение, гарантирующее, что одна операция видна другой.
- Volatile: Переменные с этим модификатором всегда читаются из основной памяти, а не из кэша потока.
- Synchronized: Блоки и методы с этим ключевым словом обеспечивают взаимное исключение и видимость изменений.
class Example {
private volatile boolean flag = false;
public void toggleFlag() {
flag = !flag; // Изменение видно всем потокам
}
}
В этом примере
volatile гарантирует, что изменения flag будут видны всем потокам сразу. JMM критична для написания корректных многопоточных приложений.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
1. Синхронизация:
Hashtable потокобезопасен, все его методы синхронизированы. HashMap не потокобезопасен, но работает быстрее в однопоточных сценариях. Для многопоточности можно использовать Collections.synchronizedMap или ConcurrentHashMap.2. Null-значения:
HashMap позволяет использовать null как ключ и значение. Hashtable выбрасывает NullPointerException при попытке добавить null.3. Наследование:
Hashtable — устаревший класс, появился в Java 1.0. HashMap — часть Java Collections Framework, появился в Java 1.2.
// Пример использования HashMap
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("key", null); // Работает
// Пример использования Hashtable
Hashtable<String, Integer> hashtable = new Hashtable<>();
hashtable.put("key", null); // NullPointerException
HashMap предпочтителен в большинстве случаев из-за производительности и гибкости. Hashtable используется редко, в основном в legacy-коде.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
Spring поддерживает три основных типа инъекций:
1. Constructor Injection — зависимости передаются через конструктор.
2. Setter Injection — зависимости устанавливаются через setter-методы.
3. Field Injection — зависимости внедряются напрямую в поля класса с помощью аннотаций.
Пример:
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired // Constructor Injection
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
Конструкторное внедрение рекомендуется как наиболее предпочтительный способ, так как оно обеспечивает неизменяемость и упрощает тестирование.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3
new используется для создания нового объекта. При вызове new выделяется память для объекта, вызывается конструктор класса для инициализации этого объекта, и возвращается ссылка на созданный объект.
ClassName obj = new ClassName();
В данном примере
new ClassName() создает объект типа ClassName. Конструктор ClassName() вызывается для инициализации объекта, а ссылка на этот объект присваивается переменной obj.Оператор
new также используется для создания массивов:
int[] arr = new int[10];
Здесь создается массив из 10 элементов типа
int, и ссылка на этот массив присваивается переменной arr.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
Comparator<String> lengthComparator = (s1, s2) -> s1.length() - s2.length();
Здесь создае
тся Comparator, который сравнивает строки по их длине. Лямбда-выражение принимает две строки и возвращает разницу их длин.
Comparator часто используется в методах сортировки:
List<String> list = Arrays.asList("apple", "banana", "cherry");
list.sort(lengthComparator);
В этом примере список строк сортируется по длине с использованием созданного
Comparator.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
public void divide(int a, int b) {
if (b == 0) {
throw new IllegalArgumentException("Divisor cannot be zero");
}
System.out.println(a / b);
}
В примере выбрасывается RuntimeException, если делитель равен нулю. Такие исключения обычно указывают на ошибки в логике программы.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤1
Java собеседования
👍7❤1
void, если они не возвращают значение, или с указанием типа возвращаемого значения.
int add(int a, int b) {
return a + b;
}
Функции могут принимать параметры и возвращать результат. Они используются для организации кода, устранения дублирования и улучшения читаемости.
void printMessage(String message) {
System.out.println(message);
}
Функции могут быть статическими, если принадлежат классу, а не экземпляру, и вызываться без создания объекта.
class MathUtils {
static int multiply(int a, int b) {
return a * b;
}
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🤔1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤1