🤔 Чем отличается композиция от наследования?
- Наследование — это отношение "является", позволяет использовать поведение родительского класса.
- Композиция — это отношение "имеет", позволяет встраивать поведение других объектов и менять их без изменения иерархии. Композиция более гибкая и предпочтительна при проектировании.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- Наследование — это отношение "является", позволяет использовать поведение родительского класса.
- Композиция — это отношение "имеет", позволяет встраивать поведение других объектов и менять их без изменения иерархии. Композиция более гибкая и предпочтительна при проектировании.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍4🔥1💊1
🤔 Чем отличаются методы Thread.sleep() и Thread.yield()?
Методы
🚩Thread.sleep()
Метод
🚩Как это работает?
Поток уходит в состояние "ожидания" (TIMED_WAITING).
Операционная система не даёт ему процессорное время в течение заданного времени.
После завершения паузы поток снова становится готовым к выполнению (RUNNABLE).
Результат
🚩Thread.yield()
Метод
🚩Как это работает?
Текущий поток передаёт управление планировщику (scheduler).
Если есть другие потоки с таким же или более высоким приоритетом, они получат процессорное время.
Если таких потоков нет, то текущий поток продолжит выполняться.
Результат (примерный, зависит от планировщика ОС)
Ставь 👍 и забирай 📚 Базу знаний
Методы
Thread.sleep() и Thread.yield() в Java используются для управления потоком, но работают по-разному. 🚩Thread.sleep()
Метод
Thread.sleep(milliseconds) приостанавливает выполнение текущего потока на указанное время. 🚩Как это работает?
Поток уходит в состояние "ожидания" (TIMED_WAITING).
Операционная система не даёт ему процессорное время в течение заданного времени.
После завершения паузы поток снова становится готовым к выполнению (RUNNABLE).
public class SleepExample {
public static void main(String[] args) {
System.out.println("Начало работы...");
try {
Thread.sleep(2000); // Пауза на 2 секунды
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Прошло 2 секунды");
}
}Результат
Начало работы...
(пауза 2 секунды)
Прошло 2 секунды
🚩Thread.yield()
Метод
Thread.yield() даёт возможность другим потокам выполнить работу. 🚩Как это работает?
Текущий поток передаёт управление планировщику (scheduler).
Если есть другие потоки с таким же или более высоким приоритетом, они получат процессорное время.
Если таких потоков нет, то текущий поток продолжит выполняться.
public class YieldExample {
public static void main(String[] args) {
Runnable task = () -> {
for (int i = 1; i <= 5; i++) {
System.out.println(Thread.currentThread().getName() + " - " + i);
Thread.yield(); // Позволяет другим потокам выполняться
}
};
Thread t1 = new Thread(task, "Поток-1");
Thread t2 = new Thread(task, "Поток-2");
t1.start();
t2.start();
}
}Результат (примерный, зависит от планировщика ОС)
Поток-1 - 1
Поток-2 - 1
Поток-1 - 2
Поток-2 - 2
...
Ставь 👍 и забирай 📚 Базу знаний
👍4
🤔 Request мы можем использовать во всех Spring приложениях?
Нет. Объект HttpServletRequest и скоуп request доступны только в веб-приложениях на Spring MVC или Spring Boot.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Нет. Объект HttpServletRequest и скоуп request доступны только в веб-приложениях на Spring MVC или Spring Boot.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍7
🤔 Что должно быть если объект equals нал?
Метод
🚩Почему важно обрабатывать `null` в `equals()`?
🟠Контракт метода `equals()`
Согласно спецификации Java, метод
Симметричность: Если
Для
🟠Предотвращение `NullPointerException`
Если метод
🚩Как правильно реализовать метод `equals()`?
Вот стандартный способ реализации метода
🚩Что происходит, если игнорировать проверку `null`?
Если вы не проверяете
Пример с проверкой
Ставь 👍 и забирай 📚 Базу знаний
Метод
equals() в Java предназначен для проверки равенства двух объектов. Если объект, переданный в метод equals(), равен null, метод должен возвращать `false`, так как объект не может быть равен null по определению. Рассмотрим этот случай более подробно.🚩Почему важно обрабатывать `null` в `equals()`?
🟠Контракт метода `equals()`
Согласно спецификации Java, метод
equals() должен возвращать false, если объект, переданный в метод, равен null. Это необходимо для корректного сравнения объектов.Симметричность: Если
a.equals(b) возвращает true, то b.equals(a) также должно возвращать true.Для
null: Вызов x.equals(null) всегда должен возвращать false.🟠Предотвращение `NullPointerException`
Если метод
equals() не проверяет, является ли объект null, попытка доступа к его полям или методам вызовет NullPointerException.🚩Как правильно реализовать метод `equals()`?
Вот стандартный способ реализации метода
equals()@Override
public boolean equals(Object obj) {
// Проверяем, равен ли объект null
if (obj == null) {
return false;
}
// Проверяем, является ли объект тем же самым
if (this == obj) {
return true;
}
// Проверяем, принадлежит ли объект тому же классу
if (getClass() != obj.getClass()) {
return false;
}
// Приводим объект к текущему типу
MyClass other = (MyClass) obj;
// Сравниваем необходимые поля
return this.field.equals(other.field);
}
🚩Что происходит, если игнорировать проверку `null`?
Если вы не проверяете
null, код вроде следующего приведет к ошибкеMyClass obj1 = new MyClass("Hello");
MyClass obj2 = null;
System.out.println(obj1.equals(obj2)); // Если нет проверки null -> NullPointerExceptionПример с проверкой
nullclass MyClass {
private String value;
public MyClass(String value) {
this.value = value;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (this == obj) {
return true;
}
if (getClass() != obj.getClass()) {
return false;
}
MyClass other = (MyClass) obj;
return value.equals(other.value);
}
}
public class Main {
public static void main(String[] args) {
MyClass obj1 = new MyClass("Hello");
MyClass obj2 = null;
System.out.println(obj1.equals(obj2)); // false
}
}Ставь 👍 и забирай 📚 Базу знаний
👍2