Classe Interna

Alguém pode explicar este código:

[code]class Teste
{
public static void main( String args[] )
{
class ma
{
final int x;
ma ()
{
x = 10;
System.out.println( this.x);
}
}
new ma();

}

}[/code]

Ele gera 10 na saída.

Nesse código é usada uma inner class (ma) …uma inner class é uma classe definida dentro de outra, isto é, num só ficheiro podes ter mais do que uma classe desde que não sejam publicas(apenas a principal pode ser). Então, ele cria uma classe interna dentro do método main(), depois nota-se ali o construtor da classe ma, que define x como 10 e manda imprimir no ecrã o valor de x. E é isso que faz o “new ma();” que é a a instanciação anónima da classe ma.

Ainda to meio confuso porque pra mim a variável final deve ser declarada e instanciada em uma única linha e não pode ser modificada.

O valor do atributo deve ser atributo antes que uma instancia da classe seja criada (para atributos de instancia como esse ai), e para isso vc pode fazer na mesma linha ou dentro do construtor do objeto.