• По сути это внутренний итератор.
• Переменная цикла доступна только для чтения (Другими словами, Вы не можете изменить содержимое массива, присваивая переменной цикла новое значение).
• Порядок обхода в целом не определен.
• Нет доступа к соседним элементам.
• Агрегат обязан реализовывать интерфейс java . lang . Iterable < T > (Это настраивыемый интерфейс, где T — тип элемента, который будет храниться в объекте, а также тип объекта, получаемого в каждом проходе тела цикла for ).
• Этот интерфейс содержит лишь один элемент
Iterator < T > iterator ().
• Данный, вроде бы знакомый, интерфейс, тоже претерпел некоторые изменения:
– boolean hasNext () - Возвращает true, если есть еще элементы. В противном случае— false
– void remove () - Удаляет текущий элемент. Этот метод необязателен. Генерирует исключение типа UnsupportedoperationException, если это действие не реализовано.
– T next () - Возвращает следующий элемент. Генерирует исключение типа NoSuchElementException, если нет следующего элемента
Вывод
Область применения обобщенного цикла for «несколько уже», чем у «необобщенной» версии. Зато для этого класса задач (поиск среднего арифметического, поиск минимального или максимального значения в наборе, поиск дублирующих значений и т. д.) синтаксис обобщенного цикла существенно удобнее.
Перечислимые типы
В простейшей форме перечислимый тип — это список именованных констант. Хотя язык Java предлагал другие способы для реализации подобной функциональности, например переменные с модификатором поля final, программисты были лишены перечислимого типа, который поддерживается в других популярных языках программирования. С выходом Java 2 версии 5.0 перечислимый тип стал доступен и программистам, пишущим на языке Java.
Имеется:
• class Apple {
• public static final int JONATHAN = 0;
• public static final int GOLDENDEL = 1;
• public static final int REDDEL = 2;
• public static final int WINESAP = 3;
• public static final int CORTLAND = 4;
• }
• Хотелось бы:
• enum Apple {
• Jonathan, GoldenDel, RedDel, Winesap, Cortland
• }
Перечислимый тип создается с помощью нового ключевого слова enum. Например, в фрагменте кода, приведенном выше, приведен пример простого перечислимого типа, в который включены разные сорта яблок.
Перечислимый тип Apple. Идентификаторы Jonathan, GoldenDel и так далее называются константами перечислимого типа (enumeration constants). Каждая объявляется неявно общедоступным, статическим членом класса Apple. После того как вы описали перечислимый тип, можете создать переменную этого типа. Но, несмотря на то, что перечислимые типы определены как классы, вы не можете создать экземпляр типа enum с помощью операции new. Вместо этого вы объявляете и используете переменную перечислимого типа почти так же, как вы поступаете с переменными одного из базовых типов, таких как int или char. В следующей строке приведен пример объявления ар как переменной класса перечислимого типа Apple:
Apple ap;
Поскольку у переменной ар тип Apple, ей можно присвоить (или она может содержать) только те значения, которые определены в классе Apple. В следующей строке приведено присваивание переменной ар значения RedDel, обратите внимание на то, что наименованию RedDel предшествует имя Apple
ap = Apple.RedDel;
Можно проверить равенство двух констант перечислимого типа с помощью операции отношения = =. В следующей строке приведен пример сравнения переменной ар с константой GoldenDel.
if(ар = = Apple.GoldenDel) //
Значение перечислимого типа можно использовать для управления оператором switch. Конечно, во всех операторах сазе должны быть константы того же перечислимого типа, который используется в условном выражении оператора switch. Оператор switch, приведенный в следующих строках, вполне корректен.
• switch(ap) {
• case Jonathan: //...
• case Winsap: //...
• default: //...
• }
Обратите внимание на то, что в операторах case используются имена констант перечислимого типа без уточнения с помощью имени их класса. Просто Winsap, а не Apple.Winsap. Такой способ задания имени возможен, по тому, что перечислимый тип в выражении оператора switch уже неявным образом задал тип констант в операторах case, поэтому нет необходимости задавать в них константы с указанием их имени типа.
Во все перечислимые типы автоматически включены два метода: values() и vaiueOf(). Их синтаксическая запись приведена в следующих строках:
public static enumType[] values()
возвращает ссылку на массив ссылок на все константы перечислимого типа
Apple[] allApples = Apple.values();
Дата: 2019-02-19, просмотров: 235.