Файл: Курс лекция по Java. Лекция 9.pdf

Добавлен: 05.02.2019

Просмотров: 1416

Скачиваний: 7

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Объявляется новое поле 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

Rendered by 

www.RenderX.com


background image

            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

Контрольные вопросы

Rendered by 

www.RenderX.com