Enum in Java

Enum is a special class that represents constants. It provides type-safe checking. For example, we could create a method that will accept only specific values and for other values, it will give a compilation error. Without enum, we would find out about the wrong value during the runtime only.

  • Enum syntax
  • Enum with methods and switch statement
  • Advance enum

Enum syntax

public enum DayOfWeek {
  • Enum is a special class for constants so to create the enum we need to write instead of .
  • In the body of enum, we can just list all constant values enum should have.
  • As a constant, the values of enum go in uppercase.
public class Main {
public static void main(String[] args) {
DayOfWeek day = DayOfWeek.FRI;
System.out.println(day); // FRI

day = DayOfWeek.MON;
System.out.println(day); // MON

System.out.println(DayOfWeek.SUN); // SUN
  • We can get enum by using its name and actual constant value.
  • We can create a variable that can hold enum.
// return all values as array
DayOfWeek[] values = DayOfWeek.values();
for (DayOfWeek day : values) {

DayOfWeek myDay = DayOfWeek.valueOf("MON");
// We can get enum from string using valueOf method
// It's case sensitive and value should match exactly
// otherwise exception will occur
// DayOfWeek myDay = DayOfWeek.valueOf("mon"); exception here
  • The enum has few methods. In the above example, I’m showing two of them.
  • values() — return all values of enum as an array
  • valueOf(String) — it’s possible to get enum from a string as well.
DayOfWeek day = DayOfWeek.MON;
DayOfWeek day1 = DayOfWeek.MON;

System.out.println(day == day1); // true
System.out.println(day.equals(day1)); // true
  • We can check enums on equality with operator and with method.

Enum with methods and switch statement

public class Main {
public static void disStudyMsg(String day) {
switch (day) {
case "MON":
case "WED":
case "FRI":
System.out.println("Java coding day");
case "TUE":
case "THUR":
System.out.println("Reading day");
case "SAT":
case "SUN":
System.out.println("Getting rest day");
throw new IllegalArgumentException("No supported day: " + day);

public static void main(String[] args) {
disStudyMsg("MON"); // Java coding day
disStudyMsg("Sunday"); // exception here
  • above method was designed without enum. The method accepts a string as a day and the method will print a message. Note, if client code will provide wrong input, the method will throw a runtime exception. It would be great to catch wrong input during the compilation stage. We can use our enum to do so.
public class Main {
public static void disStudyMsg(DayOfWeek day) {
switch (day) {
case MON:
case WED:
case FRI:
System.out.println("Java coding day");
case TUE:
case THUR:
System.out.println("Reading day");
case SAT:
case SUN:
System.out.println("Getting rest day");

public static void main(String[] args) {
disStudyMsg(DayOfWeek.MON); // Java coding day
//disStudyMsg(DayOfWeek.Sunday); // does not compile
// there is no Sunday value in DayOfWeek enum
  • When using Enum we are making sure that client code never can provide wrong input. It will not just simply compile.
  • The switch statement can be used with Enum. Notice, the case value does not have an enum name but just its value.

Advance Enum

It’s always good to keep enum as a simple list of constant values. However, sometimes you might need extra features for your enum. Enum can have constructors, fields, and methods.

public enum Grade {

private String gradeDescription;
private Grade(String desc) {
this.gradeDescription = desc;

public void seeDescription() {
  • Notice, we have after list of values. Without it will not compile.
  • Enum can have only private constructors. It can be used inside the enum only. When declaring our constant enums we need to provide value for our constructor.
public class Main {
public static void main(String[] args) {
Grade grade = Grade.A;
System.out.println(grade); // A
grade.seeDescription(); // 90-100

This is it for Enum in Java. Have a nice day!

This article is part of the series of articles to learn Java programming language from Tech Lead Academy:1. Introduction to programming 
2. OS, File, and File System
3. Working with terminal
4. Welcome to Java Programming Language
5. Variables and Primitives in Java
6. Methods with Java
7. Java Math Operators and special operators
8. Conditional branching in Java
9. Switch statement in Java
10. Ternary operator in Java
11. Enum in Java
12. String class and its methods in Java
13. Loops in Java
14. Access modifiers in Java
15. Static keyword in Java
16. The final keyword in Java
17. Class and Object in Java
18. Object Oriented Programming in Java
19. OOP: Encapsulation in Java
20. Inheritance in Java
21. Abstraction in Java
22. Polymorphism in Java
23. Overriding vs Overloading in Java
24. OOP Design Principles in Java
25. Array in Java
26. Data Structures with Java
27. Collection framework in Java
28. ArrayList in Java
29. Set in Java
30. Map in Java
31. LocalDate in Java
32. Exception in Java
33. IO in Java
34. Design Patterns
35. Generics in Java
36. Multithreading in java
37. JUnit
38. Big O Notation for coding interviews
39. Top 17 Java coding interview questions for SDET