Tuesday, April 13, 2010

Variables y Tipos de Datos en Java

Las variables son las partes importantes de un lenguaje de programación: ellas son las entidades
(valores, datos) que actúan y sobre las que se actúa.
Una declaración de variable siempre contiene dos componentes, el tipo de la variable o de datos y su nombre.

tipoVariable nombreDeVariable;

Los nombres de variables en Java se pueden crear con mucha libertad. Pueden ser cualquier conjunto de caracteres numéricos y alfanuméricos, sin algunos caracteres especiales utilizados por Java como operadores o separadores ( ,.+-*/ etc.).

Existe una serie de palabras reservadas las cuales tienen un significado especial para Java y por lo tanto no se pueden utilizar como nombres de variables. Dichas palabras son:

  • abstract
  • char
  • double
  • boolean
  • class
  • else
  • break
  • const*
  • extends
  • byte
  • case
  • catch
  • continue
  • default
  • do
  • final
  • finally
  • float
  • for
  • goto*
  • if
  • int
  • interface
  • long
  • package
  • static
  • throws
  • private
  • super
  • implements
  • protected
  • switch
  • transient
  • try
  • native
  • import
  • new
  • public
  • null
  • return
  • synchronized
  • void
  • instanceof
  • this
  • volatile
  • short
  • throw
  • while

(*) son palabras reservadas, pero no se utilizan en la actual implementación del lenguaje Java.

Todas las variables en el lenguaje Java deben tener un tipo de dato. Cuando hablamos de tipo de datos no referimos a los valores que la variable puede contener y las operaciones que se pueden realizar con ella.

Existen dos categorías de datos principales en el lenguaje Java: los tipos primitivos y los tipos referenciados.

Los tipos primitivos contienen un sólo valor e incluyen los tipos como los enteros (sin punto decimal), coma flotante (con punto decimal), los caracteres, etc.
La tabla siguiente muestra todos los tipos primitivos soportados por el lenguaje Java, su formato, su tamaño y una breve descripción de cada uno.

Tipo de variableDescripción
Boolean1 byte. Valores true y false
Char2 bytes. Unicode. Comprende el código ASCII
Byte1 byte. Valor entero entre -128 y 127
Short2 bytes. Valor entero entre -32768 y 32767
Int4 bytes. Valor entero entre -2.147.483.648 y 2.147.483.647
Long 8 bytes. Valor entre -9.223.372.036.854.775.808 y 9.223.372.036.854.775.807
Float 4 bytes (entre 6 y 7 cifras decimales equivalentes). De -3.402823E38 a -1.401298E-45 y de 1.401298E-45 a
3.402823E38
Double 8 bytes (unas 15 cifras decimales equivalentes). De -1.79769313486232E308 a -4.94065645841247E-324 y de
4.94065645841247E-324 a 1.79769313486232E308


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.

5. Se utiliza la palabra void para indicar la ausencia de un tipo de variable determinado.

6. A diferencia de C/C++, los tipos de variables en Java están perfectamente definidos en todas y
cada una de las posibles plataformas. Por ejemplo, un int ocupa siempre la misma memoria y
tiene el mismo rango de valores, en cualquier tipo de ordenador.

7. Existen extensiones de Java 1.2 para aprovechar la arquitectura de los procesadores Intel, que
permiten realizar operaciones de punto flotente con una precisión extendida de 80 bits.
Cómo se definen e inicializan las variables.

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

MyClass [] lista=new MyClass[5]; // Se crea un vector de 5 referencias a objetos
// Las 5 referencias son inicializadas a null

lista[0] = unaRef; // Se asigna a lista[0] el mismo valor que unaRef
lista[1] = new MyClass(); // Se asigna a lista[1] la referencia al nuevo objeto
// El resto (lista[2]...lista[4] siguen con valor null

En el ejemplo mostrado las referencias unaRef, segundaRef y lista[0] actuarán sobre el
mismo objeto. Es equivalente utilizar cualquiera de las referencias ya que el objeto al que se
refieren es el mismo.

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.

Uno de los aspectos más importantes en la programación orientada a objetos (OOP) es la forma en la cual son creados y eliminados los objetos. En Java la forma de crear nuevos objetos es utilizando el operador new. Cuando se utiliza el operador new, la variable de tipo referencia guarda la posición de memoria donde está almacenado este nuevo objeto. Para cada objeto se lleva cuenta
de por cuántas variables de tipo referencia es apuntado. La eliminación de los objetos la realiza el programa denominado garbage collector, quien automáticamente libera o borra la memoria ocupada por un objeto cuando no existe ninguna referencia apuntando a ese objeto. Lo anterior significa que aunque una variable de tipo referencia deje de existir, el objeto al cual apunta no es eliminado si hay otras referencias apuntando a ese mismo objeto.

Fuente: http://multiprogrammers.foroactivo.com

0 comentarios:

Post a Comment