Por que o desse resultado?

Gostaria de saber, porque o resultado dessa expressão é = 3 ?

 class Banana {
   int x = 1;
   public static void main(String [] args) {
     int x = 2;
     Banana b = new Banana();
     b.go();    
   }
   { x += x; }   // O QUE QUER DIZER ISSO, TIPO UM CONSTRUTOR???
   void go(){ 
     ++x;
     System.out.println(x);
   }
}

A Variávelx começa com 1, depois executa o bloco de inicialização, incrementa mais um, e fica com 2. Por fim chama o método go() que adiciona mais 1, e resultado é 3.

Qual bloco de inicialização? { x+=x; } ??

Qual bloco de inicialização? { x+=x; } ??[/quote]

Isso toda vez que vc instancia sua classe os blocos de inicializações rodam antes do construtor, entao quando vc fez: Banana b = new Banana() o bloco { x+=x; } é executado e a variavel “x” recebe +1 e fica 2. Depois b.go() é executado e “x” recebe +1 novamente e exibi 3.

eu vejo diferente o.õ
x = 1;
inicia o main
x = 2;
Banana b = new Banana();
entao instancia b e ele tem o valor de x = 2
em seguida chama o b.go que incrementa 1 em x que fica com 3

Qual bloco de inicialização? { x+=x; } ??[/quote]

Isso toda vez que vc instancia sua classe os blocos de inicializações rodam antes do construtor, entao quando vc fez: Banana b = new Banana() o bloco { x+=x; } é executado e a variavel “x” recebe +1 e fica 2. Depois b.go() é executado e “x” recebe +1 novamente e exibi 3.

[/quote]

AA ta entendi… o {} e como se fosse um construtor entao… eh chamado so na hora da inicialização ne!

Vlw feras!

[quote=VictorMatuk]eu vejo diferente o.õ
x = 1;
inicia o main
x = 2;
Banana b = new Banana();
entao instancia b e ele tem o valor de x = 2
em seguida chama o b.go que incrementa 1 em x que fica com 3[/quote]

Nao tem isso de inicia o main x = 2. Quando Banana e instanciado que x = 2.

Qual bloco de inicialização? { x+=x; } ??[/quote]

Isso toda vez que vc instancia sua classe os blocos de inicializações rodam antes do construtor, entao quando vc fez: Banana b = new Banana() o bloco { x+=x; } é executado e a variavel “x” recebe +1 e fica 2. Depois b.go() é executado e “x” recebe +1 novamente e exibi 3.

[/quote]

AA ta entendi… o {} e como se fosse um construtor entao… eh chamado so na hora da inicialização ne!

Vlw feras![/quote]

Sim so lembre que ele roda ANTES do construtor se vc tivesse algum codigo no corpo do seu construtor o bloco de inicializaçao iria executar antes do codigo do seu construtor.

Qual bloco de inicialização? { x+=x; } ??[/quote]

Isso toda vez que vc instancia sua classe os blocos de inicializações rodam antes do construtor, entao quando vc fez: Banana b = new Banana() o bloco { x+=x; } é executado e a variavel “x” recebe +1 e fica 2. Depois b.go() é executado e “x” recebe +1 novamente e exibi 3.

[/quote]

AA ta entendi… o {} e como se fosse um construtor entao… eh chamado so na hora da inicialização ne!

Vlw feras![/quote]

Sim so lembre que ele roda ANTES do construtor se vc tivesse algum codigo no corpo do seu construtor o bloco de inicializaçao iria executar antes do codigo do seu construtor.[/quote]

Vlww fera :smiley: