Kurz erklärt
Ein eigener Typ für eine feste, begrenzte Menge benannter Konstanten — z. B. Wochentage oder Status-Werte, bei denen nur bestimmte Werte gültig sein dürfen.
Genauer
Ein enum ist technisch eine spezielle Klasse, kann also auch eigene Felder, Konstruktoren und Methoden haben. Der große Vorteil gegenüber einfachen String- oder int-Konstanten: der Compiler verhindert ungültige Werte, ein switch über ein Enum kann vom Compiler sogar auf Vollständigkeit geprüft werden.