Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
второй, то результатом будет опять 1, поскольку в части второго варианта модифицироваться будет уже новый массив, порожденный в части первого варианта.
Таким образом, в Java предоставляется мощный, эффективный и гибкий механизм клонирования, который легко применять и модифицировать под конкретные нужды. Особенное внимание должно уделяться копированию объектных полей, которые по умолчанию копируются только по ссылке.
Заключение
В этой лекции было рассмотрено устройство массивов в Java. Подобно массивам в других языках, они представляют собой набор значений одного типа. Основным свойством массива является длина, которая в Java может равняться нулю. В противном случае, массив обладает элементами в количестве, равном длине, к которым можно обратиться, используя индекс, изменяющийся от 0 до величины длины без единицы. Длина задается при создании массива и у созданного массива не может быть изменена. Однако она не входит в определение типа, а потому одна переменная может ссылаться на массивы одного типа с различной длиной.
Создать массив можно с помощью ключевого слова new, поскольку все массивы, включая определенные на основе примитивных значений, Имеют объектный тип. Другой способ - воспользоваться инициализатором и перечислить значения всех элементов. В первом случае элементы принимают значения по умолчанию (0, false, null).
Особым образом в Java устроены многомерные массивы. Они, по сути, *Мяются одномерными, основанными на массивах меньшей размерности. Такой подход позволяет единообразно работать с многомерными массивами. Также он дает возможность создавать не только "прямоугольные" Массивы, но и массивы любой конфигурации.
Хотя массив и является ссылочным типом, работа с ним зачастую Имеет некоторые особенности. Рассматриваются правила приведения ти-ца массива. Как для любого объектного типа, приведение к Object явля-
расширяющим. Приведение массивов, основанных на ссылочных ^ах, во многом подчиняется обычным правилам. А вот примитивные ^ссивы преобразовывать нельзя. С преобразованиями связано и возникновение ошибки ArrayStoreException, причина которой - невозможность *°ЧНого отслеживания типов в преобразованном массиве для компилятора.
В заключение рассматриваются последние случаи взаимосвязи типа переменной и ее значения.
Наконец, изучается механизм клонирования, существующий с самых первых версий Java и позволяющий создавать точные копии объек-тов, если их классы позволяют это делать, реализуя интерфейс Cloneable Поскольку стандартное клонирование порождает только один новый объект, это приводит к особым эффектам при работе с объектными полями классов и массивами.
Вариант 1
Сколько различных ошибок (компиляции, времени выполнения, логических) в следующем примере? intb[]=newint[5]; for (int i=1; i<=b.length(); { b[i]=Math.sqrt(i);
}
□ 3
□ 4
□ 5
2. Сколько объектов порождается при инициализации массива new int[3][4]? new int[3][][]?
□ 1,1
□ 3,3
□ 4, 1
□ 4,3
□ 12, 3
3. Хотя примитивные массивы не могут участвовать в преобразованиях, однако массивы int[][] и byte[][] могут рассматриваться как одномерные объектные массивы, основанные на ссылочном типе «одномерный примитивный массив». Могут ли такие типы быть преобразованы из одного в другой?
□ да П нет
Вариант 2
1. Может ли массив основываться на абстрактных классах? Интерфейсах?
□ да, да
□ да, нет
□ нет, да
□ нет, нет
2. От какого класса наследуются классы массивов?
П особый класс для массивов □ object
П одномерные массивы - от Object, двумерные - от одномерных и т.д.
П ни от какого
3. Может ли возникнуть ошибка ArrayStoreException при работе следующих методов? public void setCars(Car с[]) { c[0]=newCar();
}
public void setCars2(Car c[]) { if (c[0] instanceof Car) { c[0]=newCar();
}
}
public void setNumbers(int x[]) { x[0]=0;
}
П ошибка возможна в первом методе П ошибка возможна во втором методе П ошибка возможна в третьем методе
Вариант 3
1. Как создать массив, эквивалентный объявляемому ниже, но без заведения переменной? intx[][]=newint[2][3];
□ newint[2][3]
□ {{0, 0}, {0, 0}, {0, 0}}
□ {{0, 0, 0}, {0, 0, 0}}
□ newint[][]{{0, 0}, {0, 0}, {0, 0}}
□ newint[][]{{0, 0, 0}, {0, 0, 0}}
2. Как определить, можно ли преобразовать один тип массива к другому?
[~| любые массивы приводимы, поскольку являются объектами
□ А[] можно привести к В[], если А приводится к В
□ А[] можно привести к В[], если А приводится к В, и А, В - ссылочные типы
Г~| массивы не преобразовываются
3. Можно ли клонировать объекты следующего класса? public class Point {
private int x, у;
public Point(int nx, int ny) {
x=nx;
y=ny;
}
public Object clone() { return new Point(x, y);
}
}
□ да Ц нет