Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

java / java-intro_part_1_ibm-developerworks

.pdf
Скачиваний:
100
Добавлен:
11.05.2015
Размер:
6 Mб
Скачать

02.09.13

Введениев Java-программирование: Часть 1. Основы языкаJava

 

 

 

www.ibm.com/developerworks/ru/edu/j-introtojava1/section12.html

4/4

02.09.13

Введениев Java-программирование: Часть 1. Основы языкаJava

 

IBM

 

 

 

 

 

Русский

 

Войти (или Регистрация)

Техническиематериалы ПробноеПО Сообщество

Введение в Java-программирование: Часть 1. Основы языка

Java

Объектно-ориентированное программирование на платформе Java

Дж. Стивен Перри, главный консультант, Makoto Consulting Group, Inc.

Описание: В этом руководствеиз двух частей рассказывается о структуре, синтаксисеи парадигмепрограммирования языка и платформы Java™. Читатели познакомятся с синтаксисом Java, с которым им, скореевсего, придется иметь дело в своей профессиональной деятельности, и выражениями Java-программирования, которыеможно использовать для построения надежных, удобных в сопровождении Java-приложений. В первой части Дж. Стивен Перри рассказывает об основах объектноориентированного программирования на платформеJava, включая основополагающий синтаксис Java и способы его использования. Для начала вы научитесь создавать Java-объекты и наделять их поведением, а в концеэтой части познакомитесь с коллекциями Java –и в промежуткевас тоже, конечно, ждект много интересного.

Дата: 26.10.2011

Уровеньсложности: простой

Активность: 381344 просмотров

Средний показатель рейтинга (основанный на 274 голосов)

Коллекции Java

Большинство реальных приложений имеет дело с группами сущностей: файлов, переменных, записей в файлах, результатов запросов к базеданных и т.п. Язык Java имеет мощную структуру коллекций, которая позволяет создавать и управлять группами объектов разного типа. Этот раздел –неполноеописаниеколлекций Java; он знакомит лишь с некоторыми наиболееупотребительными классами и учит работать с ними.

Массивы

Большинство языков программирования поддерживает концепцию массивов для хранения наборов предметов, и язык Java неявляется исключением. Массив –это нечто иное, как набор элементов одного и того жетипа.

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

Массив можно объявить двумя способами:

с определенной размерностью, фиксированной на весь срок службы массива; с определенным набором начальных значений. Размерность этого множества определяет размер массива –он будет в

точности таким, чтобы вместить всеэти значения, и его размер будет оставаться неизменным в течениевсего срока службы массива.

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

В общем случаемассив объявляется так:

new elementType [arraySize]

Существует два способа создания массива целочисленных элементов. Этот оператор создает пустой массив на пять элементов:

// создает пустой массив на 5 элементов: int[] integers = new int[5];

Этот оператор создает массив и сразу всеинициализирует:

www.ibm.com/developerworks/ru/edu/j-introtojava1/section13.html

1/7

02.09.13

Введениев Java-программирование: Часть 1. Основы языкаJava

// создает массив из 5 элементов со значениями: int[] integers = new int[] { 1, 2, 3, 4, 5 };

Начальныезначения заключены в фигурныескобки и разделяются запятыми.

Трудныйспособ созданиямассивов

Болеетрудный способ создания массива заключается в том, чтобы создать его вместес циклом инициализации его элементов:

int[] integers = new int[5];

for (int aa = 0; aa < integers.length; aa++) { integers[aa] = aa;

}

Этот кодобъявляет целочисленный массив из пяти элементов. Если попытаться вставить в массив большепяти элементов, среда исполнения Java пожалуется и выдаст исключение. Об исключениях и о том, как с ними справиться, мы поговорим в Части 2.

Загрузкамассива

Чтобы загрузить массив, нужно перебрать целыечисла от 1 до длины массива (которую можно определить, вызвав параметр

.lengthэтого массива –подробнееоб этом ниже). В данном случаемы останавливаемся на 5.

Как только массив загружен, к нему можно обращаться, как мы делали это выше:

Logger l = Logger.getLogger("Test");

for (int aa = 0; aa < integers.length; aa++) {

l.info("This little integer's value is: " + integers[aa]);

}

Работает такжеследующий синтаксис (впервыепоявившийся в JDK 5):

Logger l = Logger.getLogger("Test"); for (int i : integers) {

l.info("This little integer's value is: " + i);

}

