Перечисления в Java (enum java) — TechCave

Перечисления служат для представления группы именованных констант на языке программирования.

Перечисления в Java (enum java)

JAVA

Перечисления в Java (enum java)

Перечисления служат для представления группы именованных констант на языке программирования. Например, 4 масти в колоде игральных карт могут быть 4 перечислениями по имени «Черви», «Бубни», «Крести», «Пики», принадлежащие перечисляемому типу под названием «Масть». Другими примерами могут быть естественные перечисляемые типы (например, планеты, дни недели, цвета, направления и т. д.).

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

В Java (от версии 1.5) перечисления представлены с использованием типа данных enum. Перечисления Java более мощные, чем перечисления C/C++. В Java мы также можем добавить переменные, методы и конструкторы. Основная цель перечисления — определить наши собственные типы данных (Перечисляемые типы данных).

Объявление перечисления в java:

  • Объявление Enum может быть вне класса или внутри класса, но не внутри метода.
// Простой пример enum, где enum определена
// вне класса
enum Color
{
    RED, GREEN, BLUE;
}
public class Test
{
    // Главный метод
    public static void main(String[] args)
    {
        Color c1 = Color.RED;
        System.out.println(c1);
    }
}

Вывод:

RED
// enum определена внутри класса.
public class Test
{
    enum Color
    {
        RED, GREEN, BLUE;
    }
    // Главный метод
    public static void main(String[] args)
    {
        Color c1 = Color.RED;
        System.out.println(c1);
    }
}

Вывод:

RED
  • Первая строка внутри enum должна быть списком констант, а затем другие вещи, такие как методы, переменные и конструктор.
  • Согласно соглашению о присвоении имен Java, рекомендуется, чтобы мы называли константу прописными буквами.

Важные моменты enum:

  • Каждое перечисление, может быть имплементировано с использованием класса.
/* Определенное выше enum Color конвертируется в класс Color
class Color
{
     public static final Color RED = new Color();
     public static final Color BLUE = new Color();
     public static final Color GREEN = new Color();
}*/
  • Каждая константа перечисления представляет собой объект типа enum.
  • Тип перечисления может быть передан в качестве аргумента для оператора switch.
// Программа на Java для демонстрации работы enum
// совместно со switch case
import java.util.Scanner;
// Класс Enum
enum Day
{
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY;
}
// Главный класс, который содержит объект "day" и
// метод main().
public class Test
{
    Day day;
    // Конструктор
    public Test(Day day)
    {
        this.day = day;
    }
    // Печатаем строку Day используя switch
    public void dayIsLike()
    {
        switch (day)
        {
        case MONDAY:
            System.out.println("Mondays are bad.");
            break;
        case FRIDAY:
            System.out.println("Fridays are better.");
            break;
        case SATURDAY:
        case SUNDAY:
            System.out.println("Weekends are best.");
            break;
        default:
            System.out.println("Midweek days are so-so.");
            break;
        }
    }
    // Главный метод
    public static void main(String[] args)
    {
        String str = "MONDAY";
        Test t1 = new Test(Day.valueOf(str));
        t1.dayIsLike();
    }
}

Вывод:

Mondays are bad.
  • Каждая константа перечисления всегда неявно является public static final. Поскольку она является static, мы можем получить к ней доступ, используя имя перечисления. Поскольку она final, мы не можем создавать дочерние перечисление.
  • Мы можем объявить метод main() внутри enum. Следовательно, мы можем вызывать перечисление непосредственно из командной строки.
// Программа на Java для демонстрации, как это можно сделать
// main() внутри enum.
enum Color
{
    RED, GREEN, BLUE;
    // Главный метод
    public static void main(String[] args)
    {
        Color c1 = Color.RED;
        System.out.println(c1);
    }
}

Вывод:

RED

Enum и наследование:

  • Все перечисления неявно расширяют (extend) класс java.lang.Enum. Поскольку класс может расширять только один родительский в языке Java, то перечисление не может расширять что-либо еще.
  • Метод toString () переопределен в классе java.lang.Enum, который возвращает имя переменной enum.
  • enum может реализовать (implement) множество интерфейсов.

values(), ordinal() и valueOf() методы:

  • Эти методы присутствуют внутри java.lang.Enum.
  • values() метод может использоваться для возврата всех значений, присутствующих внутри enum.
  • Порядок важен для перечисления. Используя метод ordinal(), каждый константный индекс enum может быть найден точно так же, как индекс массива.
  • Метод valueOf () возвращает константу перечисления указанного значения строки.
// Java программа для демонстрации работы values(),
// ordinal() и valueOf()
enum Color
{
    RED, GREEN, BLUE;
}
public class Test
{
    public static void main(String[] args)
    {
        // Вызываем values()
        Color arr[] = Color.values();
        // enum совместно с циклом
        for (Color col : arr)
        {
            // Вызываем ordinal() для поиска индекса
            // цвета.
            System.out.println(col + " at index "
                             + col.ordinal());
        }
        // Используем valueOf(). Возвращает объект 
        // Color по константе.
        // Недопустимая вторая строка вызывает исключение
        // IllegalArgumentException
        System.out.println(Color.valueOf("RED"));
        // System.out.println(Color.valueOf("WHITE"));
    }
}

Вывод:

RED at index 0
GREEN at index 1
BLUE at index 2
RED

Enum и конструктор:

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

Enum и методы:

  • перечисление может содержать конкретные методы, т. е. не может содержать абстрактного метода.
// Программа на Java для демонстрации того, сто enums может содержать конструктор
// и конкретные методы.
enum Color
{
    RED, GREEN, BLUE;
    // enum конструктор вызывается отдельно для каждой
    // константы
    private Color()
    {
        System.out.println("Constructor called for : " +
        this.toString());
    }
    // Только конкретные (не абстрактные) методы доступны
    public void colorInfo()
    {
        System.out.println("Universal Color");
    }
}
public class Test
{    
    // Главный метод
    public static void main(String[] args)
    {
        Color c1 = Color.RED;
        System.out.println(c1);
        c1.colorInfo();
    }
}

Вывод:

Constructor called for : RED
Constructor called for : GREEN
Constructor called for : BLUE
RED
Universal Color
19:03
94
Den

Нет комментариев. Ваш будет первым!

Авторизация

Пользователи

lunchcalllina1978
Sever
stopresniebots1983
tekino
templide
Seangle
Галя Рубцова
Ольга Телюкова
Zhenya