Авторские Материалы о событиях в Израиле на Ближнем Востоке и в мире

IsraMir.com - Израильская журналистика

Default color brown color green color red color blue color
Вы сейчас тут: Новости arrow Техотдел arrow Свет ученья arrow Массивы в Java
Skip to content
Массивы в Java - Эту статью я решил написать... Версия для печати Отправить на e-mail
Содержание
Эту статью я решил написать...
Многомерные массивы
Saturday, 15 April 2006 | Евгений Матюшкин aka Skipy (skiрy mаil.ru) для раздела Ученье – свет
МассивывJavaisramir.comЭту статью я решил написать по следам одной дискуссии в форуме. Она будет посвящена массивам в Java. Честно сказать, мне не удается припомнить какой-либо книги, где этот вопрос был бы освещен четко и внятно. Между тем, массивы в Java серьезно отличаются от массивов в любом другом языке, которые я когда-либо видел. И знание этих отличий весьма и весьма необходимо.
 
 
Небольшое замечание с самого начала. Массив, какого бы типа и размерности он ни был, является объектом. Это значит, что он обладает всеми свойствами и методами объекта.
Итак, начнем мы с простейших случаев, а именно…
 
Эти массивы практически не отличаются от того, к чему привыкли программисты, использующие другие языки. Создание массива производится с помощью все того же оператора new:
 
// creating array of integers with 5 elements:
int array[] = new int[5];
 
В отличие от других языков, правда, в Java есть пара приятных мелочей. Первое - размер массива может быть запрошен явно, через свойство .length:
int array[] = new int[5];
System.out.println("Array size: "+array.length);
// will print: Array size: 5
 
Свойство это является final, потому выставить через него новый размер массива, увы, не получится.
 
Вторая мелочь - контроль выхода за границы массива. Это делает интерпретатор, в случае выхода индекса за пределы массива будет инициировано исключение java.lang.ArrayIndexOutOfBoundsException. Перехватывать его не обязательно, и, я бы даже сказал, нежелательно, т.к. это RuntimeException и сигнализирует оно о том, что программа работает неправильно. И уж совсем не стоит проектировать приложение в расчете на то, что после прохождения всего массива будет брошено это исключение, и это будет сигналом к завершению цикла обработки. Это очень плохая идея.
 
После создания массив инициализируется значением по умолчанию для типа его элементов. Это гарантируется спецификацией языка.
 
Есть одна тонкость. При создании размер массива может быть задан равным 0. Это будет вполне полноценный массив, содержащий 0 элементов. Его свойство .length равно 0. Такая конструкция временами оказывается весьма полезной.
 
Пара слов о копировании. Тривиальный способ - создать массив такого же размера и в цикле перенести содержимое. Хорошо, надежно, но не очень быстро. Есть способ быстрее - использовать метод System.arraycopy(...). В этом методе после всех проверок происходит просто копирование области памяти.
Сигнатура этого метода такая:
 
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
 
Копирование происходит из массива src, начиная с позиции srcPos, в массив dest, начиная с позиции destPos. Всего копируется length элементов. Обратите внимание, что src и dest имеют тип Object. Это сделано для того, чтобы этот метод мог обрабатывать массивы любого типа. Если src или dest не является массивом, будет инициировано исключение java.lang.ArrayStoreException.
 


 

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:


Автотранслитерация: выключена

Защитный код

Powered by jComments