Todo lenguaje de programación consta de elementos
específicos que le permite realizar las operaciones básicas de la programación.
- Tipos de datos
- Operadores
- Instrucciones o sentencias
Categorías de tipos de datos
Los tipos de datos en Java se pueden dividir en tres grupos.
De acuerdo con el tipo de información que
representa. Dependiendo del tipo se podrán realizar unas acciones u otras.
- Datos de tipo primitivo.
- Variables referencia (variables array, clase/instacia, interface…)
- Variables: El valor asociado puede ser modificado por el mismo programa durante el tiempo de ejecución
- Constantes o variables finales: El valor permanecerá inmutable durante toda la ejecución del programa.
- Variables miembro: Definida dentro de la clase y fuera de los métodos.
- Variables locales: Se definen dentro de un método.
Tipos de dato primitivos en Java
En Java prácticamente todo se realiza mediante objetos, de
todas maneras, existen algunas excepciones en las que se tiene que trabajar con
el mínimo de memoria posible. En estos casos se utilizan datos primitivos tales
como int, char, byte, etc… los cuales
tienen un tratamiento especial.
A diferencia de sus representaciones como objetos los tipos
primitivos no aceptan el estado ‘null’ por lo que siempre se inicializan con un dato
por defecto.
A partir de los datos primitivos se puede trabajar con
estructuras de tipos de datos compuestos como podrían ser los Arrays, clases e
interficies.
Literales
Los literales son la representación escrita en el código
fuente de un valor fijo determinado.
Las
constantes de tipo booleana son, tal
y como hemos visto, ‘false’ por
defecto o ‘true’.
Las constantes de tipo carácter
(char)
se declaran entre comilla simple, de esta manera le estamos indicando al
compilador, que nos interesa, literalmente, lo que tenemos dentro de estas
comillas, si bien esto nos sirve con la gran mayoría de caracteres alfanuméricos
y símbolos de puntuación o especiales, hay un grupo de caracteres que necesitan
de un tratamiento especial, para ello se utiliza la denominada secuencia de
escape, la contra barra. Por ejemplo, no es lo mismo asignar ‘t’ que asignar \t con el primero mostraríamos una t por consola, con el
segundo mostraríamos una tabulación, otra manera de cargar los caracteres seria
a través de octales o de códigos Unicode. En la página Unicode-Table.com (Actualmente es (◕‿◕) SYMBL) tenéis todas
las combinaciones posibles de códigos Unicode y en la pagina UTF8-CharTable.DE si seleccionáis “display Octal” podréis ver la comparativa entre Unicode y Octal,
esta segunda página es más ligera, pero más compleja de usar si no se sabe lo
que se busca. A continuación pongo los caracteres normalmente más usados.
Esto nos lleva a una singularidad, que si bien este no es su
momento, viene al caso explicarlo, el caso de los String. Los Strings pueden ser considerados como cadena de
caracteres y tal y como se ha explicado hay ciertos caracteres especiales que
no se pueden escribir de manera normal. En el caso de los String a la hora de
asignar se realiza con las dobles comillas (“”) de tal manera que si queremos
escribir una comilla doble tendremos que hacer uso de la secuencia de escape,
de esta manera la frase (el “nunca” cogió el coche) quedaría como (“el \”nunca\”
cogió el coche”). Basándonos en este principio podemos utilizar cualquier
secuencia de escape.
Las constantes enteras
se pueden declarar como binarios, octales, decimales o hexadecimales, si el
primer digito del numero que se asigna es un ‘0 ‘ se entiende que se trata de
un Octal, en la siguiente tabla vienen explicadas todas las opciones.
Las constantes reales
o de coma flotante se expresan con
coma decimal y opcionalmente seguidos de un exponente. Por defecto cuando se
declaran son doublé, pero lo podemos modificar finalizando la declaración con
una ‘f’ o ‘F’.
Desde Java 7 en los numéricos pueden aparecer caracteres de
subrayado para facilitar la lectura del número, digamos que queremos declarar
de manera constante una tarjeta de crédito , si ponemos todos los dígitos seguidos
puede resultar difícil de leer, además las tarjetas de crédito ya tienen una separación
lógica, de manera que si queremos podemos declarar un entero long tarjeta = 1234_5678_9012_3456L; y se
lee mejor.
Declaración de variables
Una variable es un espacio de memoria correspondiente a un
dato cuyo valor se puede modificar en tiempo de ejecución. Toda variable tiene
que tener un tipo de dato y un identificador con el que poder referenciarlo. El
tipo de dato indicara a Java el espacio de memoria que se tiene que reservar en
memoria, los diferentes valores que puede tomar la variable y las operaciones
que con ella se puede realizar.
El identificador elegido no puede coincidir con ninguna de
las palabras reservadas, además debería seguir las convenciones que todos los
programadores intentamos seguir.
·
La variable comienza por minúsculas: mes, clave, nombre…
·
Si el identificador es una palabra compuesta el
resto de palabras van juntas y la primera letra en mayúsculas: esDivisible, numeroTarjeta, telefonoMovil…
·
El carácter de subrayado puede ser usado en
cualquier lugar del identificador, no obstante es aconsejable usarlo únicamente
como separador de palabras en las constantes: CARGA_MAXIMA,
CARGA_MINIMA,..
En el momento de declaración de las variables podemos
declarar primero todas las variables y luego inicializarlas o inicializarlas según
las vamos declarando.
Además podemos declarar más de una variable en la misma línea.
int n;
double x = 12.5,
y = 2.0;
Pero en el caso de las constantes es aconsejable
inicializarlos siempre. Al ser un ‘final’ lo que le estamos indicando es que
una vez inicializado no se va a variar nunca, pero no podemos esperar a un método
para poner el valor, en el mismo momento en el que se carga la clase
contenedora se tiene que cargar el valor de esa variable o nos encontraremos un
error en tiempo de ejecución, de esta manera si queremos que este valor se base
en una decisión tenemos que ponerlo en el constructor de la clase y recordar
que su valor no se va a modificar en toda la ejecución del programa.
La asignación de valor
se puede posponer en el código, aunque en ningún caso su valor puede
modificarse una vez ha sido inicializada ya que se generaría un error. Ejemplo
de inicialización posterior a la declaración de la constante:
final int MAXIMO;
...
MAXIMO = 15;
Puede parecer que solo se inicializa una vez, pero
recordemos que un tipo primitivo siempre se inicializa con un valor por
defecto.
Además de estas reglas de inicialización también hay que
seguir un convenio a la hora de elegir el nombre que le vamos a poner a nuestra
constantes
·
Los identificadores siempre se escriben en mayúsculas.
MAXIMO.
·
El carácter de subrayado es aceptable en
cualquier lugar del identificador, pero es recomendable solo usarlo para
separar las palabras: MAXIMO_VALOR.
Conversión entre tipos de datos
Excepto para los booleanos que no pueden ser transformados a
otro tipo de dato, para el resto de tipos de datos existen dos categorías de conversión.
·
Ensanchamiento o promoción.
·
Estrechamiento o contracción.
Las promociones transforman un dato de un tipo a otro con un
espacio de memoria mayor para almacenar información. En estos casos podríamos tener
una pérdida de precisión al convertir un valor entero a otro real al desechar algunos
dígitos significativos si el número de cifras del valor entero original es muy
grande. En la siguiente imagen se puede ver cuáles son las posibles
conversiones de promoción.
Las conversiones de contracción son un poco más peliagudas
ya que cada vez que hacemos una conversión tenemos una pérdida de datos a menos
que el origen cumpla con el máximo del destino.
Todas las conversiones se realizan básicamente de tres
modos:
·
Asignación:
por conversión implícita cuando se asigna una variable de un tipo a otra de
otro tipo.
·
Promoción
aritmética: conversión implícita como resultado de una operación aritmética.
·
Por
casting o “moldes”: conversión explícita con operadores que producen la conversión
entre tipos.
En la siguiente imagen se hace un resumen de las diferentes
conversiones que se pueden realizar, podremos observar las conversiones implícitas
o automáticas (A) en las que no tenemos que hacer nada para convertir el dato,
las conversiones en las que es posible que tengamos perdidas de datos (P) y las
conversiones en las que hay que hacer una conversión explícita o “casting” (C).
1 comentarios: (+add yours?)
This URL https://unicode-table.com/ has changed to https://symbl.cc/
Publicar un comentario