ВУЗ: Таврический государственный агротехнологический университет
Категория: Лекция
Дисциплина: Программирование
Добавлен: 05.02.2019
Просмотров: 1416
Скачиваний: 7
Объявляется новое поле public final int length и переопределяется метод
public Object clone().
9-8.
Как определить, можно ли преобразовать один тип массива к другому?
a.) Во-первых, оба массива должны быть основаны на ссылочных типах
данных.
Во-вторых, чтобы привести массив, основанный на типе A (то есть, A[]) к
массиву B[], необходимо, чтобы тип A приводился к типу B.
С учетом того, что типы A и B также могут быть массивами, это правило
работает и для многомерных массивов (в этом случае оно должно
применяться рекурсивно).
9-9.
Хотя примитивные массивы не могут участвовать в преобразованиях, однако массивы
int[][] и byte[][] могут рассматриваться как одномерные объектные массивы,
основанные на ссылочном типе «одномерный примитивный массив». Могут ли такие
типы быть преобразованы из одного в другой?
a.) Нет. Если применять правило из предыдущего вопроса, необходимым
условием является приводимость типов int[] и byte[], что неверно по тому
же правилу.
9-10. Может ли возникнуть ошибка ArrayStoreException при работе следующих методов?
public void setCars(Car c[]) {
c[0]=new Car();
}
public void setCars2(Car c[]) {
if (c[0] instanceof Car) {
c[0]=new Car();
}
}
public void setNumbers(int x[]) {
x[0]=0;
}
a.) Ошибка может возникнуть в методах setCars и setCars2, если в качестве
аргумента передать массив, основанный на классе-наследнике Car.
Причем, проверка во втором методе не спасает, так как оператор instanceof
вернет true.
В третьем методе ошибки не будет, так как примитивные массивы хранят
значения точно того типа, на котором они основаны.
9-11. Можно ли клонировать объекты следующего класса?
public class Point {
private int x, y;
Стр. 19 из 21
Программирование на Java
public Point(int nx, int ny) {
x=nx;
y=ny;
}
public Object clone() {
return new Point(x, y);
}
}
a.) Да, определенный в этом классе метод clone работает безо всяких ошибок.
То, что этот класс не реализует интерфейс Cloneable, не позволяет
обращаться к методу Object.clone(), однако такая попытка и не
производится.
9-12. Сколько объектов может быть создано в процессе выполнения клонирования одного
объекта средствами JVM?
a.) Ровно один – сам клон.
9-13. Каков будет результат выполнения следующего кода?
Point p1[][]={null, {new Point(1, 1)}};
Point p2[][] = (Point[][])p1.clone();
p2[0]= new Point[]{new Point(2, 2)};
System.out.println(p1[0][0]);
a.) Не смотря на инициализацию первого элемента клонированного массива,
на который ссылается переменная p2, первый элемент исходного массива
(p1) остается равным null. Следовательно, попытка обратиться к элементу
p1[0][0] приведет к ошибке (NullPointerException).
Программирование на Java
Стр. 20 из 21
Контрольные вопросы