Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
исполнения, действительно может хранить присваиваемое значение, рели это условие нарушается, то возникает ошибка, которая называется ArrayStoreException.
Может сложиться впечатление, что разобранная ситуация является надуманной,- зачем преобразовывать массив и тут же задавать для него неверное значение? Однако преобразование при присвоении значений является лишь примером. Рассмотрим объявление метода:
public void process(Parent[] р) { if (p!=null && p.length>0) { p[0]=new Parent();
}
}
Метод выглядит абсолютно корректным, все потенциально ошибочные ситуации проверяются if-выражением. Однако следующий вызов этого метода все равно приводит к ошибке:
process(new Chмld[3] ));
И это будет как раз ошибка ArrayStoreException.
Переменные типа массив и их значения
Завершим описание взаимосвязи типа переменной и типа значений, которые она может хранить.
Как обычно, массивы, основанные на простых и ссылочных типах, мы описываем раздельно.
Переменная типа массив примитивных величин может хранить значения только точно такого же типа, либо null.
Переменная типа "массив ссылочных величин" может хранить следующие значения:
1- null;
2. значения точно такого же типа, что и тип переменной;
3. все значения типа массив, основанный на типе, приводимом к базовому типу исходного массива.
Все эти утверждения непосредственно следуют из рассмотренных вЫЩе особенностей приведения типов массивов.
Еще раз напомним про исключительный класс Object. Перемени такого типа могут ссылаться на любые объекты, порожденные как классов, так и от массивов.
Сведем все эти утверждения в таблицу.
|
Тип переменной |
Допустимые типы ее значения |
|
|
Массив |
•null |
І 1 |
|
простых чисел |
• в точности совпадающий с типом переменной |
|
|
Массив |
•null |
|
|
ссылочных |
• совпадающий с типом переменной |
ї |
|
значений |
• массивы ссылочных значений, удовлетворяющих следующему условию: если тип переменной -массив на основе типа А, то значение типа массив на основе типа В допустимо тогда и только тогда, когда В приводимо к А |
І ! si |
|
Object |
•null •любой ссылочный, включая массивы |
|
|
|
|
|
Табл. 7.1. Тип переменной и тип ее значения.
Клонирование
Механизм клонирования, как следует из названия, позволяет порождать новые объекты на основе существующего, которые обладали бы точно таким же состоянием, что и исходный. То есть ожидается, что для исходного объекта, представленного ссылкой х, и результата клонирования, возвращаемого методом х.с1опе(), выражение
х != х.с1опе()
должно быть истинным, как и выражение
х.с1опе().деЮ1аз5() == х.деЮ1аз5()
Наконец, выражение
х.едиа1з(х.с1опе())
также верно. Реализация такого метода с1опе() осложняется целым ряд0>| потенциальных проблем, например:
• класс, от которого порожден объект, может иметь разнообразные конструкторы, которые к тому же могут быть недоступны (например, модификатор доступа private);