Variables en Java

 ¿Que es una variable?

Una variable es un espacio de memoria (RAM) que asignamos al almacenamiento información que como su propio nombre dice (variable) puede variar para usarla en un futuro.

Una variable está formada por:

  • Definición del tipo de variable: que usaremos (mirar la tabla de abajo y valor del campo tipo de variable). Ejemplos: byte, short, int, long, float, char…
  • Identificarla: (vamos ponerle un nombre) que la identifica de manera única. Un nombre cualquiera.  Ejemplos: a, b, c, edad, dia…
  • Asignación de un valor a la variable: este último no es obligatorio definirlo cuando definimos una variable, pero si muy recomendable, ya que sino, no podemos mostrar su valor. Aparte de que no tiene sentido almacenar un valor en memoria sin valor.

Normas para los identificadores de las variables:

Las variables necesitan ser identificadas con identificadores y por lo tanto, tienen las mismas normas. Aquí las volvemos a repasar:

  • No utilizar ninguna palabra reservada por el lenguaje de programación (vistas en la parte de arriba).
  • Empezar siempre por una letra , símbolo de dolar ($) o barra baja (_).
  • Una vez empezamos la variable con letra , símbolo de dolar ($) barra baja (_), podemos añadirle todo lo anterior además de números. Ejemplo: a2_$
  • Key Sensitive: distingue entre mayúsculas y minúsculas.
  • Se desaconseja todo uso de espacios: usar espacios es una mala practica en Java debido a que en las clases funciona pero en las variables no. Por ello mejor no usarlos y así nos evitaremos futuros problemas (más abajo, os explicaremos el CamelCase).
  • Los identificadores no tienen limite de longitud: es decir, no tienen caracteres máximos.

Tipos de variables en Java: Primitivas y Objectos

En Java, existen dos tipos de variables:

  • Las de tipo primitivos (las veremos en la tabla de abajo).
  • Las de tipo objectos (las veremos más adelante). Pero se subdividen en:
    • Tipos de la biblioteca estándar de Java: Pueden ser de tipo String (cadenas de texto) o por poner otro ejemplo, el famoso tipo Scanner, con el que más adelante y en lecciones posteriores, veremos como introducir texto por el usuario.
    • Arrays: una variable que puede almacenar varios valores (del mismo tipo) en una sola variable.
    • Cualquier tipo primitivo tratado como objectos (concepto que se conoce como envoltorio o wrapper)
    • Las que el propio programador puede definir. Por ejemplo: coche, camión…

Tipos de Variables en Java primitivas:

Vamos a comenzar explicando los 8 tipo de datos primitivos en Java:

TIPO DE VARIABLE: TIPO: BYTES QUE OCUPA: BITS QUE OCUPA: RANGO DE VALORES: EJEMPLO:
byte Número entero (corto) 1 byte 8 bits -128 a 127 byte a = 0;
 short  Número entero (medio)  2 bytes 16 bits -32768 a +32767  short a = 0;
 int  Número entero (normal) 4 bytes 32 bits  -2.147.483.648 a +2.147.486.647 int a= 0;
long  Número entero (largo)  8 bytes 64 bits -9*10^18 a +9*10^18 -1 long a = 0l;

(con una l al final)

 float Numero real 4 bytes 32 bits -3,4*10^38 a +3,4*10^38 -1 float a = 3.1f;

(con una f al final)

double Numero real  8 bytes 64 bits  -1,79*10^308 a +1,79*10^308 – 1  double a = 125.2333
boolean Lógico 1/8 bytes 1 bit True – False boolean a = true;
char Carácter 2 bytes 16 bits Cualquier carácter unicode char a = ‘z’;

Declaración, inicialización y utilización de una variable de datos en programación:

El proceso con palabras más técnicas para poder utilizar una variable consta 3 partes:

  • Declaración: donde definimos el nombre (identificador) y el tipo de dato (ver en tabla).
  • Iniciación: donde definimos el valor de la variable. Es necesario para poder utilizar una variable primeramente definir (iniciacilizar) un valor en la variable antes de usarla. Se considera el no hacerlo una mala práctica que puede conllevar warnings (bombillas de advertencia) que pueden conllevar un mal funcionamiento del programa.
    • Otra opción para la iniciación y la declaración, es unir la declaración más la iniciación de tal manera:
  • Utilización: donde usamos la variable.

Por lo tanto, una variable, puede ser definida sin especificar un valor.  Para ello vamos a crear un proyecto nuevo:

