clases principales de Java - clase de enumeración

En Java, podemos definir constantes por static final. Tal como personalizada de lunes a domingo:

público  de clase de lunes a viernes {
     pública  estática  última  int sol = 0 ;
    pública  estática  final de  int MON = 1 ;
    pública  estática  final de  int TEU = 2 ;
    pública  estática  final de  int MIE = 3 ;
    pública  estática  final de  int jue. = 4 ;
    pública  estática  última  int FRI = 5 ;
    pública  estática  final de  int SAT = 6 ; 
}

Al utilizar constantes, por lo que citar:

si (día == == Weekday.SAT || días Weekday.SUN) {}

Por supuesto, la constante se puede definir como un tipo de cadena.

Sea o constantes int constantes de cadena, al utilizar estas constantes para representar un conjunto de enumeración,
hay un problema grave es que el compilador no puede comprobar cada uno con valor razonable. Por ejemplo:

si (== día de la semana de lunes a viernes 6 || == 7 ) {
     si (== tareas weekday.MON) {
         // TODO     
    } 
}

Código encima de dos problemas existe:
(. 1) valor para dar DIADESEMANA define constantes en el intervalo de 0-6, no contiene 7, el compilador no puede el detectado no está en la int enumeración
(2) permanece constante puede estar definido por comparación con otras variables, pero su propósito no es para enumerar la semana

A fin de permitir que el compilador comprueba automáticamente un conjunto de valores en la enumeración y la enumeración de aplicaciones diferentes requieren diferentes tipos de marcadores:

enum día de la semana { 
    dom, lun, mar, X, J, V, S; 
} 

Pública  clase catchExample2 {
     públicas  estáticas  void main (String [] args) lanza la excepción { 
        Día de la semana día = Weekday.SUN;
        si (día == == Weekday.SAT || días Weekday.SUN) { 
            System.out.println ( "En casa" ); 
        } Demás { 
            System.out.println ( "En la oficina" ); 
        } 
    } 
}

La clase de enumeración se logra mediante la enumeración de palabras clave, sólo tenemos un nombre constantes de enumeración de la lista.
constantes Int definidos y compararon mediante enum enumeración definido tiene las siguientes ventajas:
  (1) enum constantes en sí con el tipo de información que Weekday.SUN tipo día de la semana, el compilador comprobará automáticamente el tipo de error.
  (2) no es posible referencias al valor no enumeración, porque no pueden compilar.
  (3) diferentes tipos de enumeración no pueden ser comparados entre sí o asignación como tipo incompatible.
Esto permite que el compilador comprueba automáticamente todos los posibles errores potenciales en tiempo de compilación.

Enum definido mediante enumeración es un tipo de referencia.
Anteriormente hablamos, el tipo de referencias comparativas para el uso de método equals (), si se utiliza ==, que compara dos referencias tipo de variable es el mismo objeto.
Por lo tanto, el tipo de referencia comparativa, siempre utilizar el método equals (), pero el tipo enum puede ser una excepción.
Puesto que cada tipo de enumeración constante en una única instancia de la JVM, que puede ser utilizado directamente == comparación.

definición de la clase de enumeración enumeración, y la clase cuál es la diferencia?
enumeración es que una clase, sólo para ser definido individualmente. Las principales diferencias son las siguientes:
  (1) la definición de tipo de enumeración está siempre heredado de java.lang.Enum, y no pueden ser heredados.
  (2) define solamente un ejemplo de la enumeración, los objetos de enumeración no pueden ser creados por el nuevo operador.
  Cada instancia (3) se definen por referencia a una instancia única del tipo
  (4) tipo de enumeración puede usarse para la sentencia switch.

Por ejemplo, se definen las categorías de color:

pública  enumeración color { 
    ROJO, VERDE, AZUL; 
}

El compilador de clases es probablemente la siguiente:

público  final  clase color el se extiende el Enum { // heredado de Enum, clase etiquetado final
     // cada instancia son globalmente único: 
    pública  estática  final color = red nueva nuevo color ();
     pública  estática  final de color VERDE = new new Color ();
     público  estática  final de color azul = nuevo color ();
     // constructores privados, no se puede asegurar que la llamada externa, el nuevo operador: 
    privado color () {} 
}

