Our enum type ServerState has an underlying int type.
The possible values for ServerState are defined as constants.
By implementing the toString method, values of ServerState can be printed out or converted to strings.
If we have a value of type int, we cannot pass it to transition - the compiler will complain about type mismatch. This provides some degree of compile-time type safety for enums.
To run the program, compile the code and then run it using the java command.