Y vamos a probar todo lo anterior para empezar tenemos que definir las variables.  Creamos dos variables, lo mínimo para crearlas es especificar tipo de dato y nombre de la variable (el que “nos de la gana” siempre que cumpla unas normas que más abajo veremos).

Ahora tenemos dos variables definidas pero ambas, carecen de valor. Por ello, la bombillas de alado nos aparecen con un símbolo de peligro. Si nos ponemos encima, podemos ver que nos está informando que la variable está creada pero que carece de valor.

Y en el caso, de mostrar un mensaje por pantalla sin a ver inicializado la variable, el mensaje es de error y al compilar veremos que tendremos problemas.

Si ahora les indicamos que nos muestre un mensaje con su valor por consola. La consola del IDE, nos retornará que las variables no están inicializadas.

Por lo tanto para resolver esto hay dos maneras:

Concatenar texto, y variables en Java:

En java, si queremos mostrar dos variables, no tiene sentido hacer dos println (con salto de línea, como si le diéramos al ENTER) cuando lo podemos escribir todo en una misma línea. E incluso, concatenar el texto que debe ir entre comillas dobles (“) con las variables (+nombredelavariable).

Tipos de dato peculiares en java: long, float, char…

En java algunos tipos de datos primitivos tienen ciertas peculiaridades. Entre ellos, destacan los de tipo long y los de tipo float, que como podéis observar en la foto, los datos de tipo long acaban con una  L antes del punto y coma (;) y con una f en caso de float. En este caso en concreto no hay diferencia entre escribir la F o la L con mayúsculas o minúsculas.

Otros tipos de datos ya menos peculiares son char, que debe contener un solo carácter (sino provocará un desbordamiento) y no distingue entre mayúsculas y minúsculas además, que debe ir entre comillas simples (‘A’). Y el tipo de dato boolean que debe tener como respuesta true or false (verdadero o falso) y es este caso debe de ser en minúsculas.

¿Que tipo de dato uso para…?

Es muy importante usar el sentido común a la hora de seleccionar los tipos de datos que guardamos en la memoria. No es lógico coger el tipo de dato float (que llega hasta 4.294.967.296) para guardar una edad de una persona.

La mejor manera de pensar en esto es imaginaros que las variables son piscinas. Se lo que estáis pensando ¡Ojala eh! Pues por ejemplo, si queremos guardar 100 litros usaremos el tipo de piscina byte que almacena desde -128 a +127. No tiene sentido alguno tener 100 litros de agua en una piscina de tipo int que pueda guardar hasta 2.147.486.647. Si lo pensáis tiene que dar hasta miedo tirarse. También en el caso de que, queramos introducir más litros en una piscina de los que se pueda, es evidente que no cabrá produciendo un desbordamiento.

Si vamos a usar un dato para una edad ¿Cual usaríais? Si consultamos la tabla en un principio y suponiendo que nadie viva más de de 127 años. Usaríamos el tipo de dato byte (hasta el 127). O en caso contrario, también podría ser valido short  (hasta el 32767).

Ejecución de una variable:

Las variables se ejecutan de forma secuencial. Por lo tanto, si declaramos e inicializamos la variable a con un valor de 10, y hacemos una impresión por consola, nos mostrará como valor 10. Si más tarde, le definimos que el valor de a, ahora será 20 y hacemos otra impresión por consola, nos mostrará que el valor es 20.

Desbordamiento de memoria en Java

Bueno saliendo ya de las piscinas, sobretodo si programamos para dispositivos móviles e inclusive hasta para ordenadores, la memoria RAM es un recurso muy demandado por el sistema operativo, aplicaciones…

La RAM es memoria volátil. Con volátil, nos referimos que al apagar o producirse un corte de luz se pierde la información. Y es muy importante definir un tipo de dato que no podamos desbordar (superar su almacenamiento) o en que guardemos demasiado tamaño de memoria innecesariamente y el programa sea muy pesado y guarde demasiado espacio en la memoria RAM.

Ejemplo de desbordamiento en Java:

Las variables a, b y c superan el rango máximo de int.

Rangos circulares en Java:

Entender concepto de rango circular es importante en Java, eso sí, es un concepto bastante sencillo. En el hipotético caso de que una variable supere su rango máximo, por ejemplo en el caso de un byte su rango va de -128 a +127. Bien, pues tenemos dos opciones para evitar que nos de error de desbordamiento:

  1. Transformar la variable con un Casting (lo veremos más adelante, así vamos familiarizándonos con conceptos nuevos) de byte a int.
  2. Cambiar el valor de la variable a int con lo que evitaríamos el desbordamiento.

