Considerando o código abaixo, quando eu sei que a main irá chamar o método close?? Ou o close é chamado automaticamente? Não entendi mt bem isso... Pq repare que tivemos que chamar o método leDados, mas o close não.
public class Conexao implements AutoCloseable{
    public Conexao() {
        System.out.println("Abrindo conexao");
    }
    public void leDados() {
        System.out.println("Recebendo dados");
            throw new IllegalStateException();
    }
    @Override
    public void close() {
        System.out.println("Fechando conexão");    
    }
}
public class TesteConexao {
    public static void main(String[] args) {
        try (Conexao conexao = new Conexao()){
            conexao.leDados();    
        } catch(IllegalStateException ex) {
        System.out.println("Deu erro na conexao");
        }
    }
} 
            