prompter: Напиши основные првила которым нужно следовать на собеседовании чтобы получить желанную должность

assistant: Что вы знаете о функции main()?

Метод main() — точка входа в программу. В приложении может быть несколько таких методов. Если метод отсутствует, то компиляция возможна, но при запуске будет получена ошибка `Error: Main method not found`.

Почему в некоторых интерфейсах вообще не определяют методов?

Это так называемые маркерные интерфейсы. Они просто указывают что класс относится к определенному типу. Примером может послужить интерфейс Clonable, который указывает на то, что класс поддерживает механизм клонирования.

К каким конструкциям Java применим модификатор static?

   -полям;
   -методам;
   -вложенным классам;
   -блокам инициализации;
   -членам секции import.

Что такое «локальный класс»? Каковы его особенности?

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

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

    Видны только в пределах блока, в котором объявлены;
    Не могут быть объявлены как private/public/protected или static;
    Не могут иметь внутри себя статических объявлений методов и классов, но могут иметь финальные статические поля, проинициализированные константой;
    Имеют доступ к полям и методам обрамляющего класса;
    Могут обращаться к локальным переменным и параметрам метода, если они объявлены с модификатором final.

Верно ли утверждение, что примитивные типы данных всегда хранятся в стеке, а экземпляры ссылочных типов данных в куче?

Не совсем. Примитивное поле экземпляра класса хранится не в стеке, а в куче. Любой объект (всё, что явно или неявно создаётся при помощи оператора new) хранится в куче.

prompter: А что такое куча и стек?

assistant: В данном случае «куча» и «стек» — разные способы организации памяти.

**Стек** (*stack*) организован в соответствии с одноимённой структурой данных. Это линейная структура данных, обеспечивающая доступ по принципу LIFO (последний пришёл — первый ушёл), то есть в данном случае данные могут удаляться только в порядке, обратном порядку добавления. В такой структуре удобно хранить, например, аргументы функции и её локальные переменные известного (во время компиляции) размера. При вызове функции ей выделяется непрерывный блок памяти на «вершине» стека, а по завершении её выполнения весь блок освобождается (что происходит очень «дёшево», поскольку для этого достаточно лишь изменить значение указателя стека, переместив его вершину «вниз»; никаких массовых операций не требуется).

**Куча** (*heap*) способ реализации динамически распределяемой памяти, также связанный с одноимённой структурой данных. Куча предоставляет программам более свободный доступ к памяти, без строгих ограничений, налагаемых стеком. Программа может динамически (в процессе выполнения) запрашивать произвольные объёмы памяти в куче под хранение тех или иных данных (объём которых может быть неизвестен на этапе компиляции). Также по мере утраты актуальности данные могут удаляться из кучи в произвольном порядке, освобождая память для последующих нужд. Поддержание такого свободного доступа (в частности, отслеживание свободных и занятых в данный момент участков памяти) требует накладных расходов в виде дополнительных служебных структур в памяти и времени, небходимого для выделение и освобождение фрагментов памяти.

Удалось ли мне дать вам некоторое представление о значении этих понятий?