Boa tarde Hiroshi,
O que ocorre é que com o throw new IllegalStateException();
dentro do método Conexao o objeto que seria passado para o try não foi completamente construído, é como se a conexão nem tivesse sido aberta.
Foi mostrada a mensagem Abrindo Conexão
mas antes do objeto ser criado lançamos uma excessão na pilha, dessa maneira o método close não é chamado.
Agora se comentarmos o throw
no método Conexao o objeto passado para o try será devidamente criado e o erro ocorrerá somente no método leDados. Nesse caso o close será chamado.
public Conexao() {
System.out.println("Abrindo Conexão");
//throw new IllegalStateException();
}
Abrindo conexao
Recebendo dados
Fechando conexao
Deu erro na conexão
No caso acima o erro ocorreu após a passagem do objeto (representando que a conexão foi aberta), dessa maneira se um erro ocorrer o método close será automaticamente chamado.
No final do vídeo o professor dá um exemplo do erro no método Conexao
.
Abraços