|
NOTA: La traducción de esta documentación es un esfuerzo personal y voluntario, no es un documento oficial de Sun Microsystems
ni Oracle ni está patrocinado por ninguna de estas empresas. Los documentos originales (en inglés) están disponibles en:
http://java.sun.com/docs/books/tutorial/.
Dirija cualquier comentario, petición, felicitación, etc. a tutorialesjava_@RROBA_codexion.com. |
Si desea ayudar a mantener en funcionamiento esta web, colaborar con la traducción de estos documentos o necesita que se traduzca algún capítulo en concreto puede realizar una donación directa mediante Paypal:
|
Una vez ha creado un objeto probablemente lo querrá utilizar para algo. Podrá necesitar usar o cambiar el valor de uno de sus campos, o llamar a uno de sus métodos para realizar alguna acción.
Referenciar los campos de un objeto
Se accede a los campos de un objeto por su nombre. Deberá utilizar un nombre que no lleve a equivocación.Puede utilizar un nombre sencillo para un campo dentro de su propia clase. Por ejemplo, podemos añadir una sentencia dentro de la clase
Rectangleque imprima laanchura(width) yaltura(height):En este casoSystem.out.println("Anchura y altura son: " + width + ", " + height);widthyheightson nombres sencillos.El código que está fuera de la clase del objeto debe utilizar una referencia a un objeto o una expresión, seguido por el operador punto (.) seguido de un nombre de campo sencillo, así:
referenciaObjeto.nombreCampoPor ejemplo, el código en la clase CreateObjectDemo está fuera del código de la clase Rectangle. Así que para referirse a los campos origin, width y height dentro del objeto Rectangle llamado rectOne la clase CreateObjectDemo debe usar los nombres rectOne.origin, rectOne.width y rectOne.height, respectivamente. El programa usa dos de estos nombres para mostrar la anchura y la altura de rectOne:
Intentar utilizar los nombre sencillos width y height desde el código en la clase CreateObjectDemo no tiene sentido (esos campos solamente existen dentro de un objeto) y resultará en un error de compilación.System.out.println("Width of rectOne: " + rectOne.width); System.out.println("Height of rectOne: " + rectOne.height);Más adelante el programa utiliza código similar para mostrar información acerca de rectTwo. Los objetos del mismo tipo tienen su propia copia de los mismos campos de instancia. Por lo tanto, cada objeto Rectangle tiene campos llamados origin, width y height. Cuando se accede a un campo de instancia a través de una referencia de objeto, se referencia al campo de ese objeto en concreto. Los dos objetos, rectOne y rectTwo, en el programa CreateObjectDemo tienen diferentes campos origin, width y height.
Para acceder a un campo podemos utilizar una referencia nombrada a un objeto, como en los ejemplos anteriores, o podemos utilizar cualquier expresión que devuelva una referencia a un objeto. Recuerde que el operador new devuelve una referencia a un objeto. Así que podríamos utilizar el valor devuelto por «new» para acceder a los campos de un objeto recién creado:
Esta sentencia crea un nuevo objeto Rectangle e inmediatamente obtiene su altura. Básicamente la sentencia calcula la altura predeterminada de un Rectangle. Fíjese en que después de que se ejecute esta sentencia el programa ya no tiene una referencia al Rectanglecreado porque el programa nunca almacenó la referencia en ningún sitio. El objeto no está referenciado y sus recursos están disponibles para el reciclado por la Máquina Virtual Java.int height = new Rectangle().height;Llamar a los métodos de un objeto
También se puede utilizar la referencia de un objeto para invocar a sus métodos. Se añade el nombre sencillo del método a la referencia del objeto con el operador punto (.). También proporcionamos, entre los paréntesis, cualquier argumento al método. Utilice paréntesis vacíos si el método no necesita ningún argumento.La clase Rectangle tiene dos métodos: getArea() para calcular el área del rectángulo y move() para cambiar el origen del rectángulo. Este es el código de CreateObjectDemo que invoca a estos dos métodos:referenciaObjeto.nombreMetodo(listaArgumentos); o referenciaObjeto.nombreMetodo();La primera sentencia llama al métodoSystem.out.println("Área de rectOne: " + rectOne.getArea()); ... rectTwo.move(40, 72);getArea()de rectOne y muestra los resultados. La segunda línea mueve rectTwo porque el método move() asigna nuevos valores a los campos origin.x y origin.y del objeto.Igual que con los campos de instancia, referenciaObjeto debe ser una referencia a un objeto. Podemos utilizar un nombre de variable, pero también cualquier expresión que devuelva una referencia a un objeto. El operador new devuelve una referencia a un objeto, por lo que podemos utilizar el valor devuelto de «new» para invocar los métodos de un objeto:
La expresión new Rectangle(100, 50) devuelve una referencia a un objeto que se refiere a un objeto Rectangle. Aquí vemos que se puede utilizar la notación con punto para invocar el método getArea() del nuevo objeto Rectangle para calcular el área del rectángulo nuevo.new Rectangle(100, 50).getArea()Algunos métodos, como getArea(), devuelven un valor. En estos casos podemos usar la invocación de métodos en expresiones. Podemos asignar el valor devuleto a una varialbe, usarlo para tomar decisiones o controlar un bucle. Este código asigna el valor devuelto por getArea() a la variable
areaOfRectangle:Recuerde, invocar un método sobre un objeto en concreto es lo mismo que enviar un mensaje a ese objeto. En este caso el objeto sobr el que se invoca getArea() es el rectángulo devuelto por el constructor.int areaOfRectangle = new Rectangle(100, 50).getArea();El recolector de basura
Algunos lenguajes orientados a objetos necesitan que vigilemos todos los objetos que creamos y que los destruyamos explícitamente cuando ya no sean necesarios. La gestión explícita de memoria es tediosa y propensa a errores. La plataforma Java nos permite crear cuantos objetos queramos (limitados, por supuesto, a lo que nuestro sistema pueda gestionar) y no tenemos que preocuparnos por su destrucción. El entorno de ejecución Java elimina los objetos cuando determina que ya no están siendo utilizados. Este proceso se denomina recolección de basura.Un objeto es candidato para recolección de basura cuando no hay más referencias a él. Las referencias que se mantienen en una variable normalmente se abandonan cuando la variable queda fuera de su ámbito. O podemos abandonar un objeto explícitamente asignándole el valor especial null. Recuerde que un programa puede tener varias referencias a un mismo objeto. Todas las referencias a un objeto deben ser abandonadas antes de que el objeto sea candidato para la recolección de basura.
El entorno de ejecución Java tiene un recolector de basura que libera periódicamente la memoria utilizada por objetos que ya no están referenciados. El recolector de basura hace su trabajo automáticamente cuando considera que es el momento adecuado.