Diferenca entre Instancia Objeto e Referencia

Boa tarde a todos no Forum , estou com dificuldade em entender os conceitos, e da representação em memória de um Objeto, de uma instância, e de uma referência.
Qual seria a diferença entre as três, e como seria a representação disso na memória?

tipo quando eu crio

Classe c //Sei que é uma referencia, mas como fica isto na memória??
c= new Classe()// Este é um objeto, este consigo visualizar como fica na memória.

Agora o que seria uma instância??

Se alguem puder me esclarecer melhor??

Att

Uma classe é algo a partir da qual você cria instâncias (objetos).

Por exemplo, você vai à loja e pede um celular Motorola W350. O celular (objeto) que você vai comprar é uma instância da classe “Celular Motorola W350”.

Isso eu entendi!!

Agora o que vem a ser referência? e qual a diferença entre referência e instância?

Att

Você conhece a linguagem C, C++, ou Assembler?
Se conhecer, referência é mais ou menos a mesma coisa que um endereço de memória (ou seja, serve para você localizar o dado na memória).

Só que referência é mais poderosa que um endereço de memória, porque:

  • Ela tem um tipo - você não pode referenciar qualquer coisa em qualquer lugar da memória e interpretar de qualquer jeito. Por isso, erros perigosos em programação C, C++ ou Assembler são automaticamente evitados.
  • Se o objeto mudar de lugar na memória (devido ao “garbage collection”), a referência continua apontando para o tal objeto.

Referência é mais ou menos como se fosse o endereço ou telefone de uma pessoa. Serve para você achar a pessoa.
Por exemplo: o telefone da Gisele Bündchen é +1-201-5557-2930.
Instância é a pessoa em si. Por exemplo: a própria Gisele Bündchen.

Complementando as definições do thingol,

você deve observar que:

public void metodoX() { Classe x; Classe y = null; Classe z = new Classe(); }

x,y e z são variáveis locais ao método “metodoX” e portanto são “preservadas” na pilha de execução desse código na JVM. O conteúdo “real” e interno (a VM) dessas variáveis são ponteiros (endereços) de memória onde será armazenado as informações do objeto.

No caso de x, existe o espaço em memória na pilha, mas ela não possui nenhum valor inicial e é um exemplo de declaração de variável apenas.
No caso de y, existe o espaço em memória na pilha e este espaço aponta (muito provavelmente) para uma constante interna que a VM entende como null. Neste caso, você tem um exemplo de declaração de variável e atribuição de um valor a essa variável.
No caso de z, existe o espaço em memória na pilha e existe um espaço alocado no heap para o objeto e este endereço é armazenado no espaço da pilha. Logo dizemos que z faz referência ao objeto (que está alocado no heap). Também neste caso, você tem como exemplo as três operações iniciais que se faz com objeto em java, ou seja: instanciação (criação de um objeto com base em uma classe), definição de uma variável local e associação dessa variável a nova instância.

Um objeto passa a ser passível de ser “coletado” pelo gc quando não existir mais nenhuma referência a ele.

fw