Alguien envenenó el código fuente de jdk [recurrencia de errores class.newInstance()]

inserte la descripción de la imagen aquí

Como
inserte la descripción de la imagen aquí
se muestra en la figura, al usar la reflexión, encontré que este método estaba atravesado por la idea.

Después de pensar por un tiempo, descubrí que este método ha quedado en desuso desde jdk9, pero no afecta el uso. El objeto todavía se puede disparar normalmente, pero es muy incómodo de ver.

(Acabo de actualizar la máquina de desarrollo local de 8 a 11 recientemente, no es de extrañar)
inserte la descripción de la imagen aquí
Cuéntame sobre mi propia comprensión del documento

Tres puntos clave:

  • Tiempo de desaprobación: desde jdk9;
  • Motivo de la desaprobación: el newInstance() anterior tenía un error, no se pudo detectar la excepción y el error se demostrará más adelante;
  • Método alternativo: clazz.getDeclaredConstructor().newInstance(), evite el escape de excepciones envolviendo todas las excepciones en el constructor en InvocationTargetException;

Recurrencia de errores:

cualquier clase

public class InstanceTest {
    
    
    public InstanceTest() {
    
    
        System.out.println("this is noArgsConstructor");
        throw new RuntimeException("make a exception");
    }

    public static void main(String[] args) {
    
    
        try {
    
    
            InstanceTest instance = InstanceTest.class.newInstance();
        } catch (InstantiationException e) {
    
    
            System.out.println("catch InstantiationException:" + e.getMessage());
        } catch (IllegalAccessException e) {
    
    
            System.out.println("catch IllegalAccessException:" + e.getMessage());
        }
    }
}

Ejecútalo
inserte la descripción de la imagen aquí
, está todo en rojo, mira, la excepción de tiempo de ejecución que lanzamos no se comió

Ejecutemos la nueva clase de Yirun.getDeclaredConstructor().newInstance();
inserte la descripción de la imagen aquí
comido con éxito

No seas curioso, como dicen los comentarios, todas las excepciones se envolverán en InvocaciónTargetException


Otro pequeño punto de conocimiento trivial para ti.

Ok. Ya terminé

Supongo que te gusta

Origin blog.csdn.net/qq_33709582/article/details/122884782
Recomendado
Clasificación