Ясчитаю, что новый синтаксис проще, и в этом разделебуду использовать именно его.

Индекс элемента

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

element = arrayName [elementIndex];

Чтобы извлечь элемент, нужно обратиться к массиву (по имени) и указать индекс местоположения элемента.

Метод length

Вы ужезнакомы с удобным методом length. Это встроенный метод, поэтому его синтаксис невключает обычных скобок. Достаточно ввести слово length, и вы получитедлину массива.

В языкеJava массивы начинаются с нулевой позиции. Так что первый элемент некоторого массива с именем arrayвсегда

находится по адресу array [0], а последний –array[array.length – 1].

Массивобъектов

Вы видели массивы простых типов, но они могут содержать и объекты. Поэтому массив в языкеJava –наиболеечасто употребляемая коллекция.

www.ibm.com/developerworks/ru/edu/j-introtojava1/section13.html

2/7

02.09.13

Введениев Java-программирование: Часть 1. Основы языкаJava

Созданиемассива объектов java.lang.Integerнесильно отличается от создания массива простых типов. Опять же, это можно сделать двумя способами:

//создает пустой массив на 5 элементов: Integer[] integers = new Integer[5];

//создает массив из 5 элементов со значениями: Integer[] integers = new Integer[] { Integer.valueOf(1),

Integer.valueOf(2)

Integer.valueOf(3)

Integer.valueOf(4)

Integer.valueOf(5));

Упаковка и распаковка

Для каждого простого типа в языкеJava имеется JDK-аналог, как видно из таблицы 4.

Таблица4. Простые классы иих JDK-аналоги

 

Простойкласс

JDK-аналог

boolean

java.lang.Boolean

byte

java.lang.Byte

char

java.lang.Character

short

java.lang.Short

int

java.lang.Integer

long

java.lang.Long

float

java.lang.Float

double

java.lang.Double

Каждый JDK-класс предоставляет методы для анализа и преобразования из своего внутреннего представления в соответствующий простой тип. Например, следующий кодпреобразует десятичноезначение238 в Integer:

int value = 238;

Integer boxedValue = Integer.valueOf(value);

Этот подходназывается упаковкой, потому что простой тип помещается в обертку, или конверт.

Аналогично, для преобразования представления Integerобратно в его аналог int, его надо распаковать:

Integer boxedValue = Integer.valueOf(238); int intValue = boxedValue.intValue();

Автоматическаяупаковкаираспаковка

Строго говоря, нет необходимости явно упаковывать и распаковывать простыетипы. Вместо этого можно использовать функции автоматической упаковки и распаковки языка Java, например:

int intValue = 238;

Integer boxedValue = intValue;

//

intValue = boxedValue;

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

Анализ ипреобразование упакованных типов

Мы видели, как получить упакованный тип, но как поместить строку, которая, как вы подозреваете, имеет упакованный тип, в нужный конверт? Классы упаковки JDK предусматривают методы и для этого:

www.ibm.com/developerworks/ru/edu/j-introtojava1/section13.html

3/7

02.09.13

Введениев Java-программирование: Часть 1. Основы языкаJava

String characterNumeric = "238";

Integer convertedValue = Integer.parseInt(characterNumeric);

Такжеможно преобразовать содержимоеупакованного типа JDK в строку:

Integer boxedValue = Integer.valueOf(238);

String characterNumeric = boxedValue.toString();

Обратитевнимание, что при использовании оператора конкатенации в выражении String(мы ужесталкивались с этим при вызовах Logger) простой тип автоматически упаковывается, а упакованныетипы автоматически вызываются посредством toString(). Очень удобно.

Списки

Списокпредставляет собой коллекцию, которая по определению упорядочена, то есть является последовательностью. Так как списокупорядочен, можно полностью управлять тем, куда помещаются его элементы. Коллекция Java Listможет содержать только объекты и строго регламентирует их поведение.

List–это интерфейс, так что его экземпляр нельзя создать напрямую. Обычно работают с его реализацией ArrayList:

List<Object> listOfObjects = new ArrayList<Object>();

Обратитевнимание, что мы присвоили объект ArrayListпеременной типа List. Язык Java позволяет присваивать переменную одного типа переменной другого типа, если это переменная суперкласса или интерфейс, реализованный присваиваемой переменной. Мы рассмотрим процесс присвоения переменных в разделеНаследованиеЧасти 2.

Формальныйтип

