Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы Рыков.docx
Скачиваний:
103
Добавлен:
21.04.2015
Размер:
305.38 Кб
Скачать

Документация

Предположим, определения класса начинается с комментариев, содержащих важную информацию:

public class Generation3List extends Generation2List {

   // Author: John Doe

   // Date: 3/17/2002

   // Current revision: 6

   // Last modified: 4/12/2004

   // By: Jane Doe

   // Reviewers: Alice, Bill, Cindy

   // class code goes here

 

}

Для того чтобы записать то же самое в виде аннотации, нам необходимо сначала определить тип аннотации (annotation type):

1

2

3

4

5

6

7

8

@interface ClassPreamble {

   String author();

   String date();

   int currentRevision() default 1;

   String lastModified() default "N/A";

   String lastModifiedBy() default "N/A";

   String[] reviewers();

}

Объявление выглядит как объявление интерфейса, за исключением предшествующего ключевому слову interface символа @. Тело аннотации содержит описание элементов аннотации, которое выглядит как описание методов. Обратите внимание, что можно задать значения по умолчанию. Объявив наш тип аннотации мы можем его использовать:

@ClassPreamble (

   author = "John Doe",

   date = "3/17/2002",

   currentRevision = 6,

   lastModified = "4/12/2004",

   lastModifiedBy = "Jane Doe",

   // Note array notation

   reviewers = {"Alice", "Bob", "Cindy"}

)

public class Generation3List extends Generation2List {

 // код класса

}

Для того, чтобы наши аннотации появлялись в в документации, создаваемой Javadoc, необходимо перед объявлением @ClassPreamble добавить аннотацию @Documented. Для этого необходимо подключить библиотеку java.lang.annotation :

1

2

3

4

5

6

7

// для использования @Documented

import java.lang.annotation.*;

 

@Documented

@interface ClassPreamble {

 

   // Annotation element definitions

Аннотации, используемые компилятором

Существует 3 зарезервированных типа аннотаций в Java: @Deprecated, @Override, и @SuppressWarnings.

@Deprecated — аннотация @Deprecated помечает объект как устаревший, это означает, что его не следует использовать. Компилятор создает предупреждение, если программа использует методы, поля или классы, помеченные как устаревшие. Если метод устарел он должен быть задокументирован с помощью тега Javadoc @deprecated, как в следующем примере:

1

2

3

4

5

6

7

8

// Javadoc comment

    /**

     * @deprecated

     * explanation of why it

     * was deprecated

     */

    @Deprecated

    static void deprecatedMethod() { }

@Override — аннотация @Override сообщает компилятору, что мы собираемся переопределить метод родительского класса.

1

2

@Override

int overriddenMethod() { }

@SuppressWarnings — аннотация @SuppressWarnings используется для устранения предупреждений, создаваемых компилятором. В следующем примере мы используем устаревший метод, без аннотации @SuppressWarnings компилятор сгенерирует соответствующее предупреждение.

1

2

3

4

5

// говорим компилятору не выводить предупреждение

@SuppressWarnings("deprecation")

 void useDeprecatedMethod() {

     objectOne.deprecatedMethod();

 }

40.Стандартная библиотека коллекций языка Java. Интерфейсы, реализации и алгоритмы коллекций. Структура библиотеки коллекций. Коллекции, множества и списки. Использование реализаций интерфейсов коллекций. Карты (maps) в библиотеке коллекций. Использование различных реализаций карт. Итераторы карт и коллекций. Стандартные алгоритмы библиотеки для работы с коллекциями и массивами.

Классы-коллекции

Понятие коллекции

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

В программировании давно и эффективно используются такие структуры данных как стек, очередь, список, множество и т.д., объединенные общим названием коллекция. Коллекция — это группа элементов с операциями добавления, извлечения и поиска элемента. Механизм работы операций существенно различается в зависимости от типа коллекции. Например, элементы стека упорядочены в последовательность, добавление нового элемента может происходить только в конец этой последовательности, и получить можно только элемент, находящийся в конце (то есть, добавленный последним). Очередь, напротив, позволяет получить лишь первый элемент (элементы добавляются в один конец последовательности, а «забираются» с другого). Другие коллекции (например, список) позволяют получить элемент из любого места последовательности, а множество вообще не упорядочивает элементы и позволяет (помимо добавления и удаления) только узнать, содержится ли в нем данный элемент.

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

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

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