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

Добавлен: 05.02.2019

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

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

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

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

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

20 апреля 2003 года

Авторы документа:

Николай Вязовик (Центр Sun технологий МФТИ) <

vyazovick@itc.mipt.ru

>

Евгений Жилин (Центр Sun технологий МФТИ) <

 gene@itc.mipt.ru

>

Copyright © 2003 года 

 Центр Sun технологий МФТИ,ЦОС и ВТ МФТИ

®

, Все права защищены.

Аннотация

Лекция посвящена рассмотрению массивов в Java. Массивы издавна присутствуют в языках
программирования,  поскольку  многие  задачи  требуют  оперировать  с  целым  рядом
однотипных значений.

Массивы  в  Java  –  один  из  ссылочных  типов,  который  однако  имеет  особенности  при
инициализации, создании и оперировании со своими значениями. Наибольшие различия
проявляются при преобразовании таких типов. Также рассматривается, почему многомерные
массивы  в  Java  можно  (и  зачастую  более  правильно)  рассматривать  как  одномерные.
Завершается  классификация  типов  переменных  и  типов  значений,  которые  они  могут
хранить.

В  заключение  рассматривается  механизм  клонирования  Java,  позволяющий  в  любом
классе  легко  описать  возможность  создавать  точные  копии  объектов,  порожденных  от
него.

Rendered by 

www.RenderX.com


background image

Оглавление

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

..............................................................................................................1

1. 

Введение

.......................................................................................................................... 1

2. 

Массивы, как тип данных в Java

.................................................................................... 1

2.1. 

Объявление массивов

........................................................................................... 2

2.2. 

Инициализация массивов

...................................................................................... 4

2.3. 

Многомерные массивы

.......................................................................................... 6

2.4. 

Класс массива

.........................................................................................................7

3. 

Преобразование типов для массивов

............................................................................9

3.1. 

Ошибка ArrayStoreException

................................................................................ 10

3.2. 

Переменные типа массив, и их значения

........................................................... 11

4. 

Клонирование

................................................................................................................ 12

4.1. 

Клонирование массивов

...................................................................................... 15

5. 

Заключение

.................................................................................................................... 16

6. 

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

...................................................................................................17

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

ii

Rendered by 

www.RenderX.com


background image

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

Содержание лекции.

1. 

Введение

......................................................................................................................... 1

2. 

Массивы, как тип данных в Java

....................................................................................1

2.1. 

Объявление массивов

................................................................................................. 2

2.2. 

Инициализация массивов

............................................................................................ 4

2.3. 

Многомерные массивы

................................................................................................ 6

2.4. 

Класс массива

...............................................................................................................7

3. 

Преобразование типов для массивов

........................................................................... 9

3.1. 

Ошибка ArrayStoreException

...................................................................................... 10

3.2. 

Переменные типа массив, и их значения

.................................................................11

4. 

Клонирование

................................................................................................................12

4.1. 

Клонирование массивов

............................................................................................ 15

5. 

Заключение

................................................................................................................... 16

6. 

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

.................................................................................................. 17

1. Введение

Массивы  являются  важной  составляющей  языка  программирования.  В  Java  работа  с
массивами  во  многом  похожа  на  то,  как  это  делается  в  других  языках,  но  есть  также  и
важные особенности. Все они рассматриваются в этой главе. Завершается она изучением
механизма клонирования в Java, в том числе, в применении к массивам.

2. Массивы, как тип данных в Java

В отличие от обычных переменных, которые хранят ровно одно значение, массивы (arrays)
используются  для  хранения  целого  набора  значений.  Количество  значений  в  массиве
называется его длиной, сами значения - элементами массива. Значений может не быть
вовсе, в этом случае массив считается пустым, а его длина равной нулю.

Элементы не имеют имен, доступ к ним осуществляется по номеру индекса. Если массив
имеет длину n, отличную от нуля, то корректными значениями индекса являются числа от
0 до n-1. Все значения имеют одинаковый тип, и говорится, что массив основан на этом
базовом типе. Массивы могут быть основаны как на примитивных типах (например, для
хранения числовых значений 100 измерений), так и на ссылочных (например, если нужно
хранить описание 100 автомобилей в гараже в виде экземпляров класса Car).