Nosotros nos basaremos en la opción 1. Ya que con la dos no podremos explicar el concepto de rangos circulares en Java. Si en Java asignamos un valor de 127 (su máximo en principio) a una variable y más tarde añadimos 10 ¿Que pasaría desbordaría? La respuesta es NO (siempre que hagamos un casting) sino lo hacemos pasará como en la fotografía inferior.

Si hacemos casting, sumará los 127 + 10 = 137 y por lo tanto, el primer valor de var1 es 127 (el máximo del rango) por lo tanto, una vez superado dicho valor, empezará por el valor mínimo -128. Desde el -128, -127, – 126, -,125… Hasta avanzar las posiciones que le hayamos solicitado, en este caso, 10. Mostrándonos como resultado el -119.

En el hipotético caso que en hiciéramos la opción dos, el rango int no es superado por 137 (127 + 10) por lo tanto en el primer mensaje nos mostrará 127 y en el segundo 137.



4 comentarios

  1. ¿Cuál es el objetivo del “casting”? Al final el resultado es erróneo, o al menos no el deseado.

    • admin

      9 diciembre, 2019 a las 8:11

      Buenas Orlando,

      Te pongo un ejemplo suponiendo que tenemos un tipo de dato que puede almacenar hasta el 10 y nosotros tratamos de castear el número superior como puede ser 15, nos pasaría algo similar a si intentamos contar con los dedos de una mano hasta 15. Llegaremos a 10 y se nos acabaran los dedos, cerraremos los puños y volveremos a empezar hasta que finalmente se nos quedaran 5 levantados. Para evitar problemas como este, lo aconsejable será castear siempre hacía tipos de datos que sean más grandes. Por ejemplo si intentamos castear un byte (1 byte / 8 bits) en un short (2 bytes / 16 bits) no tendremos problemas pero si lo hacemos al revés, un short en un byte nos encontramos en una situación muy similar a la anteiror. Otro ejemplo podría ser el de un int (4  bytes / 32 bits) en un long (8 bytes / 64 bits) al ser mayor es capaz de absorber todo lo que había dentro del long pero si lo hacemos al revés se volverá a producir una situación similar a la que estábamos comentando en el inicio. Espero que te haya quedado más claro así.

      Un saludo

  2. When I originally commented I clicked the “Notify me when new comments are added” checkbox and now
    each time a comment is added I get three e-mails with the same comment.
    Is there any way you can remove me from that service?
    Many thanks!

  3. Hi there, I enjoy reading all of your article. I like to write a little comment to support you.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

La Ley 34/2002 nos obliga a avisarte de que usamos cookies propias y de terceros con objetivos estadísticos y de sesión y para mostrarte la 'publi' que nos da de comer. Tranquilo, este mensaje solo sale una vez. Más información

Java desde 0 comunica a los usuarios, a través de este aviso, que puede utilizar cookies cuando el usuario navega por las diferentes pantallas y páginas del sitio. Durante el uso de nuestra página Web usted acepta y autoriza expresamente el uso de cookies, de acuerdo con nuestra Política de Privacidad. Este sitio web utiliza las siguientes cookies propias: - Cookies de sesión, para garantizar que los usuarios que escriban comentarios en el blog sean humanos y no aplicaciones automatizadas. De esta forma se combate el spam. Este sitio web utiliza las siguientes cookies de terceros: - Google AdManager y AdSense: Utiliza cookies para mejorar la publicidad. Entre otros fines, suelen utilizarse para segmentarla según el contenido que sea relevante para los usuarios o su ubicación, mejorar los informes de rendimiento de las campañas y evitar mostrar anuncios que los usuarios ya hayan visto. Las cookies no contienen información personal identificable. Consulta cómo utiliza Google la información de sitios web o aplicaciones. y cómo bloquear determinados anuncios. - Google Analytics: Almacena cookies para poder elaborar estadísticas sobre el tráfico y volumen de visitas de esta web. Al utilizar este sitio web está consintiendo el tratamiento de información acerca de usted por Google. Por tanto, el ejercicio de cualquier derecho en este sentido deberá hacerlo comunicando directamente con Google. - Redes sociales: Cada red social utiliza sus propias cookies para que usted pueda pinchar en botones del tipo Me gusta o Compartir.

Cerrar