Duplicar posible:
Is 1/0 a legal Java expression?¿Por qué una constante Java dividida por cero produce un error de tiempo de compilación?
¿Por qué compilar el código?
class Compiles {
public final static int A = 7/0;
public final static int B = 10*3;
public static void main(String[] args) {}
}
Si echo un vistazo en el archivo de clase compilada, puedo ver que B se ha evaluado a 30, y que todavía es un 7/0.
Por lo que yo entiendo, la expresión JSL donde se divide por cero no es una constante.
Ref: JLS 15.28
Mi declaración anterior es debido a esta línea:
A-tiempo de compilación expresión de la constante es una expresión que denota un valor de tipo primitivo
Por lo tanto dividiendo por cero no se evalúa a un valor primitivo.
Lo que realmente no entiendo es por qué el compilador lo permite de todos modos? Para que quede claro, mi código anterior bloquea el tiempo de ejecución con un "java.lang.ExceptionInInititizerError"
Como me parece, el compilador amenaza cualquier variable estática final como una constante y lo evalúa en tiempo de compilación. Eso significa que el compilador ya ha intentado evaluar A, pero como era una división por cero, simplemente lo dejó pasar. Sin error de tiempo de compilación. Pero esto parece muy extraño ... ¡El compilador sabe que es una división por cero y que bloqueará el tiempo de ejecución, pero, no obstante, no marca un error de compilación!
¿Alguien me puede explicar por qué?
¿Hay alguna instancia de división por cero produciendo errores de tiempo de compilación en absoluto? Si dividieras por cero en el código de procedimiento normal, obtendrías una 'ArithmeticException' en tiempo de ejecución, así que no veo nada sorprendente acerca de que esto también sea posible a través del compilador. – BoltClock