> For the complete documentation index, see [llms.txt](https://qatesting.gitbook.io/qa/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://qatesting.gitbook.io/qa/java/variables-and-types/special-types.md).

# Special Types

An **enum** is a special data type that defines a fixed set of constant values👉 {VALUE1, VALUE2, VALUE3}

To define an enum:

```java
public enum Day {
  MONDAY, 
  TUESDAY, 
  WEDNESDAY  
}
```

To use an enum:

```java
Day day = Day.MONDAY;

if(day == Day.MONDAY) {
  😀 // Do something
}
```

**Benefits:**

* 📏 Defines a fixed set of values that is clear and understandable
* 🔒 Limits variables to only those values, increasing program integrity
* 🖥️ Concise and readable code using human-friendly labels vs integers
* 🤖 Useful for representing defined, unchanging categories like statuses, states, options

## Example

```java
public class Main {

  // Define Weekday enum with constant values 
  public enum Weekday {
    MONDAY, 
    TUESDAY, 
    WEDNESDAY, 
    THURSDAY, 
    FRIDAY, 
    SATURDAY, 
    SUNDAY
  }

  public static void main(String[] args) {
  
    // Create Weekday variables using enum values
    Weekday today = Weekday.WEDNESDAY;
    Weekday tomorrow = Weekday.THURSDAY;

    // Use enum in conditionals
    if(today == Weekday.WEDNESDAY) {
      System.out.println("It's the middle of the week!");
    } else if(today == Weekday.SATURDAY) {
      System.out.println("It's the weekend!");
    }

    // Invalid assignment causes compile error
    Weekday invalidDay = "Tuesday"; 

  }

}
```

In this example, the Weekday enum defines the valid constant values. The main method shows variable declaration, conditionals, and attempted invalid assignment with enums.
