Tutorial de Java

Variables, Expresiones y Arrays

Anterior | Siguiente
Variables

Las variables se utilizan en la programación Java para almacenar datos que varían durante la ejecución del programa. Para usar una variable, hay que indicarle al compilador el tipo y nombre de esa variable, declaración de la variable. El tipo de la variable determinará el conjunto de valores que se podrán almacenar en la variable y el tipo de operaciones que se podrán realizar con ella.

Por ejemplo, el tipo int solamente puede contener números completos (enteros). En Java, todas las variables de tipo int contienen valores con signo. C++, por el contrario, soporta el uso de tipos enteros con y sin signo (todos positivos).

Expresiones

Los programas en Java, al igual que en C y C++, se componen de sentencias, que a su vez están compuestas en base a expresiones. Una expresión es una determinada combinación de operadores y operandos que se evalúan para obtener un resultado particular. Los operandos pueden ser variables, constantes o llamadas a métodos.

Una llamada a un método evalúa el valor devuelto por el método y el tipo de una llamada a un método es el tipo devuelto por ese método.

Java soporta constantes con nombre y la forma de crearlas es:

final float PI = 3.14159;

Esta línea de código produce un valor que se puede referenciar en el programa, pero no puede ser modificado. La palabra clave final es la que evita que esto suceda.

En ciertos casos, el orden en que se realizan las operaciones es determinante para el resultado que se obtenga. Al igual que en C++, Pascal y otros lenguajes, en Java se puede controlar el orden de evaluación de las expresiones mediante el uso de paréntesis. Si no se proporcionan estos paréntesis, el orden estará determinado por la precedencia de operadores, de tal modo que las operaciones en las que estén involucrados operadores con más alta precedencia serán los que primero se evalúen.

Los programadores C++ deben tener en cuanta que, excepto en el caso de la primera cláusula de una sentencia for, Java no soporta el operador coma (,), que en C++ está disponible para controlar el orden en que se evalúan las expresiones.

Arrays

Java, a diferencia de C++, dispone de un tipo array. En C++, un array es simplemente un conjunto de posiciones secuenciales de memoria a las que se puede acceder mediante un índice o punteros. Esto no implica control alguno sobre ese conjunto de posiciones de memoria.

En Java, al ser un tipo de datos verdadero, se dispone de comprobaciones exhaustivas del correcto manejo del array; por ejemplo, de la comprobación de sobrepasar los límites definidos para el array, en evitación de desbordamiento o corrupción de memoria.

En Java hay que declarar un array antes de poder utilizarlo. Y en la declaración hay que incluir el nombre del array y el tipo de datos que se van a almacenar en él. La sintaxis general para declarar e instanciar un array es:

tipoDeElementos[] nombreDelArray = new tipoDeElemetos[tamañoDelArray];

Se pueden declarar en Java arrays de cualquier tipo:

char s[];
int iArray[];

Incluso se pueden construir arrays de arrays:

int tabla[][] = new int[4][5];

Al igual que los demás objetos en Java, la declaración del array no localiza, o reserva, memoria para contener los datos. En su lugar, simplemente localiza memoria para almacenar una referencia al array. La memoria necesaria para almacenar los datos que componen el array se buscará en memoria dinámica a la hora de instanciar y crear realmente el array.

Para crear un array en Java hay dos métodos básicos. Crear un array vacío:

int lista[] = new int[50];

o se puede crear ya el array con sus valores iniciales:

String nombres[] = {
    "Juan","Pepe","Pedro","Maria"
    };

Esto que es equivalente a:

String nombres[];
nombres = new String[4];
nombres[0] = new String( "Juan" );
nombres[1] = new String( "Pepe" );
nombres[2] = new String( "Pedro" );
nombres[3] = new String( "Maria" );

No se pueden crear arrays estáticos en tiempo de compilación:

int lista[50]; // generará un error en tiempo 
               // de compilación

Tampoco se puede rellenar un array sin declarar el tamaño con el operador new:

int lista[];
for( int i=0; i < 9; i++ )
    lista[i] = i;

