Поскольку массив является объектным типом данных, можно попытаться представить себе, как выглядело бы объявление класса такого типа. На самом деле эти объявления не хранятся в файлах, или еще каком-нибудь формате. Учитывая, что массив может быть объявлен на основе любо-IX)типа и иметь произвольную размерность, это физически невыполнимо, дай не требуется. Вместо этого во время выполнения приложения виртуальная машина генерирует эти объявления динамически на основе базового типа и размерности, а затем они хранятся в памяти в виде таких же э1йемпляров класса Class, как и для любых других типов.
Рассмотрим гипотетическое объявление класса для массива, основанного на неком объектном типе Element.
Объявление класса начинается с перечисления модификаторов, среди ксугорых особую роль играют модификаторы доступа. Класс массива будет иметь такой же уровень доступа, как и базовый тип. То есть если Element обмелен как public-класс, то и массив будет иметь уровень доступа public Для любого примитивного типа класс массива будет public. Можно также указать модификатор final, поскольку никакой класс не может наследоваться от класса массива.
Затем следует имя класса, на котором можно подробно не останав-Л11|аться, т.к. к типу массив обращение идет не по его имени, а по имени базового типа и набору квадратных скобок.
Затем нужно указать родительский класс. Все массивы наследуются Напрямую от класса Object. Далее перечисляются интерфейсы, которые Реализует класс. Для массива это будут интерфейсы Cloneable и %iallzable. Первый из них подробно рассматривается в конце этой лекции, а второй будет описан в следующих лекциях.
Сведем все вышесказанное в формальную запись класса:
[public] class А implements Cloneable, java.io.Serializable { public final int length; // инициализируется при создании
Таким образом, экземпляр типа массив является полноценным объектом, который, в частности, наследует все методы, определенные в классе Object, например, toString(), hashCode() и остальные.
Например:
// результат работы метода toString() System.out.println(new int[3]); System.out.println{newint[3][5]); System.out.println(newString[2]);
// результат работы метода hashCode() System.out.println(newfloat[2].hashCode()); Результатом выполнения программы будет: