1
resposta

Constructor<>.newInstance()

Então no caso o método Constructor.newInstance() lança uma InvocationTargetException caso uma exceção seja lançada dentro da pilha de execução obrigando o desenvolvedor a envolver com o try/catch ou a colocar na declaração do metodo?

1 resposta

É isso mesmo Caio, dê uma olhada na diferença da documentação:

Class< T >.newInstance()

public T newInstance()
              throws InstantiationException,
                     IllegalAccessException

Constructor< T >.newInstance()

public T newInstance(Object... initargs)
              throws InstantiationException,
                     IllegalAccessException,
                     IllegalArgumentException,
                     InvocationTargetException

Enquanto o Class somente informa, através do throws, exceções relacionadas a criação da instância, o Constructor informa se houve uma exceção dentro do construtor (InvocationTargetException), além das outras exceções relacionadas a criação da instância.

Para saber qual a exceção gerada pelo construtor, você pode usar:

try {
    controleClasse1.getDeclaredConstructor().newInstance();
} catch (InvocationTargetException e) 
    e.printStackTrace();
    System.out.println(e.getTargetException()); \\ <----- aqui
}