Así, compilado clase de enumeración y de clase común no hace ninguna diferencia.
Pero nosotros mismos no puede, por definición, la clase general como se define en la palabra clave enum, que es reglas de sintaxis de Java.

Debido enum es una clase, el valor de cada clase son ejemplo enumeró, por lo tanto, hay algunos ejemplos de estos métodos:
nombre (): devuelve el nombre constante
  de cadena Weekday.SUN.name S = ();
ordianl (): devuelve los definidos secuencia constante, a partir de 0 tecnología.
  int n = Weekday.MON.ordinal ();
cambiando el orden de las constantes de enumeración definidos conducirá ORDINAL valor de retorno ().

 

La enumeración anterior creado todavía existe un problema si no tenemos cuidado para modificar el orden de enumeración,
se modificará el retorno de valor ordinal que representa.
Debido a que podemos optimizar un poco, añadir un campo para cada constantes de enumeración:

empaquetar com.imooc.iexecption; 

enum día de la semana { 
    dom ( 0), MON (1), mar (2), X (3), jue. (4), vie (5), SAT (6 ); 

    pública  definitiva  int dayValue; 

    privada día de la semana ( int dayValue) {
         este .dayValue = dayValue; 
    } 
} 

Pública  clase catchExample2 {
     públicas  estáticas  void main (String [] args) lanza la excepción { 
        Día de la semana día = Weekday.SUN;
        si (day.dayValue == 6 || day.dayValue == 0 ) { 
            System.out.println ("En casa" ); 
        } Demás { 
            System.out.println ( "En la oficina" ); 
        } 
    } 
}

De esta manera, no tenemos demasiada atención a la emisión de la orden.
Por defecto, devuelve la llamada constante de enumeración toString (), y el nombre () como una cadena,
sin embargo, toString () puede ser sobrescrito, y el nombre no lo son, podemos añadir que el método toString () de lunes a viernes.

Paquete com.imooc.iexecption; 

enumeración día de la semana { 
    SOL ( 0, "Domingo" ), 
    el MON ( . 1, "Lunes" ), 
    el mar ( 2, "Martes" ), 
    (casados . 3, "Miércoles" ), 
    el JUE ( . 4 "Jueves" ), 
    el FRI ( 5, "Friday". ), 
    el SAT ( 6, "Sábado". ); 

    público  final  int dayValue;
     privada  final la cadena china; 

    privada día de la semana ( int dayValue, chino String) {
         el presente .dayValue = dayValue;
         este.chinese = chino; 
    } 
    @ Override   // 不允许被覆写,也可以直接调用nombre () 
    pública Cadena toString () {
         volver  este .chinese; 
    } 
} 

Pública  clase catchExample2 {
     públicas  estáticas  void main (String [] args) lanza la excepción { 
        Día de la semana día = Weekday.SUN;
        si (== day.dayValue 6 || day.dayValue == 0 ) { 
            System.out.println ( "Hoy en día es" + día + "en casa" ); 
        } Demás { 
            System.out.println ("Hoy en día es" + día + "En la oficina" ); 
        } 
    } 
}

El propósito de anulación toString () en una salida más fácil de leer.

La enumeración se puede utilizar en una sentencia switch. Ha nacido porque la información de tipo enumeración y enumeración limitada constantes,
por lo que la relación int, tipo String es más adecuado para su uso en una sentencia switch.

empaquetar com.imooc.iexecption; 

enum día de la semana { 
    dom, lun, mar, X, J, V, S; 
} 

Pública  clase catchExample2 {
     públicas  estáticas  void main (String [] args) lanza la excepción { 
        Día de la semana día = Weekday.SUN;
        Interruptor (días) {
             caso SOL:
             caso MON:
             caso JUE: 
                System.out.println ( "Hoy en día es" + día + "en casa" );
                romper ;
            caso MIE:
            caso mar: 
                System.out.println ( "Hoy en día es" + día + "En la oficina" );
                romper ;
            caso vie:
             caso SAT:
             por defecto :
                 arrojar  nueva RuntimeException ( "No se puede procesar" + días); 
        } 
    } 
}

  Cuando se combina con la declaración por defecto automática de errores, puede escribir las constantes fugas de enumeración.

Supongo que te gusta

Origin www.cnblogs.com/yangmingxianshen/p/12501447.html
Recomendado
Clasificación