Confusão com variáveis

Bom dia,
Sou iniciante e por isso a minha dúvida poderá parecer meia inocente mas aqui vai:
Eu sei que a linguagem java é bastante tipada mas há algo num exemplo que encontrei que não entendo.
No exemplo em baixo a variável ano é definida como string inicialmente e depois é novamente declarada como int. Isso é possivel?

 public class telaIdade extends javax.swing.JFrame {
/**
 * Creates new form telaIdade
 */
public telaIdade() {
    initComponents();
    Date data = new Date();
    DateFormat dataFormatada = new SimpleDateFormat("Y");
    String ano = dataFormatada.format(data);
    lblAnoAtual.setText(ano);
}

private void btnCalcActionPerformed(java.awt.event.ActionEvent evt) {                                        
    int ano = Integer.parseInt(lblAnoAtual.getText());
    int nasc = Integer.parseInt(txtAnoNascimento.getValue().toString());
    int idade = ano - nasc;
    lblIdade.setText(Integer.toString(idade));
}

São duas variáveis diferentes e completamente independentes.
As variáveis em java tem um scope e só existem dentro desse scope. Simplificando, podes ver o scope como o espaço dentro de um bloco de chavetas.

No teu caso, como são métodos diferentes ,cada variável só existe dentro do seu método. Mas o scope pode ser um if, um for ou até mesmo um bloco com chavetas sem estar associado a nenhuma operação.
Por exemplo isto é valido:

public static void main(String[] args) {  // inicio do método
    { // inicio de bloco isolado 
        String ano = "1234"; // variavel ano existe dentro do bloco isolado somente
        System.out.println(ano); // imprime 1234
    } // fim do bloco isolado
    System.out.println(ano); // erro de compilação, não existe variavel ano dentro do scope do método
    int ano = 10; //variavel ano existe dentro do método 
    System.out.println(ano); // imprime 10
}
1 curtida

Muito obrigado. Muito bem explicado.