Olá amigo, tudo bem?
O output 37, 40 e 37 está correto e vou te explicar como funciona:
int idade = 37;
// variavel idade declarada e inicializada, valor alocado na memória é 37
System.out.println(idade);
// o método acima vai imprimir a variável idade, o valor dela até o presente trecho de código é 37
idade = 30 + 10;
idade recebe novo valor, valor antigo não é mais acessado a partir desta linha de código, novo valor é 40
System.out.println(idade);
novamente o método vai imprimir a idade,ultimo valor alocado na memória passa a ser 40
idade = (7 * 5) + 2;
idade recebe novo valor, valor antigo não é mais acessado a partir desta linha de código, novo valor é o resultado da expressão dada, o 37.
System.out.println(idade);
novamente o método vai imprimir a idade, ultimo valor alocado na memória agora é 37
Só seria impresso a ultima declaração se tivéssemos apenas um Sysout após todas as declarações da variável idade.
Espero que tenha ficado claro, qualquer coisa estou aqui, abraços e bora pra cima!