Tengo el siguiente clases.
He compilado manualmente las clases usando javac y corrió la Driver
clase.
Más tarde eliminado el entity.class
e MyCustomException.class
y corrió la aplicación, como a continuación.
El piloto de pruebas de Java
El siguiente error se quejaron de MyCustomException
que falta pero no sobre la Entity
clase. Por lo tanto, no está claro por qué JRE quejándose de MyCustomException
la clase pero no la Entity
clase.
De hecho me han quitado código throw new MyCustomException();
pero no lo hice de error encuentro sobre Entity
la clase.
Caused by: java.lang.NoClassDefFoundError: com/techdisqus/exception/MyCustomException
Tenga en cuenta que la SI condición no se ejecuta como estoy pasando argumento de comando como prueba
¿Por qué es una excepción está causando a cargar el MyCustomException
que se nunca se ejecutó, pero la JVM no se carga cualquier otra clase regular menos que la condición se cumple, como en este caso Entity
la clase aquí. Por favor marque Driver.java
a continuación.
MyCustomException.java
public class MyCustomException extends RuntimeException {
}
Entity.java
public class Entity {
}
Driver.java
public class Driver {
public static void main(String[] args) {
String s = args[0];
if("true".equals(s)){
Entity entity = new Entity(); // This is not loaded, unless s is true
throw new MyCustomException(); // this is loaded even s is NOT true.
}else{
System.out.println("success");
}
}
}
Gracias por la ayuda
(Esto es una conjetura, yo soy de ninguna manera un experto en la parte interna de la JVM)
Asumo el error ocurre durante la verificación , cuando la clase cargada se somete a algunas comprobaciones por lo que el tiempo de ejecución puede hacer algunas suposiciones más tarde.
Uno de los cheques es una typecheck de instrucciones de código de bytes. En concreto athrow
:
Una instrucción athrow es un tipo seguro si y sólo si la parte superior de la pila de operandos coincide Throwable.
Así que en este punto, el cargador de clase de carga tiene que MyCustomException
comprobar si se extiendeThrowable