2.1 VARIABLES
Una variable es un nombre que contiene un valor que puede cambiar a lo largo del programa. De
acuerdo con el tipo de información que contienen, en Java hay dos tipos principales de variables:
1. Variables de tipos primitivos. Están definidas mediante un valor único que puede ser entero, de punto flotante, carácter o booleano. Java permite distinta precición y distintos rangos de valores para estos tipos de variables (char, byte, short, int, long, float, double, boolean). Ejemplos de variables de tipos primitivos podrían ser: 123, 3456754, 3.1415, 12e-09, 'A', True, etc.
2. Variables referencia. Las variables referencia son referencias o nombres de una información más compleja: arrays u objetos de una determinada clase.
Desde el punto de vista del papel o misión en el programa, las variables pueden ser:
1. Variables miembro de una clase: Se definen en una clase, fuera de cualquier método;
pueden ser tipos primitivos o referencias.
2. Variables locales: Se definen dentro de un método o más en general dentro de cualquier
bloque entre llaves {}. Se crean en el interior del bloque y se destruyen al finalizar dicho
bloque. Pueden ser también tipos primitivos o referencias.
2.1.2 Tipos Primitivos de Variables
Se llaman tipos primitivos de variables de Java a aquellas variables sencillas que contienen los tipos de información más habituales: valores boolean, caracteres y valores numéricos enteros o de punto flotante.
Java dispone de ocho tipos primitivos de variables: un tipo para almacenar valores true y false (boolean); un tipo para almacenar caracteres (char), y 6 tipos para guardar valores numéricos,
cuatro tipos para enteros (byte, short, int y long) y dos para valores reales de punto flotante (float y
double).
Los tipos primitivos de Java tienen algunas características importantes que se resumen a
continuación:
1. El tipo boolean no es un valor numérico: sólo admite los valores true o false. El tipo boolean
no se identifica con el igual o distinto de cero, como en C/C++. El resultado de la expresión
lógica que aparece como condición en un bucle o en una bifurcación debe ser boolean.
2. El tipo char contiene caracteres en código UNICODE (que incluye el código ASCII), y ocupan
16 bits por carácter. Comprende los caracteres de prácticamente todos los idiomas.
3. Los tipos byte, short, int y long son números enteros que pueden ser positivos o negativos, con
distintos valores máximos y mínimos. A diferencia de C/C++, en Java no hay enteros unsigned.
4. Los tipos float y double son valores de punto flotante (números reales) con 6-7 y 15 cifras
decimales equivalentes, respectivamente.
2.1.3 Cómo se definen e inicializan las variables
Una variable se define especificando el tipo y el nombre de dicha variable. Estas variables pueden ser tanto de tipos primitivos como referencias a objetos de alguna clase perteneciente al API de Java o generada por el usuario. Si no se especifica un valor en su declaración, las variable primitivas se inicializan a cero (salvo boolean y char, que se inicializan a false y '\0').
Análogamente las variables de tipo referencia son inicializadas por defecto a un valor especial:
null.
Un tipo particular de referencias son los arrays o vectores, sean éstos de variables primitivas
(por ejemplo, un vector de enteros) o de objetos. En la declaración de una referencia de tipo array
hay que incluir los corchetes []. En los siguientes ejemplos aparece cómo crear un vector de 10
números enteros y cómo crear un vector de elementos MyClass. Java garantiza que los elementos del vector son inicializados a null o a cero (según el tipo de dato) en caso de no indicar otro valor.
Ejemplos de declaración e inicialización de variables:
int x; // Declaración de la variable primitiva x. Se inicializa a 0
int y = 5; // Declaración de la variable primitiva y. Se inicializa a 5
MyClass unaRef; // Declaración de una referencia a un objeto MyClass.
// Se inicializa a null
unaRef = new MyClass(); // La referencia “apunta” al nuevo objeto creado
// Se ha utilizado el constructor por defecto
MyClass segundaRef = unaRef; // Declaración de una referencia a un objeto MyClass.
// Se inicializa al mismo valor que unaRef
int [] vector; // Declaración de un array. Se inicializa a null
vector = new int[10]; // Vector de 10 enteros, inicializados a 0
double [] v = {1.0, 2.65, 3.1};// Declaración e inicialización de un vector de 3
// elementos con los valores entre llaves
2.1.4 Visibilidad y vida de las variables
Se entiende por visibilidad, ámbito o scope de una variable, la parte de la aplicación donde dicha
variable es accesible y por lo tanto puede ser utilizada en una expresión. En Java todas las variables deben estar incluidas en una clase. En general las variables declaradas dentro de unas llaves {}, es decir dentro de un bloque, son visibles y existen dentro de estas llaves. Por ejemplo las variables declaradas al principio de una función existen mientras se ejecute la función; las variables declaradas dentro de un bloque if no serán válidas al finalizar las sentencias correspondientes a dicho if y las variables miembro de una clase (es decir declaradas entre las llaves {} de la clase pero fuera de cualquier método) son válidas mientras existe el objeto de la clase.
Las variables miembro de una clase declaradas como public son accesibles a través de una
referencia a un objeto de dicha clase utilizando el operador punto (.). Las variables miembro
declaradas como private no son accesibles directamente desde otras clases. Las funciones miembro de una clase tienen acceso directo a todas las variables miembro de la clase sin necesidad de anteponer el nombre de un objeto de la clase. Sin embargo las funciones miembro de una clase B derivada de otra A, tienen acceso a todas las variables miembro de A declaradas como public o protected, pero no a las declaradas como private. Una clase derivada sólo puede acceder directamente a las variables y funciones miembro de su clase base declaradas como public o protected. Otra característica del lenguaje es que es posible declarar una variable dentro de un bloque con el mismo nombre que una variable miembro, pero no con el nombre de otra variable local que ya existiera. La variable declarada dentro del bloque oculta a la variable miembro en ese bloque. Para acceder a la variable miembro oculta será preciso utilizar el operador this, en la forma this.varname.
Vamos a hacer un primer ejercicio, el clásico que nos mostrará por pantalla el mensaje "Hola mundo". Para ello me he basado en una de las muchas páginas que lo explican, no me interesa tanto el programa en sí como la explicación de lo necesario para crear un programa.
Sin duda alguna el ejercicio más simple, y a la par, el que nunca puede faltar en cualquier lenguaje de programación es el programa Hola Mundo. Este consiste en sacar por pantalla la archiconocida frase de "Hola Mundo".
Lo primero que tendremos que hacer en Java será crear la clase HolaMundo.
public class HolaMundo { }
Esta clase la guardaremos en un fichero .java. Es importante que el fichero se llame tal cual llamemos a la clase. Haciendo coincidir tanto mayúsculas como minúsculas. El fichero se llamará:
HolaMundo.java
Cuando compilemos y ejecutemos la clase, el código que se ejecuta en primer lugar es aquel que está dentro del método main. La signatura de dicho método es la siguiente:
public class HolaMundo { public static void main(String[] args) { } }
Solo nos quedará mostrar el texto "Hola Mundo" por la consola. Para ello utilizaremos la clase estática System.out. Esta clase nos permite acceder a la salida de la consola. En concreto usaremos el método println(texto).
Finalmente el código nos quedará de la siguiente forma:
public class HolaMundo { public static void main(String[] args) { System.out.println("Hola Mundo"); } }
Para compilar y ejecutar este código tendremos que ejecutar las siguientes sentencias:
javac HolaMundo.java java HolaMundo
Esto último, lo hace el entorno de desarrollo NetBeans, cuando pinchamos en las opciones de compilar y ejecutar.