Java Enum Fundamentals

JavaJavaBeginner
Practice Now

Introduction

In this lab, you will learn about enums in Java. Enums are a special data type in Java that allows us to define a fixed set of constants. You will learn how to create, use, and manipulate enums in Java.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("`Java`")) -.-> java/ProgrammingTechniquesGroup(["`Programming Techniques`"]) java(("`Java`")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["`Object-Oriented and Advanced Concepts`"]) java(("`Java`")) -.-> java/BasicSyntaxGroup(["`Basic Syntax`"]) java(("`Java`")) -.-> java/DataStructuresGroup(["`Data Structures`"]) java(("`Java`")) -.-> java/StringManipulationGroup(["`String Manipulation`"]) java(("`Java`")) -.-> java/SystemandDataProcessingGroup(["`System and Data Processing`"]) java/ProgrammingTechniquesGroup -.-> java/scope("`Scope`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/generics("`Generics`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("`Classes/Objects`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/class_methods("`Class Methods`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/enums("`Enums`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/modifiers("`Modifiers`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/oop("`OOP`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/packages_api("`Packages / API`") java/BasicSyntaxGroup -.-> java/identifier("`Identifier`") java/DataStructuresGroup -.-> java/arrays("`Arrays`") java/BasicSyntaxGroup -.-> java/booleans("`Booleans`") java/BasicSyntaxGroup -.-> java/break_continue("`Break/Continue`") java/BasicSyntaxGroup -.-> java/comments("`Comments`") java/BasicSyntaxGroup -.-> java/data_types("`Data Types`") java/BasicSyntaxGroup -.-> java/if_else("`If...Else`") java/BasicSyntaxGroup -.-> java/operators("`Operators`") java/BasicSyntaxGroup -.-> java/output("`Output`") java/StringManipulationGroup -.-> java/strings("`Strings`") java/BasicSyntaxGroup -.-> java/switch("`Switch`") java/BasicSyntaxGroup -.-> java/variables("`Variables`") java/SystemandDataProcessingGroup -.-> java/object_methods("`Object Methods`") java/SystemandDataProcessingGroup -.-> java/string_methods("`String Methods`") java/SystemandDataProcessingGroup -.-> java/system_methods("`System Methods`") subgraph Lab Skills java/scope -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/generics -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/classes_objects -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/class_methods -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/enums -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/modifiers -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/oop -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/packages_api -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/identifier -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/arrays -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/booleans -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/break_continue -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/comments -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/data_types -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/if_else -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/operators -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/output -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/strings -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/switch -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/variables -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/object_methods -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/string_methods -.-> lab-117638{{"`Java Enum Fundamentals`"}} java/system_methods -.-> lab-117638{{"`Java Enum Fundamentals`"}} end

Creating an Enum

  1. Create a new file with the name StudentResult.java in the ~/project directory.
  2. Add the following code to create an enum named StudentResult:
public enum StudentResult {
    PASS,
    FAIL,
    ABSENT
}

Using Enums

  1. Create a new file with the name Demo.java in the ~/project directory.
  2. Add the following code to create a variable of the StudentResult enum type and use its values:
public class Demo {
    public static void main(String[] args) {
        StudentResult result1 = StudentResult.ABSENT;
        StudentResult result2 = StudentResult.FAIL;
        StudentResult result3 = StudentResult.PASS;

        System.out.println(result1);
        System.out.println(result2);
        System.out.println(result3);
    }
}
  1. Run the code using the following command in the terminal:
javac Demo.java && java Demo

Using Enums with If-Else Statements

  1. Add the following code to use the StudentResult enum with if-else statements:
public class Demo {
    public static void main(String[] args) {
        StudentResult result = StudentResult.FAIL;

        if(result == StudentResult.ABSENT)
            System.out.println("The student was absent for the exam.");

        else if(result == StudentResult.PASS)
            System.out.println("The student passed the exam.");

        else if(result == StudentResult.FAIL)
            System.out.println("The student failed the exam.");
    }
}

Using Enums with Switch Statements

  1. Add the following code to use the StudentResult enum with switch statements:
public class Demo {
    public static void main(String[] args) {
        StudentResult result = StudentResult.FAIL;

        switch(result) {
            case ABSENT : System.out.println("The Student was absent for the exam.");
            break;

            case PASS : System.out.println("The Student passed the exam.");
            break;

            case FAIL : System.out.println("The Student failed the exam.");
            break;
        }
    }
}

Iterating Over Enums

  1. Add the following code to iterate over the StudentResult enum:
public class Demo {
    public static void main(String[] args) {
        StudentResult[] resultArr = StudentResult.values();

        for(StudentResult sr : resultArr) {
            System.out.println(sr + " at index " + sr.ordinal());
        }
    }
}

Using the toString() Method of Enums

  1. Add the following code to use the toString() method of enums:
public class Demo {
    public static void main(String[] args) {
        for(StudentResult sr : StudentResult.values()) {
            String resultStr = sr.toString();
            System.out.println("Uppercase: " + resultStr);
            System.out.println("Lowercase: " + resultStr.toLowerCase());
            System.out.println();
        }
    }
}

Creating Enums From Strings

  1. Add the following code to create enums from strings:
public class Demo {
    public static void main(String[] args) {
        String resultStr = "FAIL";
        StudentResult result = StudentResult.valueOf(resultStr);
        System.out.print("Enum from String: " + result);
    }
}
  1. Run the code using the following command in the terminal:
javac Demo.java && java Demo

Creating Enums Inside Classes

  1. Add the following code to create an enum inside a class and use it:
public class Student {
    String name;
    StudentResult result;

    // Defining an enum type
    enum StudentResult {
        PASS,
        FAIL,
        ABSENT;
    }

    // Constructor
    Student(String s, StudentResult sr) {
        name = s;
        result = sr;
    }

    // Enum if-else method
    public void printResult() {
        if (this.result == StudentResult.ABSENT)
            System.out.println(this.name + " was absent for the exam.");

        else if (this.result == StudentResult.PASS)
            System.out.println(this.name + " passed the exam.");

        else
            System.out.println(this.name + " failed the exam.");
    }

    // Enum method
    public boolean wasAbsent() {
        if (this.result == StudentResult.ABSENT)
            return true;
        else
            return false;
    }

    // Main method
    public static void main(String[] args) {
        Student s1 = new Student("Justin", StudentResult.ABSENT);
        Student s2 = new Student("Jessica", StudentResult.PASS);

        s1.printResult();
        s2.printResult();

        System.out.println("Student s1 was absent: " + s1.wasAbsent());
    }
}
  1. Run the code using the following command in the terminal:
javac Student.java && javac Demo.java && java Student

Using EnumSet

  1. Add the following code to use EnumSet:
import java.util.EnumSet;

enum StudentResult {
    PASS,
    FAIL,
    ABSENT;
}

public class Demo {
    public static void main(String[] args) {
        EnumSet<StudentResult> resultSet1 = EnumSet.of(StudentResult.FAIL, StudentResult.PASS);
        EnumSet<StudentResult> resultSet2 = EnumSet.allOf(StudentResult.class);

        System.out.println("Enum Set-1: " + resultSet1);
        System.out.print("Enum Set-2: " + resultSet2);
    }
}

Using EnumMaps

  1. Add the following code to use EnumMaps:
import java.util.EnumMap;
import java.util.Map;

enum StudentResult {
    PASS,
    FAIL,
    ABSENT;
}

public class Demo {
    public static void main(String[] args) {
        EnumMap<StudentResult, String> resultMap = new EnumMap<>(StudentResult.class);
        resultMap.put(StudentResult.PASS, "Student Passed the exam");
        resultMap.put(StudentResult.FAIL, "Student Failed the exam");
        resultMap.put(StudentResult.ABSENT, "Student was absent for the exam");

        for (Map.Entry<StudentResult, String> e : resultMap.entrySet())
            System.out.println(e.getKey() + " --> " + e.getValue());
    }
}

Summary

In this lab, you learned how to create an enum, use it with if-else and switch statements, iterate over an enum, use its toString() method, create enums from strings, create an enum inside a class, use EnumSet to efficiently store enum constants, use EnumMaps for storing key-value pairs of enums, and use concrete and abstract methods in enums. You also learned that enums are used to define a collection of constant values and that they increase type safety in Java.

Other Java Tutorials you may like