Por que o desse resultado?

8 respostas
diegofss11

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);
   }
}

8 Respostas

L

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.

diegofss11

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

evertonsilvagomesjav

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

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.

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
diegofss11

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

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.

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

Vlw feras!

evertonsilvagomesjav
<blockquote><div class="quote-author">VictorMatuk:</div>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</blockquote>

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

evertonsilvagomesjav

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

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.

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

Vlw feras!

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.

diegofss11

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

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.

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

Vlw feras!

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.

Vlww fera :smiley:

Criado 30 de julho de 2010
Ultima resposta 30 de jul. de 2010
Respostas 8
Participantes 4