Como
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)
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
, 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();
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é