Dúvida sobre questão ... Assertions

No livro Certificação Java 5 Guia Preparatório, na página 89, na questão 6 temos:

public class AssertTest {
   public static void main( String[] args ) {
      for( int i = 0; i < 10; i++ ) {
         try{
            assert i%2 == 0: i--;
            System.out.println( "Even Number: " + i );
         
         } 
         catch( AssertionError ae ) {
            System.out.println( "Odd Number: " + ++i );

         }
      }
   }
}

Quando compilo e executo o código, na tela aparece:

Even Number:0
Even Number:1
Even Number:2
Even Number:3
Even Number:4
Even Number:5
Even Number:6
Even Number:7
Even Number:8
Even Number:9

Porém no código tá claro que a assert i%2 será true somente para números pares e false para números ímpares. A questão é: Se o assert será true somente no momento em que i for um número par e no momento em que i é ímpar, logo será executado a expressão --i e a AssertionError vai ser ativada. Então por que não imprime Odd Number: <número> no momemnto em que a exceção acontece?

Desde Já agradeço

Um forte abraço

Deyvid Rannyere Moraes Costa

Por padrão as assertions são desativadas na JVM, para ativa-las use o parametro -enableassertions ou -ea

Comando:

java AssertTest

Resultado:

Even Number:0
Even Number:1
Even Number:2
Even Number:3
Even Number:4
Even Number:5
Even Number:6
Even Number:7
Even Number:8
Even Number:9

Comando:

java -ea AssertTest

Resultado:

Even Number: 0
Odd Number: 1
Even Number: 2
Odd Number: 3
Even Number: 4
Odd Number: 5
Even Number: 6
Odd Number: 7
Even Number: 8
Odd Number: 9

Por isso, em uma prova de certificação, é importante verificar qual comando está sendo usado para executar a classe.

CARACA, ISSO TAVA NO NARIZ!.

Valeu borther