Java

Как происходит наследование если оба реализуемых интерфейса объявляют один и тот же метод?

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

Читать полностью

Как поменять значение приватного finall поля на другое

В первую очередь нужно знать, что такое действие слишком плохая практика, противоречащая принципу сокрытия информации. Для того чтобы это сделать нужно обратиться к Reflection API. Для этого нужно: ·        чтобы получить дескриптор нужного поля, вызываем метод getDeclaredField()…

Читать полностью

Что такое Reflection?

Reflection – это инструмент метапрограммирования, который даёт средства, с помощью которых можно манипулировать данными, зная структуру конкретного класса, к которым эта информация относятся. Class<T> является входом в рефлексию. В экземплярах данного класса содержится информация о требуемом классе. Имеющиеся способы получить…

Читать полностью

В каком случае результатом выполнения Class.getClassLoader будет null?

Чтобы ответить на этот вопрос нужно разобраться в двух темах. Во-первых, экземпляры, относящиеся к Class<T>, являются описанием типов, где считается что перечисления – это классы, а аннотации идентичны интерфейсам. Экземпляры, принадлежащие Class<T> хранят, в основном, ту же информацию, что и…

Читать полностью

Как создаётся экземпляр класса?

На первом этапе загружается сам класс, вместе со своими предками. Класс загружается всего раз, во время 1-го упоминания данного класса. Когда загрузка закончится, начинается процесс выделения памяти под имеющиеся в нём static поля и начинают выполняться команды, прописанные в static…

Читать полностью

Зачем нужен тип enum?

Enum является классом со всеми свойствами финального, у которого имеются поля, объявленные по умолчанию как final и экземпляры, также финальные. Им нельзя расширять классы, но с его помощью можно реализовывать интерфейсы. Перечисление Enum является сравнимым (Comparable) и сериализируемым (Serializable). В…

Читать полностью

Какие модификаторы доступа есть в языке Java?

В Java их четыре: public – отсутствуют ограничения на доступ; protected – предоставляет доступ из классов, входящих в пакет и из всех наследников; private – доступ возможен только из исходного класса и внутренний или вложенных в него классов; pakage-private –…

Читать полностью

Для чего используется модификатор static?

С помощью данного ключевого слова можно объявить static методы, импорты, поля, инициализационные статические блоки, а также вложенные классы. К static полям и методам класса есть обращаются используя имя класса, потому что, поля и методы являются членами класса, в котором прописаны,…

Читать полностью

Что делают загрузчики классов?

В языке Java применяется динамический тип загрузки используемых классов, которую выполняют лоадеры (они же загрузчики). Они происходят от класса ClassLoader, который является абстрактным. Также они отвечают за загрузку прочих файлов, в которых содержаться ресурсы. Загрузка элементов ссылочного типа, в том…

Читать полностью

Лишает ли var строгой типизации?

Слово var впервые появилось было введено в десятой версии Java. Оно указывает, что тип переменной определяется при компиляции, в зависимости от того, чем данная переменная будет проинициализирована. Из этого следует что: var можно использовать только для локальных переменных; они нуждаются…

Читать полностью

Отличаются ли сокращенные и обычные операторы?

К сокращенным или как их официально называют операторам сложного присваивания относятся, например, *= или |=. При их применении нужно учитывать один нюанс. Оператор x *= y эквивалентен x = (XType)(x + y). Таким образом при выполнении этих операторов происходит неявное…

Читать полностью

Какие бывают проблемы с арифметикой в Java?

Числа относятся к примитивным типам, поэтому они занимают в памяти определённое, не безграничное пространство, что накладывает ограничения на диапазон значений. Если в результате выполнения математической операции получится число, выходящее за эти пределы, то возникает ошибка переполнения. В этом случае помогут…

Читать полностью

Как сравнивать элементы перечисления?

Компилятор преобразует экземпляры enum в static константы, которые к тому же являются singleton-ами. Поэтому, для сравнения можно использовать «==». Все классы наследуются от java.lang.Enum. При этом все методы, кроме toStrng являются финальными. Поэтому, функция equals, также подходит для сравнения перечислений.…

Читать полностью

Может ли название класса не совпадать с названием файла?

В файле *java должен находиться единственный главный публичный класс, при этом его название обязано быть тем же что и у файла, в котором он расположен. Классов, определённых как protected и private не существует. Но на package-protected class приведенное выше правило…

Читать полностью

Как обойти коллекцию?

Существуют следующие способы: С помощью циклов for или while. В этом случае индексная переменная увеличивается от 0 до размера коллекции, определить который можно с помощью функции size(). В этом случае можно организовать неполный обход или обход с не стандартным шагом.…

Читать полностью

Что будет со ссылкой на метод, если заменить объект-владельца?

Чтобы ответить на данный вопрос требуется знать, что такое ссылки и что такое ссылки на метод. Если метод обычный, не статический, то для него применяется позднее связывание. При обращении к данному методу по указанной ссылке мы получаем нужный метод. В…

Читать полностью

Когда нужно использовать raw types?

Как известно, raw type – это такие generic-типы, которые используются без задания типа-параметра. Данная конструкция допустима, но часто приводит к появлению warning от компилятора. Это связано с риском возникновения ситуации, которая называется heap pollution, это когда переменная, относящаяся к параметризированному…

Читать полностью

В чем различие между приватным конструктором и финальным классом?

Если установить модификатор видимости для конструктора класса private, то его нельзя будет запустить из класса наследника, а это означает что наследование станет невозможным. Эту возможность обычно используют для создания утилитарных классов и в паттерне singleton. Модификатор final запрещает наследование от…

Читать полностью

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

Классы, входящие в текущий используемый пакет можно использовать без импорта. При импорте class, идентичного по имени с соседним по пакету, он будет перекрыт. В таком случае будет использоваться импортированный class, при этом никакой ошибки компилятор не выдаст. Если в одном…

Читать полностью