Informática, perguntado por guilhermesyl, 3 meses atrás

Analise atentamente ao trecho de código abaixo e, em seguida, responda ao que é solicitado.

public class Mixer{

Mixer() { }
Mixer(Mixer m) {m1 = m;}
Mixer m1;


public static void main(String[] args){
Mixer m2 = new Mixer();
Mixer m3 = new Mixer(m2);
m3.go();
Mixer m4 = m3.m1;
m4.go();
Mixer m5 = m2.m1;
m5.go();
}


void go() {
System.out.println("hi ");
}
}

Qual o resultado da execução?


hi

Alternativa 2:
hi hi

Alternativa 3:
hi hi hi

Alternativa 4:
hi, seguida de uma exceção.

Alternativa 5:
hi hi, seguida de uma exceção.

Soluções para a tarefa

Respondido por dudumcintra
20

Resposta:

Alternativa 5

Explicação:

Vamos lá, Guilherme.

Primeiro vamos entender o que o código está fazendo.

Nossa aplicação está toda sendo executa em uma classe Mixer.

  • Essa classe possui:
  • Um atributo-objeto m1 do tipo Mixer.
  • Um construtor sem assinatura, que não faz nada.
  • Um construtor com assinatura (recebe um objeto Mixer como parâmetro) e define o valor de m1 sendo igual ao objeto recebido.
  • Um método chamado go() que imprime "hi".
  • O método estático main()

Quando iniciamos a aplicação ela executa o método main(), que executa as seguintes instruões (seguindo passo a passo por linha a linha):

  1. Cria um novo objeto m2 do tipo Mixer, e instância ele utilizando o construtor vazio.
  2. Cria um novo objeto m3 do tipo Mixer, e instância ele utilizando o construtor com assinatura, e passando o objeto m2 como parâmetro.
  3. Executa o método go() do objeto m3.
  4. Cria um novo objeto m4 do tipo Mixer e faz referência a ela o atributo-objeto m1 do objeto m3.
  5. Executa o método go() do objeto m4.
  6. Cria um novo objeto m5 do tipo Mixer e faz referência a ela o atributo-objeto m1 do objeto m2. (???)
  7. Executa o método go() do objeto m5.

As instruções são claras e bem defindas, mas o problema está exatamente na 6° instrução. Onde estamos criando o objeto m5 e dizendo que ele faz referencia ao objeto-atributo m1 do objeto m2, sendo que, o objeto-atributo m1 do objeto m2 é NULO, pois em nenhum momento estamos definindo ou alterando seu valor, fazendo assim que retorne uma exceão.

Isso acontece porque quando instânciamos o objeto m2, nós utilizamos o cosntrutor vázio.Caso tivessemos utilizado o construtor com assinatura esse problema não aconteceria, pois ele define o valor de m1.

Anexos:

thedevcool: Perfeito, isso mesmo
Respondido por sergiobianchicosta
6

Resposta:

Alternativa 5:

hi hi, seguida de uma exceção.

Explicação:


filipewsilva10: Correto.
Perguntas interessantes