Непосредственно вызов finalize() происходит в отдельном потоке Finalizer (java.lang.ref.Finalizer.FinalizerThread), который создаётся при запуске виртуальной машины (в статической секции при загрузке класса Finalizer). Методы finalize() вызываются последовательно в том порядке, в котором были добавлены в список сборщиком мусора. Соответственно, если какой-то finalize() зависнет, он подвесит поток Finalizer, но не сборщик мусора. Это в частности означает, что объекты, не имеющие метода finalize(), будут исправно удаляться, а вот имеющие будут добавляться в очередь, пока поток Finalizer не освободится, не завершится приложение или не кончится память.
То же самое применимо и выброшенным в процессе finalize() исключениям: метод runFinalizer() у потока Finalizer игнорирует все исключения выброшенные в момент выполнения finalize(). Таким образом возникновение исключительной ситуации никак не скажется на работоспособности сборщика мусора.
То же самое применимо и выброшенным в процессе finalize() исключениям: метод runFinalizer() у потока Finalizer игнорирует все исключения выброшенные в момент выполнения finalize(). Таким образом возникновение исключительной ситуации никак не скажется на работоспособности сборщика мусора.
Java: Learn Java in One Day and Learn It Well (2016)
Автор: Jamie Chan
Вы всегда хотели научиться программированию, но боитесь, что это будет слишком сложно для вас? Или, возможно, вы знаете другие языки программирования, и заинтересованы в быстром изучении языка Java? В этих случаях вам поможет данная книга. Вам не придется тратить много времени на изучение Java при помощи этой книги.
Скачать книгу
Автор: Jamie Chan
Вы всегда хотели научиться программированию, но боитесь, что это будет слишком сложно для вас? Или, возможно, вы знаете другие языки программирования, и заинтересованы в быстром изучении языка Java? В этих случаях вам поможет данная книга. Вам не придется тратить много времени на изучение Java при помощи этой книги.
Скачать книгу
Telegram
Книги для программистов (reserved)
Java: Learn Java in One Day and Learn It Well (2016)
Автор: Jamie Chan
Автор: Jamie Chan
#вопросы_с_собеседований
Что такое «локальный класс»? Каковы его особенности?
Что такое «локальный класс»? Каковы его особенности?
Local inner class (Локальный класс) - это вложенный класс, который может быть декларирован в любом блоке, в котором разрешается декларировать переменные. Как и простые внутренние классы (Member inner class) локальные классы имеют имена и могут использоваться многократно. Как и анонимные классы, они имеют окружающий их экземпляр только тогда, когда применяются в нестатическом контексте.
Локальные классы имеют следующие особенности:
✔️Видны только в пределах блока, в котором объявлены;
✔️Не могут быть объявлены как private/public/protected или static;
✔️Не могут иметь внутри себя статических объявлений методов и классов, но могут иметь финальные статические поля, проинициализированные константой;
✔️Имеют доступ к полям и методам обрамляющего класса;
✔️Могут обращаться к локальным переменным и параметрам метода, если они объявлены с модификатором final.
Локальные классы имеют следующие особенности:
✔️Видны только в пределах блока, в котором объявлены;
✔️Не могут быть объявлены как private/public/protected или static;
✔️Не могут иметь внутри себя статических объявлений методов и классов, но могут иметь финальные статические поля, проинициализированные константой;
✔️Имеют доступ к полям и методам обрамляющего класса;
✔️Могут обращаться к локальным переменным и параметрам метода, если они объявлены с модификатором final.
#вопросы_с_собеседований
1. Почему метод clone() объявлен в классе Object, а не в интерфейсе Cloneable?
2. Какой способ клонирования предпочтительней?
1. Почему метод clone() объявлен в классе Object, а не в интерфейсе Cloneable?
2. Какой способ клонирования предпочтительней?
❓ Почему метод clone() объявлен в классе Object, а не в интерфейсе Cloneable?
❗️Метод clone() объявлен в классе Object с указанием модификатора native, чтобы обеспечить доступ к стандартному механизму поверхностного копирования объектов. Одновременно он объявлен и как protected, чтобы нельзя было вызвать этот метод у не переопределивших его объектов. Непосредственно интерфейс Cloneable является маркерным (не содержит объявлений методов) и нужен только для обозначения самого факта, что данный объект готов к тому, чтобы быть клонированным. Вызов переопределённого метода clone() у не Cloneable объекта вызовет выбрасывание CloneNotSupportedException.
❓Какой способ клонирования предпочтительней?
❗️Наиболее безопасным и, следовательно, предпочтительным способом клонирования является использование специализированного конструктора копирования:
✔️Отсутствие ошибок наследования (не нужно беспокоиться, что у наследников появятся новые поля, которые не будут склонированы через метод clone());
✔️Поля для клонирования указываются явно;
✔️Возможность клонировать даже final поля.
❗️Метод clone() объявлен в классе Object с указанием модификатора native, чтобы обеспечить доступ к стандартному механизму поверхностного копирования объектов. Одновременно он объявлен и как protected, чтобы нельзя было вызвать этот метод у не переопределивших его объектов. Непосредственно интерфейс Cloneable является маркерным (не содержит объявлений методов) и нужен только для обозначения самого факта, что данный объект готов к тому, чтобы быть клонированным. Вызов переопределённого метода clone() у не Cloneable объекта вызовет выбрасывание CloneNotSupportedException.
❓Какой способ клонирования предпочтительней?
❗️Наиболее безопасным и, следовательно, предпочтительным способом клонирования является использование специализированного конструктора копирования:
✔️Отсутствие ошибок наследования (не нужно беспокоиться, что у наследников появятся новые поля, которые не будут склонированы через метод clone());
✔️Поля для клонирования указываются явно;
✔️Возможность клонировать даже final поля.
Подборка самых полезных книг по изучению Java.
https://www.freecodecamp.org/news/must-read-books-to-learn-java-programming-327a3768ea2f/
https://www.freecodecamp.org/news/must-read-books-to-learn-java-programming-327a3768ea2f/
freeCodeCamp.org
Must-read books to learn Java programming
By javinpaul Hello everybody, today is the world of online courses. Everyone is talking about learning from online training, Youtube, free courses on Coursera and other websites, which is great as online courses to help you to learn faster, but, I be...
Что будет выведено на экран?
Anonymous Quiz
14%
Base::show() called
35%
Derived::show() called
47%
Compiler Error
4%
Runtime Error
final-методы нельзя переопределять в классах-наследниках. Если убрать этот модификатор, программа выведет Derived::show() called.
The Joy of Kotlin (2019)
Kotlin — это элегантный язык JVM с современными функциями и простой интеграцией с Java. Книга обучает практическим методам улучшения абстракции и дизайна, написания простого и понятного кода для создания поддерживаемых качественных приложений. Написано для разработчиков Java или Kotlin.
Скачать книгу
Kotlin — это элегантный язык JVM с современными функциями и простой интеграцией с Java. Книга обучает практическим методам улучшения абстракции и дизайна, написания простого и понятного кода для создания поддерживаемых качественных приложений. Написано для разработчиков Java или Kotlin.
Скачать книгу
Telegram
Книги для программистов (reserved)
The Joy of Kotlin (2019)
Автор: Pierre-Yves Saumont
Автор: Pierre-Yves Saumont
#вопросы_с_собеседований
Что такое «функциональные интерфейсы»?
Что такое «функциональные интерфейсы»?
Функциональный интерфейс — это интерфейс, который определяет только один абстрактный метод.
Чтобы точно определить интерфейс как функциональный, добавлена аннотация FunctionalInterface, работающая по принципу Override. Она обозначит замысел и не даст определить второй абстрактный метод в интерфейсе.
Интерфейс может включать сколько угодно default-методов и при этом оставаться функциональным, потому что default-методы не абстрактные.
Чтобы точно определить интерфейс как функциональный, добавлена аннотация FunctionalInterface, работающая по принципу Override. Она обозначит замысел и не даст определить второй абстрактный метод в интерфейсе.
Интерфейс может включать сколько угодно default-методов и при этом оставаться функциональным, потому что default-методы не абстрактные.
Я сейчас прохожу курсы на платформе...
Anonymous Poll
10%
Coursera
9%
Stepik
3%
Skillbox
1%
Udacity
14%
Udemy
5%
Geekbrains
1%
Openedu
23%
Другая платформа
36%
Не прохожу никаких курсов
Какие платформы мы не упомянули, но которые вы используете?