А что такое<Object>в приведенном вышефрагментекода? Это формальный тип, что указывает компилятору на то, что список Listсодержит коллекцию типа Object, то есть в Listможно помещать что угодно.

Если нужно ужесточить ограничения на то, что можно или нельзя помещать в список List, это определениеследует переписать так:

List<Person> listOfPersons = new ArrayList<Person>();

Теперь список Listможет содержать только экземпляры Person.

Использование списков

Использовать спискиочень легко, как и коллекции Java в целом. Вот некоторыеиз вещей, которыеможно делать со списками:

поместить что-либо в список;

спросить, насколько велик списокв данный момент; извлечь что-то из списка.

Давайтепопробуем некоторыеиз них. Вы ужевидели, как создать экземпляр List, создав экземпляр его типа реализации ArrayList , так что с этого и начнем.

Чтобы поместить что-то в список List, нужно вызвать методadd():

List<Integer> listOfIntegers = new ArrayList<Integer>(); listOfIntegers.add(Integer.valueOf(238));

Методadd()добавляет элемент в конец списка.

Чтобы узнать длину списка, нужно вызвать методsize():

www.ibm.com/developerworks/ru/edu/j-introtojava1/section13.html

4/7

02.09.13

Введениев Java-программирование: Часть 1. Основы языкаJava

List<Integer> listOfIntegers = new ArrayList<Integer>(); listOfIntegers.add(Integer.valueOf(238));

Logger l = Logger.getLogger("Test");

l.info("Current List size: " + listOfIntegers.size());

Чтобы извлечь элемент из списка, нужно вызвать методget()и передадть ему индекс требуемого элемента:

List<Integer> listOfIntegers = new ArrayList<Integer>(); listOfIntegers.add(Integer.valueOf(238));

Logger l = Logger.getLogger("Test");

l.info("Item at index 0 is: " listOfIntegers.get(0));

На практикесписок будет содержать записи, или бизнес-объекты, и для их обработки может потребоваться полный перебор. Как это сделать в общем виде? Нужно перебрать коллекцию, что можно сделать, потому что список реализует интерфейс java.lang.Iterable. (Об интерфейсах мы поговорим в Части 2.)

Перебираемая коллекция

Если коллекция реализует интерфейс java.lang.Iterable, она называется перебираемой (iterable) коллекцией. Это означает, что можно начать с одного конца и перебрать всю коллекцию, элемент за элементом.

В разделеЦиклы мы ужерассматривали специальный синтаксис для итерации по коллекциям, которыереализуют интерфейс Iterable. Вот он ещераз:

for (objectType varName : collectionReference) {

// Начинаем сразу с использования ObjectType (через varName)...

}

Перебор элементовсписка

Предыдущий пример был абстрактным; а вот болеереалистичный:

List<Integer> listOfIntegers = obtainSomehow(); Logger l = Logger.getLogger("Test");

for (Integer i : listOfIntegers) { l.info("Integer value is : " + i);

}

Этот короткий фрагмент кода делает то жесамое, что и болеедлинный:

List<Integer> listOfIntegers = obtainSomehow(); Logger l = Logger.getLogger("Test");

for (int aa = 0; aa < listOfIntegers.size(); aa++) { Integer I = listOfIntegers.get(aa); l.info("Integer value is : " + i);

}

В первом фрагментеиспользуется сокращенный синтаксис: в нем нет индекснойпеременной (в данном случаеаа) для инициализации и нет вызова метода get()по отношению к списку.

Так как List–это продолжениеколлекции java.util.Collection, которая реализует интерфейс Iterable, для перебора любого списокаможно использовать сокращенный синтаксис.

Наборы

Набор (Set)–это коллекция, которая, по определению, содержит уникальныеэлементы –без дубликатов. Если списокможет содержать одни и тежеобъекты сотни раз, то наборможет содержать данный объект только один раз. Коллекция Java Set может содержать только объекты и строго регламентирует их поведение.

Так как Setявляется интерфейсом, нельзя создать его экземпляр непосредственно, и я покажу вам один из моих любимых способов его реализации: HashSet. HashSetпрост в использовании и напоминает List.

www.ibm.com/developerworks/ru/edu/j-introtojava1/section13.html

5/7

02.09.13 Введениев Java-программирование: Часть 1. Основы языкаJava

Вот некоторыеиз вещей, которыеможно делать с набором:

поместить что-то в набор;

