Universidad Tecnológica de El Salvador
Programación III MSc. René Alberto Castro Velásquez
UNIDAD I – INTRODUCCIÓN A JAVA UTILIZANDO EL IDE NETBEANS.
1.2. TIPOS DE DATOS.
IDENTIFICADORES.
Los identificadores son las palabras en el código Java que usted escoge y que no son
parte del lenguaje. Por ejemplo, en una clase de nombre ejemplo1, la palabra ejemplo1 no es una
palabra reservada de Java ni tiene ningún significado especial en Java. Se le tenía que colocar un
nombre a la clase y ejemplo1 fue la palabra seleccionada para identificar a la clase.
En Java necesitará identificar muchos elementos en su código, incluyendo nombres de clases,
campos, variables y nombres de paquete. Los nombres que seleccione son llamados
identificadores y deben cumplir las reglas siguientes:
1. Un identificador no puede ser una palabra reservada de Java, ni true, false o null.
2. Un identificador puede estar formado por letras, dígitos, guion bajo o signo de dólar.
3. Un identificador debe empezar con una letra, un guion bajo o un signo de dólar.
Ejemplo de identificadores válidos:
Válido Observaciones Válido Observaciones
X x1 Cumple las tres reglas
Java distingue mayúsculas y
minúsculas Ideal porque describe su
x edad
contenido
Cumple las tres reglas
HolaMundo $color
No se recomienda su uso (*)
Cumple las tres reglas
holaMundo _altura
Java distingue mayúsculas y No se recomienda su uso (*)
minúsculas
Cumple las tres reglas
holamundo Public
No se recomienda su uso
debido a la semejanza con una
HOLAMUNDO PUBLIC palabra reservada
(*) Puede obtener información adicional en la dirección URL oficial del fabricante:
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html
Ejemplo de identificadores no válidos:
No válido Explicación No válido Explicación
Empieza con un número Contiene el símbolo @
1x a@b
(incumple la tercera regla) (incumple la segunda regla)
Es una palabra reservada Contiene el símbolo +
public x+y
(incumple la primera regla) (incumple la segunda regla)
Página 1 de 9
Universidad Tecnológica de El Salvador
Programación III MSc. René Alberto Castro Velásquez
No válido Explicación No válido Explicación
Contiene un espacio Es una palabra inválida
un caso null
(incumple la segunda regla) (incumple la primera regla)
LOS OCHO TIPOS DE DATOS PRIMITIVOS DE JAVA.
Java cuenta con dos tipos de datos: primitivos y por referencia. Los datos primitivos son ocho y se
llaman así porque están construidos dentro del lenguaje. La tabla siguiente muestra los ocho tipos
de datos, el número de bits que consumen en almacenamiento y el rango de valores que pueden
ser almacenados en cada uno de ellos. Observe que el tamaño de los tipos de datos (excepto para
boolean) están estrictamente definidos. La razón de ello es que, independientemente de la
plataforma donde el programa se ejecuta, los programas Java corren en una JVM. La plataforma
subyacente no afecta el tamaño o rango de los tipos de datos primitivos de Java.
Tipo de datos Tamaño Valor mínimo Valor máximo
byte 8 bits -128 127
short 16 bits –32,768 32,767
int 32 bits –2,147,483,648 2,147,483,647
long 64 bits –9,223,372,036,854,775,808 9,223,372,036,854,775,807
float 32 bits ±1.40239846E-45 ±3.40282347E+8
double 64 bits ±4.94065645841246544E-324 ±1.79769313486231570E+308
char 16 bits \u0000 \uFFFF
boolean n/d true o false ----
ASIGNANDO VARIABLES.
Se usa el término variable porque los datos que almacena pueden variar (cambiar). En Java se usa
el operador de asignación igual (=) para asignar un valor particular a una variable. Por ejemplo, las
siguientes sentencias declaran una variable de tipo entero llamada x1 y le asignan el valor de 12.
int x1;
x1 = 12;
Observe que a una variable se le puede asignar un valor mientras es declarada. Las anteriores dos
sentencias pudieron haber sido reemplazadas con la siguiente línea de código única:
int x1 = 12;
Java es estricto para permitir asignar a las variables solamente los valores que coincidan con el
tipo de datos de la variable. Si x1 es un int no se le puede asignar otro tipo de dato a menos que se
use el operador cast.
Página 2 de 9
Universidad Tecnológica de El Salvador
Programación III MSc. René Alberto Castro Velásquez
Por ejemplo, la siguiente sentencia declara x1 de tipo int y luego intenta asignarle un valor de
punto flotante.
int x1;
double d1 = 3.5;
// Esta línea no puede ser compilada porque se intenta asignar
// un tipo de datos diferente a int
x1 = d1;
// Esta línea compila porque se usó el operador cast para convertir
// a tipo de datos int
x1 = (int) d1;
El operador cast consiste en colocar entre paréntesis el tipo de datos del valor al que será
convertido. Cast le dice al compilador que está consciente de la asignación inválida, pero que
desea hacerla de todas formas. El convertir un número de punto flotante a un tipo de datos entero
causa que la parte decimal del número sea truncada (no redondeada).
TIPO DE DATOS ENTERO.
De los ocho tipos primitivos de datos, cuatro de ellos son tipos enteros
que se diferencian solamente por su tamaño: byte, short, int y long. Los
cuatro están signados, lo que significa que almacenan tanto números
positivos como negativos. Observe además que los literales enteros son
tratados como int por defecto. Estudie el siguiente programa y trate de
determinar cuál será su salida.
public class DemoEnteros {
public static void main(String [] args) {
int x = 250;
System.out.println("x es " + x);
short a, b, c;
c = 21;
b = 9;
// ¿Por qué convertir a short si las tres variables ya son de ese tipo?
a = (short) (b + c);
System.out.println("a es " + a);
//¿Qué sucede si no usa el sufijo "L"?
// ¿Qué sucede si usa "l" en lugar de "L"?
long nl = 12345678987654321L;
System.out.println("nl es " + nl);
nl = x;
byte ns;
// ¿Por qué convertir a tipo de datos byte?
ns = (byte) c;
System.out.println("nl es ahora " + nl + "\ny ns es " + ns);
}
}
Página 3 de 9
Universidad Tecnológica de El Salvador
Programación III MSc. René Alberto Castro Velásquez
TIPO DE DATOS DE PUNTO FLOTANTE
Dos de los ocho tipos primitivos de datos son usados para almacenar números de punto flotante:
float y double. La única diferencia entre ellos es su tamaño.
Observe además que los literales de punto flotante son tratados como double por defecto. Estudie
el siguiente programa y trate de determinar cuál será su salida.
public class DecimalesDemo {
public static void main(String [] args) {
double pi = 3.14159;
// ¿Qué sucede si no usa el sufijo "F"?
// ¿Qué sucede si usa "f" en lugar de "F"?
float f = 2.7F;
System.out.println("pi = " + pi);
System.out.println("f = " + f);
int n = 15, d = 4;
f = n / d;
//¿Resultado 3.0? ¿Por qué? ¿Cómo se corrige?
System.out.println("15 / 4 = " + f);
int radio = 10;
double area = pi * radio * radio;
// ¿Por qué no se repitió el caso anterior?
System.out.println("área = " + area);
// ¿Por qué convertir a entero? ¿Qué sucede si no convierte?
int a2 = (int) pi * radio * radio;
// ¿Qué resultado genera el uso de paréntesis respecto de la línea anterior?
// ¿Por qué?
int a3 = (int) (pi * radio * radio);
System.out.println("a2 = " + a2);
System.out.println("a3 = " + a3);
}
}
Página 4 de 9
Universidad Tecnológica de El Salvador
Programación III MSc. René Alberto Castro Velásquez
TIPO DE DATOS BOOLEAN
Java tiene un tipo de datos primitivo llamado boolean, que representa a los
valores booleanos. Una variable de tipo boolean puede guardar ya sea true o
false. Observe que true y false son literales especiales en Java.
public class BooleanosDemo {
public static void main(String [] args) {
boolean t = true;
System.out.println("t es " + t);
int x = 10;
boolean y = x > 15;
System.out.println("y es " + y);
y = x; // Esta línea genera un error, ¿por qué?
}
}
En Java, un tipo de datos booleano no es un valor entero y sólo puede contener los valores true o
false, dos tipos especiales de literales de Java. En otros lenguajes, los valores booleanos son tipos
de datos enteros, con 0 siendo falso y una entrada diferente de cero considerada verdadera.
TIPO DE DATOS CHAR
El tipo de datos char representa caracteres en Java. El tamaño de un
carácter es de 16 bits, lo cual permite representarlos como enteros usando
el mapeado de caracteres Unicode. Un char puede ser tratado como un
valor entero, permitiéndole realizar operaciones aritméticas y haciendo
comparaciones utilizando los símbolos mayor que (>) y menor que (<).
Tenga en cuenta que un char es un entero sin signo. Las comillas simples son
usadas para referirse a un caracter literal. Por ejemplo, 'A' es un caracter, pero "A" no lo es (es una
cadena). Algunos caracteres no imprimibles son referidos con una secuencia de escape.
La tabla siguiente muestra las secuencias de escape disponibles en Java:
Secuencia de escape Definición Secuencia de escape Definición
\t Tabulación \' Comilla sencilla
(Tab) (Single quote)
\b Retroceso \" Comilla doble
(Backspace) (Double quote)
\n Nueva línea \\ Plica invertida
(New line) (Backslash)
\r Retorno de carro \f Alimentación de
(Carriage return) formulario
(Form feed)
\u Caracter unicode
Página 5 de 9
Universidad Tecnológica de El Salvador
Programación III MSc. René Alberto Castro Velásquez
public class CharDemo {
public static void main(String [] args) {
char a = 'A';
char b = (char) (a + 1);
//¿Por qué da como resultado un número entero?
System.out.println(a + b);
// ¿Por qué da como resultado una concatenación?
System.out.println("a + b es " + a + b);
// Usando las variables a y b escriba la línea de código necesaria
// para imprimir: A = 65 y B = 66
int x = 75;
char y1 = (char) x;
char mitad = '\u00BD';
//observe el valor de la variable y1, así como el valor
// de la variable mitad. ¿Por qué se obtiene este resultado?
System.out.println("y1 es " + y1 + "\ny mitad es " + mitad);
}
}
CADENAS
Una cadena es una secuencia de caracteres. Tenga en cuenta que las cadenas no son
tipos de datos primitivos en Java y por tanto necesitan ser representadas por una
clase. Java tiene una clase llamada String que representa a objetos de cadena.
Una cadena literal es creada automáticamente en el código Java.
Por ejemplo:
System.out.println("Hola, mundo");
Ejemplo sobre el uso de cadenas:
public class CadenasDemo {
public static void main(String [] args) {
String primero = "Carlos", ultimo = "Cuéllar";
String nombre = primero + " " + ultimo;
System.out.println("Nombre = " + nombre);
double pi = 3.14159;
String str = "Hola, " + nombre;
// Observe que no se efectúa la suma. ¿Por qué?
System.out.println(str + pi + 7);
// ¿Por qué se efectúa la suma y luego concatena?
System.out.println(str + (pi + 7));
// ¿Por qué se efectúa la suma y luego concatena?
System.out.println(pi + 7 + str);
// ¿Qué imprime?
System.out.println("Jorge \"Mágico\" González");
Página 6 de 9
Universidad Tecnológica de El Salvador
Programación III MSc. René Alberto Castro Velásquez
// ¿Qué imprime?
System.out.println("A\tB\tC\nD\tE\tF");
}
}
TIPOS DE DATOS PRIMITIVOS VERSUS REFERENCIAS
Hay otro tipo de variable en Java llamada referencia, la cual es usada cuando los datos
involucrados no son un tipo de datos primitivo.
Una referencia es diferente de un tipo de datos primitivo en que una referencia no contiene el
valor real del objeto al cual se refiere. En su lugar, una referencia apunta hacia la ubicación en
memoria donde el objeto está localizado.
Recuerde que el tipo de datos de una variable en Java corresponde a uno de los ocho tipos
primitivos o a una referencia a un objeto. Estas son las únicas dos opciones.
Si la variable es un tipo de datos primitivo, el valor de la variable es almacenado en la misma
ubicación de memoria que la variable.
Si la variable es una referencia, el valor de la variable es una dirección de memoria. Esta dirección
de memoria es la ubicación del objeto al cual se refiere la referencia. El objeto contiene el dato
real.
Java no permite hacer conversión (cast) para obtener la dirección de memoria.
CONSTANTES
La palabra reservada final es usada en Java para declarar una variable como una constante. Una
variable final en Java no puede ser cambiada después de que se le ha asignado un valor.
final double pi = 3.14159;
pi = -5.0; // Error: no compila.
Es importante mencionar que la palabra reservada final también tiene otros usos.
BREVE AMPLIACIÓN SOBRE CADENAS
Las cadenas son una secuencia de caracteres. En el lenguaje de programación Java, las cadenas
son tratadas como objetos, por lo que existe una clase para crear y manipular cadenas.
Como se ha visto, una variable de tipo de datos cadena se crea de la siguiente manera:
String variable1 = "primer valor";
Sin embargo, debido a que String es un tipo de datos por referencia (una clase), también puede
crear una variable de tipo cadena usando la sintaxis siguiente:
String variable2 = new String();
En Java 8, la clase String tiene varios constructores. Por ejemplo, las siguientes instrucciones son
perfectamente válidas:
String variable3 = new String("tercer valor");
char[] arreglo = {'c', 'u', 'a', 'r', 't', 'o', ' ', 'v', 'a', 'l', 'o', 'r'};
String variable4 = new String(arreglo);
Página 7 de 9
Universidad Tecnológica de El Salvador
Programación III MSc. René Alberto Castro Velásquez
La clase String incluye métodos para examinar caracteres individuales de la secuencia, para
comparar, buscar, extraer y crear una copia de una cadena con todos los caracteres convertidos a
mayúsculas o a minúsculas. Por ejemplo:
String cadena = "Ejemplo de Cadena";
System.out.println("Caracter en la posición 5 = " + cadena.charAt(5));
System.out.println("Longitud de la cadena = " + cadena.length());
System.out.println("Subcadena entre 4 y 14 = " + cadena.substring(4, 14));
System.out.println("Cadena en mayúsculas = " + cadena.toUpperCase());
System.out.println("Cadena en minúsculas = " + cadena.toLowerCase());
Puede obtener información adicional sobre los constructores y métodos de la clase String para
Java 8 en la dirección:
https://docs.oracle.com/javase/8/docs/api/java/lang/String.html
Es importante tener en cuenta que una cadena es constante, por lo que su valor no puede ser
cambiado después de su creación. Esto significa que cuando modifica el contenido de un objeto
de tipo String, en realidad lo destruye y lo vuelve a construir con la nueva cadena, lo cual ocasiona
un uso inapropiado de los recursos del equipo al incrementar la cantidad de instrucciones a
ejecutar, lo cual a su vez influye en el desempeño del equipo.
Si desea construir un objeto de tipo cadena que sea mutable, debe usar la clase StringBuilder o
StringBuffer.
BREVE EXPLICACIÓN SOBRE LA CLASE STRINGBUILDER
La clase StringBuilder permite construir una cadena mutable, es decir, una cadena que puede
cambiar sin necesidad de destruir el objeto que ya se encuentra en memoria (a diferencia de la
clase String).
StringBuilder var1 = new StringBuilder();
var1.append("valor 1");
System.out.println("variable StringBuilder = " + var1);
Al igual que la clase String, la clase StringBuilder también contiene constructores y métodos.
Puede obtener información adicional sobre los constructores y métodos de la clase StringBuilder
para Java 8 en la dirección:
https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html
BREVE EXPLICACIÓN SOBRE LA CLASE STRINGBUFFER
La clase StringBuffer permite construir una cadena mutable, es decir, una cadena que puede
cambiar sin necesidad de destruir el objeto que ya se encuentra en memoria (a diferencia de la
clase String). La clase StringBuffer se usa para la programación multihilos (multithreading),
mientras que la clase StringBuilder se usa para programar un solo hilo. Sin embargo, este tema se
encuentra fuera del alcance del curso.
StringBuffer var2 = new StringBuffer();
var2.append("valor 2");
System.out.println("variable StringBuffer = " + var2);
Al igual que la clase String, la clase StringBuffer también contiene constructores y métodos.
Página 8 de 9
Universidad Tecnológica de El Salvador
Programación III MSc. René Alberto Castro Velásquez
Puede obtener información adicional sobre los constructores y métodos de la clase StringBuffer
para Java 8 en la dirección:
https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuffer.html
Puede ampliar sobre el tema de la programación multihilos en los enlaces siguientes:
http://www.javatpoint.com/multithreading-in-java
https://www.tutorialspoint.com/java/java_multithreading.htm
TIPOS ENUM
Un tipo enum es un tipo de datos especial que habilita que una variable sea un tipo
predeterminado de constantes. La variable debe ser igual a uno de los valores que han sido
predefinidos por ella. Algunos ejemplos comunes son los puntos cardinales, las estaciones del año,
los días de la semana, los meses del año o los planetas del sistema solar.
Por convención, los valores contenidos en el tipo de datos especial enum se escriben en
mayúsculas, aunque nada impide que lo escriba en minúsculas.
Ejemplo:
public enum Dia {
LUNES, MARTES, MIÉRCOLES, JUEVES, VIERNES, SÁBADO, DOMINGO
}
Ejercicios propuestos:
1. Escriba el programa que haga uso del tipo de datos especial enum Dia que deberá definir
en el mismo archivo y realice lo siguiente:
a. Imprima cualquier valor directamente del tipo de datos especial enum.
b. Asigne un valor contenido en el tipo de datos especial enum a una variable de tipo
cadena e imprímala.
c. Imprima todos los valores almacenados en el tipo de datos especial enum.
2. Reescriba el programa para almacenar el tipo de datos especial enum Dia en un archivo
separado.
NOTA:
Puede ampliar sobre tipos enum en los enlaces siguientes:
https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html
https://www.mkyong.com/java/java-enum-example/
Página 9 de 9