Como a JVM reage?

5 respostas
paulohms

Bom dia,

Tenho uma dúvida que talvez seja um pouco “boba”, já utilizei em várias máterias e trabalhos da faculdade uma instancia de uma classe que de inicio já recebe um valor, por exemplo:

tenho a classe NO, e uma classe FilaCircular …

para instanciar um objeto de NO na FilaCircular utilizo da seguinte forma:

NO x = this.inicio; // inicio é um atributo da FilaCircular.

Até ai tudo bem, a dúvida surge pois estou lendo um livro, e o mesmo fala que a JVM só aloca uma parte da memoria quando acha a palavra NEW, como que ela reage se quanto instanciamos um objeto, já é passado um parametro ? da mesma forma NO x = new NO() ?

Desde já obrigado.

5 Respostas

Rodrigo_Sasaki

Se você só passa a referênciaNO x = this.inicioEle somente aponta a variável x para o objeto que já está na memória, sendo referenciado por inicio.

paulohms

digaoneves,

No caso então, o objeto está sendo instanciado nessa própria linha ?

No x = this.inicio ?

Vlw !

Margel_Douglas
No inicio = new NO(); //AQUI ESTA SENDO INSTANCIADO O NO

No x = inicio; //A VARIAVEL 'x' ESTA APENAS APONTANDO PARA 'inicio'

//TODA ALTERAÇÃO EM 'x' VAI ESTAR ALTERANDO 'inicio'
//EXPERIMENTO FAZER ISSO: 

x.setValor(10);
inicio.setValor(15);

System.out.println("x:"+x.getValor());
System.out.println("inicio:"+inicio.getValor());

//VC VAI VER QUE VAI SER LISTADO A MESMA COISA, O VALOR 15
paulohms

Margel Douglas,

A questão é que o inicio não é uma instancia de NO, e sim um atributo da classe

public class Teste{

private NO inicio;

public void MetodoTeste(){

NO x = this.inicio;

}

Na verdade é só uma dúvida, pois se mandar imprimir ou manipular dados na instancia local do método, funciona normal, só queria saber como que a JVM reage, pois conforme eu falei, o livro que estou lendo diz que a JVM encontra a palavra NEW que ela instancia o objeto da classe, e nesse caso não tem NEW em lugar nenhum.. rsrs

Vlw

Margel_Douglas

no seu exemplo, ‘inicio’ é um atributo do tipo NO, e esta NULO até que seja instanciado com new NO()

tanto ‘x’ como ‘inicio’ são nulos, e se vc tentar acessar qualquer método deles(que não seja estático),
vai ser lançado uma exceção de ponteiro nulo (NullPointerException)

a menos que vc tenha dessa forma:

private NO inicio = new NO();

ai toda instancia da classe Teste vai ter um atributo ‘NO inicio’ já instanciado, e o ‘x’ recebendo ‘inicio’ vai seguir a mesma regra de citei antes.

Criado 4 de outubro de 2012
Ultima resposta 4 de out. de 2012
Respostas 5
Participantes 3