Библиотека джависта | Java, Spring, Maven, Hibernate
24.9K subscribers
1.86K photos
38 videos
42 files
2.65K links
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://yangx.top/proglibrary/9197

Обратная связь: @proglibrary_feedback_bot

По рекламе: @proglib_adv

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
#вопросы_с_собеседований
Что произойдет со сборщиком мусора, если выполнение метода finalize() требует ощутимо много времени, или в процессе выполнения будет выброшено исключение?
Непосредственно вызов finalize() происходит в отдельном потоке Finalizer (java.lang.ref.Finalizer.FinalizerThread), который создаётся при запуске виртуальной машины (в статической секции при загрузке класса Finalizer). Методы finalize() вызываются последовательно в том порядке, в котором были добавлены в список сборщиком мусора. Соответственно, если какой-то finalize() зависнет, он подвесит поток Finalizer, но не сборщик мусора. Это в частности означает, что объекты, не имеющие метода finalize(), будут исправно удаляться, а вот имеющие будут добавляться в очередь, пока поток Finalizer не освободится, не завершится приложение или не кончится память.

То же самое применимо и выброшенным в процессе finalize() исключениям: метод runFinalizer() у потока Finalizer игнорирует все исключения выброшенные в момент выполнения finalize(). Таким образом возникновение исключительной ситуации никак не скажется на работоспособности сборщика мусора.
Java: Learn Java in One Day and Learn It Well (2016)
Автор: Jamie Chan

Вы всегда хотели научиться программированию, но боитесь, что это будет слишком сложно для вас? Или, возможно, вы знаете другие языки программирования, и заинтересованы в быстром изучении языка Java? В этих случаях вам поможет данная книга. Вам не придется тратить много времени на изучение Java при помощи этой книги.

Скачать книгу
#вопросы_с_собеседований
Что такое «локальный класс»? Каковы его особенности?
Local inner class (Локальный класс) - это вложенный класс, который может быть декларирован в любом блоке, в котором разрешается декларировать переменные. Как и простые внутренние классы (Member inner class) локальные классы имеют имена и могут использоваться многократно. Как и анонимные классы, они имеют окружающий их экземпляр только тогда, когда применяются в нестатическом контексте.

Локальные классы имеют следующие особенности:

✔️Видны только в пределах блока, в котором объявлены;
✔️Не могут быть объявлены как private/public/protected или static;
✔️Не могут иметь внутри себя статических объявлений методов и классов, но могут иметь финальные статические поля, проинициализированные константой;
✔️Имеют доступ к полям и методам обрамляющего класса;
✔️Могут обращаться к локальным переменным и параметрам метода, если они объявлены с модификатором final.
#вопросы_с_собеседований
1. Почему метод clone() объявлен в классе Object, а не в интерфейсе Cloneable?
2. Какой способ клонирования предпочтительней?
Почему метод clone() объявлен в классе Object, а не в интерфейсе Cloneable?
❗️Метод clone() объявлен в классе Object с указанием модификатора native, чтобы обеспечить доступ к стандартному механизму поверхностного копирования объектов. Одновременно он объявлен и как protected, чтобы нельзя было вызвать этот метод у не переопределивших его объектов. Непосредственно интерфейс Cloneable является маркерным (не содержит объявлений методов) и нужен только для обозначения самого факта, что данный объект готов к тому, чтобы быть клонированным. Вызов переопределённого метода clone() у не Cloneable объекта вызовет выбрасывание CloneNotSupportedException.

Какой способ клонирования предпочтительней?
❗️Наиболее безопасным и, следовательно, предпочтительным способом клонирования является использование специализированного конструктора копирования:

✔️Отсутствие ошибок наследования (не нужно беспокоиться, что у наследников появятся новые поля, которые не будут склонированы через метод clone());
✔️Поля для клонирования указываются явно;
✔️Возможность клонировать даже final поля.
final-методы нельзя переопределять в классах-наследниках. Если убрать этот модификатор, программа выведет Derived::show() called.
The Joy of Kotlin (2019)

Kotlin — это элегантный язык JVM с современными функциями и простой интеграцией с Java. Книга обучает практическим методам улучшения абстракции и дизайна, написания простого и понятного кода для создания поддерживаемых качественных приложений. Написано для разработчиков Java или Kotlin.

Скачать книгу
Функциональный интерфейс — это интерфейс, который определяет только один абстрактный метод.

Чтобы точно определить интерфейс как функциональный, добавлена аннотация FunctionalInterface, работающая по принципу Override. Она обозначит замысел и не даст определить второй абстрактный метод в интерфейсе.

Интерфейс может включать сколько угодно default-методов и при этом оставаться функциональным, потому что default-методы не абстрактные.
Какие платформы мы не упомянули, но которые вы используете?