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.