Стр. 1 из 21

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

Rendered by 

www.RenderX.com


background image

Сразу оговоримся, что в Java массив символов char[] и класс String являются различными
типами. Их значения могут быть легко конвертированы друг в друга с помощью специальных
методов, но они все же не относятся к идентичным типам.

Как уже говорилось, в Java массивы являются объектами (примитивных типов в Java всего
восемь,  и  их  количество  не  меняется),  их  тип  напрямую  наследуется  от  класса  Object,
поэтому все элементы этого класса доступы у объектов-массивов.

Базовый тип может также быть массивом. Таким образом конструируется массив массивов,
или многомерный массив.

Работа с любым массивом включает в себя обычные операции, уже описанные для других
типов  -  объявление,  инициализация,  рассмотрение  элементов  и  т.д.  Начнем
последовательно изучать их в приложении к массивам.

2.1. Объявление массивов

В  качестве  примера  рассмотрим  объявление  переменной  типа  массив,  основанный  на
примитивном типе int

 

int a[]; 

Как  видно,  сначала  указывается  базовый  тип.  Затем  идет  имя  переменной,  а  пара
квадратных скобок указывает, что используемый тип является именно массивом. Также
допустимой записью является:

 

int[] a; 

Количество пар квадратных скобок указывает на размерность массива. Для многомерных
массивов допускается смешанная запись:

 

int[] a[]; 

Переменная a имеет тип "двумерный массив, основанный на int". Аналогично объявляются
массивы с базовым объектным типом:

 

Point p, p1[], p2[][]; 

Создание  переменной  типа  массив  еще  не  создает  экземпляры  этого  массива.  Такие
переменные имеют объектный тип и хранят ссылки на объекты, однако изначально имеют
значение null (если они являются полями класса; напомним, что локальные переменные
необходимо  явно  инициализировать).  Чтобы  создать  экземпляр  массива,  нужно
воспользоваться ключевым словом new, после чего указывается тип массива и в квадратных
скобках указывается длина массива.

 

int a[]=new int[5];

Point[] p = new Point[10]; 

Переменная инициализируется ссылкой, указывающей на только что созданный массив.
После его создания можно обращаться к элементам, используя ссылку на массив, далее
в квадратных скобках указывается индекс элемента. Индекс меняется от нуля, пробегая

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

Стр. 2 из 21

Массивы, как тип данных в Java

Rendered by 

www.RenderX.com


background image

всю длину массива, до максимально допустимого значения, на единицу меньшего длины
массива.

 

int array[]=new int[5];

for (int i=0; i<5; i++) {

   array[i]=i*i;

}

for (int j=0; j<6; j++) {

   System.out.println(j+"*"+j+"="+array[j]);

Результатом выполнения программы будет:

 

0*0=0

1*1=1

2*2=4

3*3=9

4*4=16 

И  далее  появится  ошибка  времени  исполнения,  так  как  индекс  превысит  максимально
возможное значение для такого массива. Проверка, что индекс не выходит за допустимые
пределы, происходит только во время исполнения программы, т.е. компилятор не пытается
выявить такую ошибку, даже в таких явных случаях, как, например:

 

int i[]=new int[5];

i[-2]=0; // ошибка! Индекс не может быть отрицательным 

Ошибка возникнет только на этапе выполнения программы.

Хотя при создании массива необходимо указывать его длину, это значение не входит в
определение типа массива, важна лишь размерность. Таким образом, одна переменная
может ссылаться на массивы разной длины:

 

int i[]=new int[5];

...

i=new int[7]; // переменная та же, длина массива другая 

Однако, для объекта массива длина обязательно должна указываться при создании и уже
никак не может быть изменена. В последнем примере для присвоения переменной ссылки
на массив большей длины потребовалось породить новый экземпляр.

Поскольку для экземпляра массива длина является постоянной характеристикой, для всех
массивов существует специальное поле length, позволяющее узнать ее значение. Например:

 

Point p[]=new Point[5];

for (int i=0; i<p.length; i++) {

   p[i]=new Point(i, i);

Объявление массивов

Стр. 3 из 21

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

Rendered by 

www.RenderX.com