En artículos anteriores se ha comentado que los objetos que han sido instanciados desde una determinada clase, están formados por métodos y propiedades. Tras conocer cómo se utilizan los métodos, vas a conocer ahora cómo utilizar las propiedades de las que dispone un determinado objeto.

Consultar el valor de una propiedad

Para conocer las propiedades de un objeto a las que puedes acceder debes consultar la documentación de su clase. En el caso de las clases propias de Java, deberás acceder a la API de Java, y en el caso de las clases realizadas por terceros, deberás consultar la documentación que se suministre junto con la clase. Normalmente encontrarás un listado de las propiedades en la sección Field Summary.

propiedades01

Haciendo clic sobre cualquiera de las propiedades podrás conocerla más en detalle.

propiedades02

En el desarrollo de tu aplicación podrás obtener el valor que tiene una propiedad de un determinado objeto utilizando el siguiente formato:

objeto.propiedad

Por ejemplo, si utilizas la clase Ficha que hemos utlizado en artículos anteriores, podrás comprobar que dispone de las siguientes propiedades:

propiedades03

Por tanto, para consultar el valor de la propiedad simbolo para un objeto llamado ficha1 debes indicar:

ficha1.simbolo

Esa propiedad en concreto, es de tipo char, como indica la documentación. Por tanto, puedes utilizar el valor de esa propiedad de igual manera que cualquier valor o variable de ese tipo. Por ejemplo:

Ficha ficha1 = new Ficha();
System.out.println("La ficha se representa con: " + ficha1.simbolo);

Modificación del valor de una propiedad

El valor de la propiedad de un objeto puede modificarse utilizando un formato similar al habitual para las asignaciones de valores a variables:

objeto.propiedad = nuevoValor;

Como es lógico, el tipo de dato del nuevo valor asignado debe ser el mismo que el tipo de dato de la propiedad. Como siempre, el nuevo valor puede ser un valor literal, una variable o cualquier expresión que resulte un valor del mismo tipo de dato.

Siguiendo con el ejemplo anterior, puedes cambiar el valor de la propiedad simbolo así:

ficha1.simbolo = '@';

Viendo un ejemplo más completo, quedaría:

Ficha ficha1 = new Ficha();
final char FICHA_BLANCA = '@'
System.out.println("La ficha se representa con: " + ficha1.simbolo);
//Asignación de un nuevo valor a la propiedad simbolo
ficha1.simbolo = FICHA_BLANCA;
System.out.println("Ahora se representa con: " + ficha1.simbolo);

Propiedades constantes

Es muy frecuentes encontrarse con propiedades con el modificador final para indicar que se trata de propiedades con valores constantes, es decir, no es posible modificar el valor que contienen.

Puedes comprobar si una determinada propiedad es constante en el detalle que te muestra la documentación. Otra forma, aunque menos segura, es observar que el nombre de la propiedad esté escrita en mayúsculas, como suele ser costumbre. Por ejemplo, la clase Calendar tiene una buena cantidad de propiedades static:

propiedades04

La obtención del valor de este tipo de propiedades constantes se realiza de la misma manera que la empleada para el acceso al valor de las propiedades normales, es decir, precedidas del nombre de un objeto, separado por un punto.

Propiedades estáticas

También suele ser muy habital encontrarse con propiedades estáticas. Se caracterizan por tener el modificador static en su declaración.

Las propiedades estáticas, al igual que los métodos estáticos, no se utilizan sobre un objeto, sino directamente sobre el nombre de la clase. Es decir, contienen datos que no son relativos a un determinado objeto, sino a la clase en su globalidad.

Por tanto, para acceder al valor de una propiedad estática, o modificarlo (si no es final), se debe precedir del nombre de la clase, separado por un punto.

Clase.propiedadEstatica

Por ejemplo, observa el uso que se puede hacer del método get de la clase Calendar. Ese método permite obtener una determinada información de la fecha y hora almacenada en un objeto Calendar. Su declaración es la siguiente:

int get(int field)

En su descripción se comenta que el método retorna un valor entero correspodiente a un determinado campo de la fecha y hora que almacena el objeto Calendar. Es decir, nos puede indicar, por ejemplo, el día, mes, hora, minutos, etc, según el valor del parámetro de tipo entero field. Para obtener el día del mes, habrá un determinado valor del parámetro field, y lo mismo para el resto de posibles campos de la fecha y hora. El problema es que no se conoce qué valor exactamente debe aplicarse para obtener cada campo (para obtener el mes, ¿qué valor debe tener el parámetro 0, 1, 2 ...? No aparece en la documentación).

Para facilitar esa labor, la clase Calendar dispone de una serie de propiedades finales estáticas que dan nombre a cada valor posible del campo fecha/hora, por ejemplo: DAY_OF_MONTH, HOUR, etc.

import java.util.Calendar;
public class FechaActual {
    public static void main(String[] args) {
        Calendar ahora = Calendar.getInstance();
        String fechaTexto = "";
        fechaTexto += ahora.get(Calendar.DAY_OF_MONTH);
//La clase Calendar obtiene los meses a partir de 0 (Enero) fechaTexto += "/"+ (ahora.get(Calendar.MONTH) + 1); fechaTexto += "/"+ ahora.get(Calendar.YEAR); System.out.println("Hoy es: " + fechaTexto); } }

Métodos get y set

Pero las clases suelen tener muchas otras propiedades que no aparecen en la API de la clase. Eso se debe a que están declaradas como privadas y no pueden consultarse ni modificarse directamente. Para ello, la clase puede ofrecer métodos que permiten realizar esas acciones. Normalmente, esos métodos reciben el nombre de get (obtener) y set (asignar) seguido del nombre de la propiedad, para obtener y modificar respectivamente el valor de la propiedad.

Por ejemplo, la clase DecimalFormat posee métodos como getMinimumFractionDigits o setRoundingMode.

int getMinimumFractionDigits()
void setRoundingMode(RoundingMode roundingMode)

Los métodos get retornan un valor del tipo de dato con el que esté declarada la propiedad y no suelen tener parámetros. En cambio los métodos set no retornan nada (void) y suelen tener como parámetro el nuevo valor que se quiere aplicar a la propiedad.

Cuando la propiedad es de tipo boolean, en vez de utilizar un método get, se suele declarar un método que empieza por is (¿es ...?). Por ejemplo:

boolean isDecimalSeparatorAlwaysShown()