Regras de escopo em Java

Alguém pode me ajudar a entender as regras de escopo em Java? Claramente, isso não é válido:

    {
        int i = 0;
        System.out.println(i); // fine, of course
    }
    System.out.println(i); // syntax error

i é declarado dentro do{}, e não está disponível fora. Então, e quanto a isso:

    for (int i = 0; i < 10; i++) {
         System.out.println(i); // fine, of course
    }
    System.out.println(i);  // syntax error, same as above.

Estou surpreso com o erro de sintaxe aqui.i&nbsp;é declarado no escopo externo e ainda não está disponível posteriormente. Ele está vinculado ao escopo do bloco interno por alguma regra especial parafor&nbsp;rotações? Existem outros cenários em que isso pode acontecer?