O enum e uma lista enumerada que permite a restricao de um conjunto de constantes. Pode ser considerado uma classe, sendo que podera ser declarado somente como publico, ou default. Perceba que nenhuma das classes foram declaradas como public, assim, e possivel declarar varias no mesmo arquivo, sendo todas as classes com nomes diferentes do nome do arquivo.Estrutura (Codigo abaixo): palavra-chave: enumNome do enum (classe): EnumForaDaClasseConstantes: VALOR1, ...Observe o codigo abaixo:/** * Nome do arquivo: Enums.java * */enum EnumForaDaClasse { VALOR1, VALOR2, VALOR3}class ClasseComEnum { enum EnumDentroDaClasse { VALOR1, VALOR2, VALOR3 } EnumDentroDaClasse enumDentroDaClasse;}class EnumsTest { EnumForaDaClasse enum1; ClasseComEnum enum2; { enum2 = new ClasseComEnum(); } public static void main(String[] args){ EnumsTest e1 = new EnumsTest(); e1.enum1 = EnumForaDaClasse.VALOR1; e1.enum2.enumDentroDaClasse = ClasseComEnum.EnumDentroDaClasse.VALOR1; System.out.println("Valor de e1.enum1: " + e1.enum1); System.out.println("e1.enum1 instancia de " + "EnumForaDaClasse: " + (e1.enum1 instanceof EnumForaDaClasse)); }}No codigo acima, a classe EnumsTest declara duas variaveis de instancia, sendo:EnumForaDaClasse enum1: Uma variavel de instancia, que e um enum do tipo EnumForaDaClasse. Declarando uma variavel desse tipo, poderemos atribuir a ela, qualquer um dos valores definidos dentro de suas chaves. Esse tipo e visivel e acessado diretamente. Basta declarar uma variavel do tipo do enum desejado e atribuir um dos valores declarados no enum, acessando-o atraves do operador '.' (ponto).ClasseComEnum enum2: Uma variavel de instancia que e do tipo ClasseComEnum. Quando um enum e declarado dentro de uma classe, nao e possivel declarar uma variavel do seu valor diretamente, pois e necessario primeiramente instanciar a classe, e somente depois acessar o enum atraves de uma variavel de instancia declarada la dentro.Como toda a classe, o enum podera ainda ter outros membros alem das constantes, como variaveis e metodos.Uma outra observacao e que as constantes do enum podem ser considerados como instancias da classe que as comportam.Assim, VALOR1 e uma instancia de EnumCompleto. Mais um motivo pelo qual um enum pode possuir variaveis e metodos. Desta forma, quando olhar a classe ou o enum abaixo, considere que a constante VALOR1 e uma instancia de EnumCompleto que possui:Uma variavel de instancia: chamada valor, do tipo inteiro.Um construtor: que recebe um valor inteiro e inicializa a variavel de instancia.E um metodo: que retorna um valor inteiro, a variavel de instancia.enum EnumCompleto { VALOR1(42), VALOR2(21), VALOR3(84); EnumCompleto(int valor){ this.valor = valor; } private int valor; public int getValor(){ return this.valor; }}class TestaEnumCompleto{ EnumCompleto ec; public static void main(String[] args){ TestaEnumCompleto tec = new TestaEnumCompleto(); tec.ec = EnumCompleto.VALOR2; // Imprimindo o enum. System.out.println("Valor do enum: " + tec.ec); // Testa a instancia. System.out.println("instancia de EnumForaDaClasse: " + (tec.ec instanceof EnumCompleto)); // Acessando sua variavel de instancia. System.out.println("Variavel de instancia de ec: " + tec.ec.getValor()); }}Ate mais, []'s. O for melhorado dispensa algumas caracteristicas em relacao ao for basico: nao possui secao de expressao booleana; e nao possui a secao do incrementador;Acaba tendo o mesmo comportamento do for..each existente em algumas linguagens, onde para uma colecao ele itera automaticamente sobre cada elemento. Porem, nao tem um controle explicito dessa iteracao e se quiser acessar algum elemento especifico, sera necessario criar um incremento.class ForMelhorado{ public static void main(String[]