спросить, насколько велик наборв данный момент; извлечь что-то из набора.

Использование наборов

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

Set<Integer> setOfIntegers = new HashSet<Integer>(); setOfIntegers.add(Integer.valueOf(10)); setOfIntegers.add(Integer.valueOf(11)); setOfIntegers.add(Integer.valueOf(10));

for (Integer i : setOfIntegers) { l.info("Integer value is: " + i);

}

Можно было бы ожидать, что набор Setсостоит из трех элементов, но на самом делев нем только два элемента, потому что объект Integerсо значением 10будет добавлен только один раз.

Имейтеэто в виду при переборенаборов:

Set<Integer> setOfIntegers = new HashSet(); setOfIntegers.add(Integer.valueOf(10)); setOfIntegers.add(Integer.valueOf(20)); setOfIntegers.add(Integer.valueOf(30)); setOfIntegers.add(Integer.valueOf(40)); setOfIntegers.add(Integer.valueOf(50)); Logger l = Logger.getLogger("Test");

for (Integer i : setOfIntegers) { l.info("Integer value is : " + i);

}

Скореевсего, объекты будут выведены нев том порядке, в каком их добавляли, потому что Setгарантирует уникальность, но непорядок. Вы убедитесь в этом, если вставитеприведенный вышекодв методmain()своего класса Personи выполнитеего.

Отображения

Отображение (Map)–это удобная коллекция, которая позволяет связать один объект (ключ), с другим (значение). Естественно, ключ отображениядолжен быть уникальным, и он используется для последующего извлечения значений. Коллекция Java Map может содержать только объекты и строго регламентирует их поведение.

Так как Mapявляется интерфейсом, нельзя создать его экземпляр непосредственно, и я покажу вам один из моих любимых способов его реализации: HashMap.

Вот некоторыеоперации, которыеможно проводить с отображениями:

поместить что-то в отображение;

извлечь что-то из отображения; получить набор ключей отображения–для его перебора.

Использование отображений

Чтобы поместить что-то в отображение, нужно иметь объект-ключ и объект-значение:

public Map<String, Integer> createMapOfIntegers() {

Map<String, Integer> mapOfIntegers = new HashMap<String, Integer>(); mapOfIntegers.put("1", Integer.valueOf(1));

mapOfIntegers.put("2", Integer.valueOf(2)); mapOfIntegers.put("3", Integer.valueOf(3)); // . . .

mapOfIntegers.put("168", Integer.valueOf(168));

}

В этом примереMapсодержит объекты типа Integerс ключом типа String, который служит их строковымпредставлением.

www.ibm.com/developerworks/ru/edu/j-introtojava1/section13.html

6/7

02.09.13

Введениев Java-программирование: Часть 1. Основы языкаJava

Чтобы получить определенноезначениеInteger, требуется его строковоепредставление:

mapOfIntegers = createMapOfIntegers();

Integer oneHundred68 = mapOfIntegers.get("168");

Использование наборавместе с отображением

В некоторых случаях приходится перебирать весь набор элементов отображения. Для этого понадобится наборключей к этому

отображению:

Set<String> keys = mapOfIntegers.keySet(); Logger l = Logger.getLogger("Test");

for (String key : keys) {

Integer value = mapOfIntegers.get(key);

l.info("Value keyed by '" + key + "' is '" + value + "'");

}

Обратитевнимание, что при использовании вызова LoggerметодtoString()класса Integer, извлекаемый из отображения, вызывается автоматически. Отображениеневозвращает спискасвоих ключей, потому что каждый ключ уникален, а уникальность –признак набора.

13 из 18 | предыдущая | следующая

Печатьстраницы

Сделать этустраницуобщей

 

 

Помощь

 

Ленты

Конфиденциальность

Портал для студентов

Запрос на использование

Сообщить о нарушениях

Доступность (Английский)

Бизнес-партнеры IBM

материалов developerWorks

Условия использования

 

 

 

 

 

 

 

 

 

 

 

www.ibm.com/developerworks/ru/edu/j-introtojava1/section13.html

7/7

02.09.13

Введениев Java-программирование: Часть 1. Основы языкаJava

 

IBM

 

 

 

 

 

Русский

 

Войти (или Регистрация)

Техническиематериалы ПробноеПО Сообщество

Введение в Java-программирование: Часть 1. Основы языка

Java

Объектно-ориентированное программирование на платформе Java

Дж. Стивен Перри, главный консультант, Makoto Consulting Group, Inc.

