2012-02-12 22 views
15

que tienen interfaz gráfica de usuario de clase para que pueda crear el objeto de esta manera:¿Cuál es la diferencia entre referencias y objetos en Java?

GUI g1 = new GUI(); 

y una variable de referencia así:

GUI g2; 

Ahora todo lo que sé, G2 es una variable de referencia que da referencia a la clase GUI y g1 es un objeto de la clase GUI. ¿Cuál es la diferencia entre g1 y g2? Puedo usar la propiedad de la clase GUI con el objeto, pero ¿cuál es el uso posible de g2?

+2

Creo que no puedes usar g2 en tu código, porque aún no se ha inicializado y es nulo. – evilone

+3

g1 es una referencia también! –

+2

¡Creo que esta pregunta merece una buena respuesta para mantenerse! – slezica

Respuesta

22

Las referencias son nombres. Los objetos son cosas. Puedes tener diferentes nombres para cosas, incluso para cosas que en realidad no existen.

Se puede declarar nombres, sin llegar a darles ninguna "real", es decir, como este:

GUI g1; 

Puede asignar significado (cosas reales para referirse a) a los nombres con el operador =:

GUI g1 = some_gui; 

Los nombres pueden cambiar su significado con el tiempo. El mismo nombre puede referirse a cosas diferentes en diferentes puntos de la historia.

GUI g1 = some_gui; 

doSomething(); 

g1 = some_other_gui; 

También son sinónimos: varios nombres se refieren a la misma cosa:

GUI g2 = g1; 

Eso es más o menos lo hacen referencias. Son nombres destinados a referirse a cosas.

cosas se pueden crear:

new GUI(); 

materia puede ser creado y nombrado en el lugar para su posterior consulta (literalmente!):

GUI g1 = new GUI(); 

y esas cosas se puede hacer referencia a, utilizando su nombre (o cualquiera de sus nombres!):

g1.doSomething(); 
g2.doSomethingAgain(); 

Se pueden crear diferentes cosas del mismo tipo (Clase), y nam ed diferente:

GUI g1 = new GUI(); 
GUI g2 = new GUI(); 
GUI g3 = new GUI(); 

GUI g1_synonym = g1; 

:)

+2

Gran primer párrafo. Una buena forma de presentar ideas de OOP. –

5

No son capaces de utilizar g2 hasta que asigne un objeto a la misma, ya que actualmente no apunta a ningún objeto, mientras que g1 ya apunta a un objeto GUI y es posible utilizarlo.

Este:

GUI g1 = new GUI(); 

es más o menos equivalente a:

GUI g1; 
g1 = new GUI(); 
2

Los objetos son como burbujas que flotan a través de un espacio denominado montón. Las variables son meramente enlaces a estas burbujas. La expresión new GUI() crea un objeto y el operador = lo vincula a la variable g1. g2 también es una variable pero no está vinculada a ningún objeto. Puede cambiar fácilmente escribiendo

g2 = g1; 
g1 = null; 

Ahora g2 se refiere al objeto que g1 se refería en un principio, y g1 se refiere a nada. El objeto está intacto, solo las variables fueron cambiadas.

0

En realidad, en Java el nombre de su variable es una referencia (excepto de tipos primitivos). No puede usar g2 porque no se ha inicializado e incluso no es nulo. Obtendrá un error de tiempo de compilación al intentar llamar a un método para g2. Después de GUI g2; g2 no está apuntando a un objeto en la memoria. Si configura g2 para anular como este GUI g2 = null;, puede usarlo después de la declaración, pero si llama a un método para g2, obtendrá una NullPointerException en tiempo de ejecución.

0

Ambos, g1 y g2 son referencias. Pero g2 no se inicializó, por lo que no se pudo usar en el código.

//Tells that g1 g2 should hold Gui object. Currently they are not holding any object. 
Gui g1; 
Gui g2; 

//Now g1 reference holds object. g2 reference still doesn't point to any object. 
g1 = new GUI(); 
11

¿Cuál es la diferencia entre las referencias y objetos en java?

Una referencia es una entidad que proporciona una forma de acceder a objetos de su tipo. Un objeto es una entidad que proporciona una forma de acceder a los miembros de su clase o tipo.

Generalmente, no puede acceder a un objeto sin hacer referencia a él.

class GUI 
{ 
    void aMethod() 
    { 
     // some business logic. 
    } 
} 

Puede llamar aMethod con o sin una referencia. pero definitivamente necesitas un objeto.

Sin Referencia:

new GUI().aMethod(); 
// you can't reuse the object 
// bad way to code. 

con referencia:

GUI aGUIReference = new GUI(); 
aGUIReference.aMethod(); 
// Now, the object can be reused. 
// Preferred way to code 

Ahora una pequeña explicación a sus líneas de código:

GUI g1 = new GUI(); 
// g1 is a reference to an object of GUI class. 

GUI g2; 
// g2 is a reference that can point to an object of GUI class 
// but currently not pointing to any. 

La única diferencia b/w g1 y g2 es que g1 se inicializa con un objeto, sino g2 puntos a null

g2 = g1; 
// it means g2 will point to the same object g1 is pointing to 
// only one object but two references. 
+1

Esta es la respuesta correcta. –

+2

Esto debe ser la respuesta aceptada – wfunston

0

referencias son nombres. Los objetos son cosas. Puedes tener diferentes nombres para cosas, incluso para cosas que en realidad no existen.

puede declarar nombres, sin llegar a darles ninguna "real", es decir, como este:

GUI g1; 

Los nombres pueden cambiar su significado a través del tiempo. El mismo nombre puede referirse a cosas diferentes en diferentes momentos.

GUI g1 = some_gui; 

doSomething(); 

g1 = some_other_gui; 

Eso es más o menos lo que hacen las referencias. Son nombres destinados a referirse a cosas.

materia puede ser creada:

new GUI(); 

materia puede ser creado y nombrado en el lugar para su posterior consulta (literalmente!):

GUI g1 = new GUI(); 

:)

0

Una referencia es un "gancho" donde se puede pasar un objeto en. Un objeto puede estar en más de un gancho.

3

References son una especie de punteros a un bloque de memoria llamado objects.

GUI g1 = new GUI(); 

Para la explicación, Dejame romper la declaración anterior.

GUI g1; 
g1 = new GUI(); 

1er paso: g1 es una variable de referencia (puntero), aún no se apunta a cualquier ubicación de memoria válida.

2do paso: El segundo paso asigna la memoria para el objeto de la clase GUI y la operación de asignación hace que la variable de referencia g1 apunte a este objeto (ubicación de la memoria). La palabra clave new asigna la memoria para el objeto de la clase GUI.

Cuestiones relacionadas