Прохожу курс по Java в надежде получить знания и устроиться на работу. Здесь будут собраны вопросы с собеседований, представленные в данном курсе.
toString()
equals()
hashCode()
notify()
notifyAll()
clone()
finalize()
getClass()
wait()
wait(long timeout)
wait(long timeout, int nanos)
При сравнении элементов первоначально происходит проверка хэш-кода объектов.
Если не переопределить метод hashCode()
объекты будут иметь различные хэш-коды и сравнение прекратится.
Метод wait()
и его перегрузки используются для освобождения занятого монитора и перевода вызывающего потока в состояние ожидания до тех пор, пока другой поток не вызовет метод notify()
.
notify()
возобновляет работу случайного потока, находящего в состоянии ожидания.
notifyAll()
возобновляет работу всех остановленных потоков.
Существует 2 вида клонирования: поверхностное и глубокое.
Поверхностное клонирование создает новую ссылку на имееющийся объект.
Глубокое же копирование создает новый объект и устанавливает значение атрибутов равными атрибутам клонируемого объекта.
Метод finalize()
задает алгоритм действий, выполняемых объктом перед его уничтожением сборщиком мусора.
Предназначен этот метод для автоматического освобождения системных ресурсов, занимаемых объектом, на котором будет данный метод вызван, например, закрытые соединение с каким-то ресурсом, когда оно больше не требуется.
Полагаться на данный метод не стоит, так как нет никаких гарантий что он будет запущен.
final
- ключевое слово, которое используется с:
finally
- часть конструкции try..catch..finally
, используемая для гарантированного выполнения блока кода (блок finally выполняется независимо от результата в try..catch
)
finalize
- данный метод описан выше
Конструкция для автоматического освобождения ресурсов.
Она дает возможность объявлять один или несколько ресурсов в блоке try
, которые будут закрыты автоматически без использования finally
блока.
sleep()
приостанавливает поток на указанное. состояние меняется на TIMED_WAITING, по истечению — RUNNABLE.
wait()
меняет состояние потока на WAITING.
wait()
с параметрами меняет состояние потока на TIMED_WAITING.
wait()
может быть вызвано только у объекта владеющего блокировкой, в противном случае выкинется исключение IllegalMonitorStateException. При срабатывании метода блокировка отпускается, что позволяет продолжить работу другим потокам ожидающим захватить ту же самую блокировку.
Оба примера увеличивают значение переменной i
на единицу. Однако при вычислениях проявляется различие:
++i
, i
сначала увеличивается на 1, затем участвует в выражении.i++
, i
сначала участвует в выражении, затем увеличивается на 1.Сравнивать строки необходимо с помощью метода equals()
, т.к. строка в Java является объектом.