Описание: В этом руководствеиз двух частей рассказывается о структуре, синтаксисеи парадигмепрограммирования языка и платформы Java™. Читатели познакомятся с синтаксисом Java, с которым им, скореевсего, придется иметь дело в своей профессиональной деятельности, и выражениями Java-программирования, которыеможно использовать для построения надежных, удобных в сопровождении Java-приложений. В первой части Дж. Стивен Перри рассказывает об основах объектноориентированного программирования на платформеJava, включая основополагающий синтаксис Java и способы его использования. Для начала вы научитесь создавать Java-объекты и наделять их поведением, а в концеэтой части познакомитесь с коллекциями Java –и в промежуткевас тоже, конечно, ждект много интересного.

Дата: 26.10.2011

Уровень сложности: простой

Активность: 381344 просмотров

Средний показатель рейтинга (основанный на 274 голосов)

АрхивированиеJava-кода

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

Файлы JAR

В JDK входит инструмент JAR, что означает Java Archive. С его помощью можно создавать файлы JAR. Если упаковать кодв файл JAR, другиеразработчики могут просто загрузить этот файл в свои проекты и настраивать их на использованиевашего кода.

Создать файл JAR в Eclipseсовсем несложно. В рабочем пространствещелкнитеправой кнопкой мыши на пакете com.makotogroup.introи выберитеExport. Вы увидитедиалоговоеокно, показанноена рисунке8. ВыберитеJava >JAR file.

Рисунок 8. Диалоговое окно экспорта.

www.ibm.com/developerworks/ru/edu/j-introtojava1/section14.html

1/3

02.09.13

Введениев Java-программирование: Часть 1. Основы языкаJava

Когда откроется следующеедиалоговоеокно, перейдитев папку, гдевы хотитесохранить свой файл JAR, и присвойтефайлу желаемоеимя. .jar –это расширениепо умолчанию, котороея рекомендую использовать. Затем нажмитекнопку Finish.

Вы увидитесвой файл JAR в выбранном месте. Если вы поместитеего в свою папку сборки в Eclipse, то можетеиспользовать классы из собственного кода. Это тожесовсем несложно, как вы увидитедальше.

Использование сторонних приложений

Когда вы освоитеJava-программирование, вам придется использовать всебольшеи большеприложений сторонних разработчиков для поддержки собственного кода. Например, допустим, что нужно использовать joda-time, библиотеку, заменяющую JDK, для управления, манипуляций и расчетов, связанных с датами/временем.

Предположим, что вы ужезагрузили joda-timeв видефайла JAR. Чтобы использовать классы, нужно создать в своем проекте каталог lib и поместить туда файл JAR.

1.Щелкнитеправой кнопкой мыши на корневой папкеIntro в окнеProject Explorer.

2.ВыберитеNew >Folder и назовитепапку lib.

3.Нажмитекнопку Finish.

Новая папка появится на том жеуровне, что и src. Теперь скопируйтефайл joda-time.jar в новый каталог lib. В этом примере файл называется joda-time-1.6.jar. (Как правило, в имя JAR-файла включают номер версии.)

Осталось только проинструктировать Eclipse, чтобы он включил классы из файла joda-time-1.6.jarв ваш проект.

1.Щелкнитеправой кнопкой мыши на проектеIntro в рабочей области, а затем выберитеProperties.

2.В диалоговом окневыберитевкладку Libraries, как показано на рисунке9.

Рисунок 9. Properties >Java Build Path

3.Нажмитекнопку Add External JAR, а затем перейдитев каталог lib проекта, выберитефайл joda-time-1.6.jar и нажмите кнопку OK.

Как только Eclipseобработает код(то есть файлы классов) в файлеJAR, они станут доступны для ссылки (импорта) в ваш код Java. Обратитевнимание, что в Project Explorer появилась новая папка с именем Referenced Libraries, которая содержит файл joda-time-1.6.jar.

14 из 18 | предыдущая | следующая

Печатьстраницы

Сделать этустраницуобщей

 

 

Помощь

 

Ленты

Конфиденциальность

Портал для студентов

Запрос на использование

Сообщить о нарушениях

Доступность (Английский)

Бизнес-партнеры IBM

материалов developerWorks

Условия использования

 

 

 

 

 

 

www.ibm.com/developerworks/ru/edu/j-introtojava1/section14.html

2/3

Соседние файлы в папке java