En las sentencias anteriores simultáneamente se declara el nombre del array y se reserva memoria para contener sus datos. Sin embargo, no es necesario combinar estos procesos. Se puede ejecutar la sentencia de declaración del array y posteriormente, otra sentencia para asignar valores a los datos.

Una vez que se ha instanciado un array, se puede acceder a los elementos de ese array utilizando un índice, de forma similar a la que se accede en otros lenguajes de programación. Sin embargo, Java no permite que se acceda a los elementos de un array utilizando punteros.

    miArray[5] = 6;
    miVariable = miArray[5];

Como en C y C++, los índices de un array siempre empiezan en 0.

Todos los arrays en Java tienen una función miembro: length(), que se puede utilizar para conocer la longitud del array.

int a[][] = new int[10][3];
a.length;    /* 10 */
a[0].length; /* 3 */

Además, en Java no se puede rellenar un array sin declarar el tamaño con el operador new. El siguiente código no sería válido:

int lista[];
for( int i=0; i < 9; i++ )
    lista[i] = i;

Es decir, todos los arrays en Java son estáticos. Para convertir un array en el equivalente a un array dinámico en C/C++, se usa la clase Vector, que permite operaciones de inserción, borrado, etc. en el array.

El ejemplo java403.java, intenta ilustrar un aspecto interesante del uso de arrays en Java. Se trata de que Java puede crear arrays multidimensionales, que se verían como arrays de arrays. Aunque esta es una característica común a muchos lenguajes de programación, en Java, sin embargo, los arrays secundarios no necesitan ser todos del mismo tamaño. En el ejemplo, se declara e instancia un array de enteros, de dos dimensiones, con un tamaño inicial (tamaño de la primera dimensión) de 3. Los tamaños de las dimensiones secundarias (tamaño de cada uno de los subarrays) es 2, 3 y 4, respectivamente.

En este ejemplo, también se pueden observar alguna otra cosa, como es el hecho de que cuando se declara un array de dos dimensiones, no es necesario indicar el tamaño de la dimensión secundaria a la hora de la declaración del array, sino que puede declararse posteriormente el tamaño de cada uno de los subarrays. También se puede observar el resultado de acceder a elementos que se encuentran fuera de los límites del array; Java protege la aplicación contra este tipo de errores de programación.

En C/C++, cuando se intenta acceder y almacenar datos en un elemento del array que está fuera de límites, siempre se consigue, aunque los datos se almacenen en una zona de memoria que no forme parte del array. En Java, si se intenta hacer esto, el Sistema generará una excepción, tal como se muestra en el ejemplo. En él, la excepción simplemente hace que el programa termine, pero se podría recoger esa excepción e implementar un controlador de excepciones (exception handler) para corregir automáticamente el error, sin necesidad de abortar la ejecución del programa.

La salida por pantalla de la ejecución del ejemplo sería:

%java java403
00
012
0246
Acceso a un elemento fuera de limites
java.lang.ArrayIndexOutOfBoundsException: at java403.main(java403.java:55)

El ejemplo java404.java, ilustra otro aspecto del uso de arrays en Java. Se trata, en este caso, de que Java permite la asignación de un array a otro. Sin embargo, hay que extremar las precauciones cuando se hace esto, porque lo que en realidad está pasando es que se está haciendo una copia de la referencia a los mismos datos en memoria. Y, tener dos referencias a los mismos datos no parece ser una buena idea, porque los resultados pueden despistar.

La salida por pantalla que se genera tras la ejecución del ejemplo es:

%java java404
Contenido del primerArray
0 1 2
Contenido del segundoArray
0 1 2
--> Cambiamos un valor en el primerArray
Contenido del primerArray
0 10 2
Contenido del segundoArray
0 10 2

Strings

Un String o cadena se considera a toda secuencia de caracteres almacenados en memoria y accesibles como una unidad. C/C++ no soportan un tipo String, sino que simplemente disponen de un formato de almacenamiento de caracteres que se puede tratar como un String. Sin embargo, Java implementa cadenas a través de las clases String y StringBuffer, a las que se dedicará un amplio estudio.

Navegador

Home | Anterior | Siguiente | Indice | Correo