¿Cuándo intenta Java VM cargar las dependencias de clase?

Lo he probado Cuando es así MyObject.add(my);, solo se necesita MyListener, en lugar de MyObject. Y lo sorprendente es: cuando reemplazo MyObject.add(my);con System.out.println(my);, no salió ningún error. La única diferencia es que el tipo de argumento del método estático println () es Object, en lugar de MyListener.

He buscado mucho y encuentro información útil. Veamos las siguientes palabras, es de Inside the Java2 Virtual Machine

Los cargadores de clases (bootstrap o definidos por el usuario) no necesitan esperar hasta el primer uso activo de un tipo antes de cargar el tipo. Los cargadores de clases pueden almacenar en caché representaciones binarias de tipos, cargar tipos anticipadamente antes de su uso eventual o cargar tipos juntos en grupos relacionados. Sin embargo, si un cargador de clases encuentra un problema durante la carga temprana, debe informar ese problema (lanzando una subclase deLinkageError ) solo en el primer uso activo del tipo. En otras palabras, si un cargador de clases encuentra un archivo de clase faltante o con formato incorrecto durante la carga temprana, debe esperar para informar ese error hasta el primer uso activo de la clase por parte del programa. Si el programa nunca usa activamente la clase, el cargador de clases nunca informará el error.

La primera mitad puede responder por qué la hay NoClassDefFoundError. Como la JVM puede decidir por sí misma cuándo debería cargar una clase, tal vez

    MyListener my = new MyListener(){};
    MyObject.add(my);

tal estilo solo hace que cargue la interfaz MyListener.

Pero la segunda mitad parece estar en conflicto con eso. El neverCalledmétodo en realidad nunca se llama, no hay un uso activo. Creo que la única razón puede ser que es una especificación java1.2.

Respuesta 1

Stack no es un Vector, entonces por qué la clase Stack se está extendiendo (es una relación) Clase Vector en JDK, se supone que Stack funciona con operaciones push () y pop (), pero debido a que extiende Vector, puedo hacer ...

Aunque parece haber un montón de preguntas y respuestas relacionadas con la configuración de la variable JAVA_HOME en Windows, no estoy completamente seguro de dónde me estoy equivocando. He seguido todo tipo de diferentes ...

Estoy tratando de agregar la palabra clave final a los parámetros en mis setters autogenerados en IntelliJ IDEA 14. Sé que puedo crear una copia de la plantilla actual que se usa para los métodos setter: #set (...

Estoy tratando de crear un programa que pueda transmitir y recibir a través de una comunicación USB a serie. Mediante la investigación de dos archivos he aprendido que necesitaré: un archivo .jar que contenga el ...