Программирование на JAVA

Навигация

Лекция 1. Что такое Java? История создания

Лекция 2. Основы объектно-ориентированного программирования

Лекция 3. Лексика языка

Лекция 4. Типы данных

Лекция 5. Имена. Пакеты

Лекция 6. Объявление классов

Лекция 7. Преобразование типов

Лекция 8. Объектная модель в Java

Лекция 9. Массивы

Лекция 10. Операторы и структура кода. Исключения

Лекция 11. Пакет java.awt

Лекция 12. Потоки выполнения. Синхронизация

Лекция 13. Пакет java.lang

Лекция 14. Пакет java.util

Лекция 15. Пакет java.io

Лекция 16. Введение в сетевые протоколы

Реклама :





второй, то результатом будет опять 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);

}

}

□       да Ц   нет