Este documento introduce los conceptos básicos del lenguaje de programación Java, incluyendo sus tipos primitivos, operadores, expresiones, asignaciones, declaración de variables, clases, objetos, herencia y polimorfismo. Explica cómo declarar y utilizar clases, objetos, métodos, constructores, paquetes, interfaces, arrays y estructuras de control como if/else y switch.
2. EL LENGUAJE JAVA
Orientado a Objetos
Tipos estrictos
Clases estrictas
3. TIPOS PRIMITIVOS
Tipos numéricos
Tipos enteros:
byte, enteros 8-bits con signo complemento a 2,
short, enteros 16-bits con signo complemento a 2
int, enteros 32-bits con signo complemento a 2
long, enteros 64-bits con signo complemento a 2
Tipos en coma flotante:
float, real en coma flotante, 32-bits IEEE 754
double, real en coma flotante, 64-bits IEEE 754
Tipos no numéricos
char, carácter 16-bits Unicode
boolean, tipo lógico, cuyos valores son true (cierto) y false
(falso)
4. OPERADORES
Igualdad y desigualdad: == , !=
Comparación: <, <=, >, >=
Suma y resta unarios: +, -
Suma, multiplicación, división y módulo: +, -, *, /, %
Incremento y decremento prefijos y posfijos: ++, --
Desplazamiento con signo y sin signo: <<, >>, >>>
Negación lógica unaria de bits: ~
Lógica de bits: &, |, ^
Lógica booleana: &&, ||
5. EXPRESIONES
Grupos de Precedencia
Grupo 0: ( )
Grupo 1: ++, --, + (unario), - (unario)
Grupo 2: *, /, %
Grupo 3: +, -, + (concatenación)
Funciones especiales:
Seno x => Math.sin(x)
x2 => Math.pow(x,2)
Math.round(6.6) => 7
6. ASIGNACIÓN
Utilización de operadores:
var1 = var2 + var3; // asignar a var1 el valor de var2 + var3
var1 = var2 - ver3; // asignar a var1 el valor de var2 - var3
var1 = var2 * ver3; // asignar a var1 el valor de var2 * var3
var1 = var2 / ver3; // asignar a var1 el valor de var2 / var3
var1 = var2 % ver3; // asignar a var1 el valor de var2 % var3
Asignaciones de incremento decremento:
variable++; // añadir uno a variable
variable--; // restar uno a varibale
variable += exp; // añadir exp a variable
variable -= exp; // restar exp a variable
7. DECLARACIÓN DE VARIABLES
tipo nombre;
tipo nombre1, nombre2, nombre3;
tipo nombre = valor;
DECLARACIÓN DE CONSTANTES
static final tipo nombre = valor;
8. CONVERSIONES ENTRE TIPOS
Asignar una variable a otra cuyo tipo es mayor de
tamaño:
byte => short => int => long => float => double
Para pasar de un tipo a otro menor en tamaño,
tenemos que hacer una conversión explícita
de tipos:
(tipo)expresion
9. PAQUETES
Paquetes Java más importantes:
- lang – para funciones del lenguaje;
- util – para utilidades adicionales;
- io – para entrada y salida;
- text – para formateo especializado;
- awt – para gráficos e interfaz gráfica de usuario
Para acceder a cualquiera de estos paquetes,
excepto lang que está siempre disponible,
usamos el siguiente modelo:
import java.nombrepaquete.*;
10. DECLARACIÓN DE CLASES
modificador class nombreClase {
< declaración de campos >
< declaración de métodos >
}
modificador puede ser public o nada; si la clase no pertenece a
un paquete, ambas definiciones son equivalentes; si la clase
pertenece a un paquete, entonces, si se declara public, la clase
podrá utilizarse fuera del paquete, pero si no se declara public,
sólo podrá utilizarse dentro del paquete
12. DECLARACIONES DE CAMPOS
modificadores tipo nombreCampo;
modificador puede ser:
- private, accesible solo desde dentro de la propia clase
- protected, accesible solo desde la propia clase, clases del mismo paquete o
subclases
- public,accesible por todos
- package,si no se especifica nada, es el modo por defecto, accesible solo desde el
propio paquete; si la clase no se encuentra dentro de un paquete, es equivalente a
public.
Otros modificadores que se pueden añadir son:
- static, indica que el campo pertenece a la clase, no a un objeto concreto
- final, indica que dicho campo no puede ser sobreescrito en una subclase
tipo es el tipo del campo (tipo primitivo o clase del objeto)
nombreCampo es el nombre del campo
13. ACCESO A CAMPOS
objeto.campo; // si campo no es static
nombreClase.campo; // si campo es static
elObjeto.doblePublico = 5.0;
double doble = elObjeto.doblePublico;
Clase.doblePublicoEstatico = 7.0;
Double doble = Clase.doblePublicoEstatico;
14. DECLARACIÓN DE MÉTODOS
modificador tipo nombreMetodo(<lista de parametros formales>) {
< cuerpo del método; campos e instrucciones >
return expresion; // solo métodos que devuelven resultado
}
<lista de parametros formales> = (tipo campo, tipo campo, ...)
modificador significa lo mismo que para los campos.
tipo es el tipo devuelto por el método, puede ser:
- void si el método no devuelve nada
- un tipo primitivo
- una clase
nombreMetodo es el nombre del método
15. EJEMPLO DE CLASE
public class Clase {
private int enteroPrivado;
static private int enteroEstaticoPrivado;
public void estableceEntero(int entero) {
enteroPrivado = entero;
}
public int recuperaEntero() {
return entero;
}
static public void estableceEnteroEstatico(int entero) {
enteroEstaticoPrivado = entero;
}
static public int recuperaEnteroEstatico() {
return enteroEstatico;
}
}
16. LLAMADAS A MÉTODOS
metodo(<lista parametros reales>); // metodos de la propia clase
objeto.metodo(<lista dparametros reales>); // metodos no estaticos
nombreclase.metodo(<lista parametros reales>); //metodos estaticos
Ejemplo:
elObjeto.estableceEntero(7);
int entero = elObjeto.recuperaEntero();
Clase.estableceEnteroEstatico(8);
int entero = Clase.recuperaEnteroEstatico();
17. DECLARACIÓN DE MÉTODOS
CONSTRUCTORES
modificadores nombreClase(<lista argumentos formales>) {
< cuerpo del método constructor >
}
Ejemplo:
public class Clase {
private int enteroPrivado;
public Clase() {
enteroPrivado = 0;
}
public Clase(int entero) {
enteroPrivado = entero;
}
}
18. LLAMADAS A MÉTODOS
CONSTRUCTORES
nombreClase objeto = new nombreClase(<lista parametros reales>);
Ejemplo:
Clase elObjeto;
elObjeto = new Clase();
O en una sola línea:
Clase elObjeto = new Clase();
Clase elObjeto = new Clase(5);
19. MODELO DE UN PROGRAMA
public class nombrePrograma {
public static void main(String[] args)
{
< cuerpo del programa >
}
}
20. HERENCIA
modificadores class nombreClase extends nombreClaseQueExtiende {
}
Ejemplo
public class ClaseExtendida extends Clase {
}
Una clase que extiende otra, se llama subclase o clase hija,
mientras que la clase a la que extiende (la original) se llama
superclase o clase paterna.
La subclase hereda los miembros (propiedades y métodos) de la
superclase.
21. CAMBIO DE TIPO
Cualquier objeto de una subclase puede ser asignado a
un objeto de su superclase.
Cualquier objeto de una superclase puede ser
asignado a una subclase con una conversión explícita
(cambio de tipo).
ClaseExtendida elObjetoExtendido = new ClaseExtendida();
Clase elObjeto = laClaseExtendida;
ClaseExtendida elObjetoExtendido = (ClaseExtendida)elObjeto;
22. SUPERCONSTRUCCIÓN
modificadores class nombreclase extends nombreClaseQueEstiende {
public nombreClase(<lista de parametros formales>) {
super(<lista de parametros reales>);
<instrucciones de inicializacion>
}
}
Importante: La llamada al superconstructor
debe ser la primera instrucción de un
constructor.
23. EJEMPLO DE
SUPERCONSTRUCCIÓN
public class Clase {
private int enteroPrivado;
public Clase(int entero) {
enteroPrivado = entero;
}
}
public class ClaseExtendida extends Clase {
private double doblePrivado;
public ClaseExtendida(int entero, double doble) {
super(entero);
doblePrivado = doble;
}
}
24. VARIABLES ENMASCARADAS
public class Clase {
public int dato;
}
public class ClaseExtendida extends Clase {
public double dato;
public estableceDatos(int entero, double doble) {
super.dato = entero;
dato = doble;
}
Clase elObjeto = new Clase();
ClaseExtendida elObjetoExtendido = new ClaseExtendida();
elObjeto.dato = 5; // es un valor entero
elObjetoExtendido.dato = 6.4; // es un valor doble
elObjetoExtendido.estableceDatos(3,7.8);
25. SOBREESCRITURA DE MÉTODOS
public class Clase {
public int dato;
public estableceDato(int entero) {
dato = entero;
}
}
public class ClaseExtendida extends Clase {
public int datoExtendido;
public estableceDato(int entero) {
super.estableceDato(entero);
datoExtendido = entero*2;
}
26. PAQUETES
package nombrePaquete;
modificador class nombreClase {
< declaracion de la clase >
}
Importante: Si deseamos que una clase sea
utilizada fuera de su paquete, deberemos
declararla como public.
27. ABSTRACCIÓN MEDIANTE
INTERFACES
modificador interface nombreInterfaz {
< especificaciones de los métodos >
}
modificador class nombreClase implements nombreInterfaz {
< implementación de los metodos de la interfaz >
< implementación de metodos y datos propios de la clase >
}
28. PROPIEDADES DE LOS OBJETOS
Objetos nulos: null
El identificador this
public class Clase {
private int entero;
public Clase(int entero) {
this.entero = entero;
}
}
29. OBJETOS VS VARIABLES
- Una variable tiene memoria para un solo
valor y dispone de un conjunto predefinido
de operaciones según sea su tipo.
- Un objeto tiene memoria para un grupo
de varios valores, junto con un conjunto
coherente de métodos que operan sobre
esos valores. Tanto métodos como valores
están encapsulados en la clase de la que
se ha obtenido el objeto.
30. LA SUPERCLASE OBJECT
En Java, todas las clases son subclases de una
clase especial llamada Object.
Java alcanza la generalidad utilizando objetos de
diferentes clases en las mismas partes del
programa, pero todos ellos pertenecen a la clase
Object.
31. IGUALDAD DE OBJETOS
modificador class nombreClase {
public boolean equals() {
< instrucciones para comparar con los campos de obj >
return resultado de la comparacion;
}
}
Ejemplo:
public class Clase {
private int entero;
public boolean equals(Clase c) {
return (c.entero==entero);
}
}
32. ASIGNACIÓN DE OBJETOS
modificador class nombreClase implements Cloneable {
public Object clone() {
nombreClase obj = new nombreClase(parametros);
< instrucciones para copiar los campos a obj >
return obj;
}
}
public class Clase implements Cloneable {
private int entero;
public Object clone() {
Clase c = new Clase();
c.entero = entero;
return c;
}
}
33. CONVERSIONES DE CLASE
El método clone invocado sobre clase2
devuelve un objeto de la clase Object. Esto
debe ser así, porque lo exige la interfaz
Cloneable. Para convertirlo de nuevo a
Clase necesitamos la conversión explícita
de tipo.
Clase objeto1 =(Clase)objeto2.clone();
34. ARRAYS
Declaración e instanciación de un array de n
enteros:
int miArray[];
miArray = new int[n];
Lo mismo en una sola línea:
int miArray[] = new int[n];
Declaración e instanciación de un array de n
objetos:
MiClase miArray[] = new MiClase[n];
for(int i=0;i<n;i++) miArray[i] = new
MiClase();
35. SELECCIÓN CON IF-ELSE
if (condicion)
instrucción;
else instrucción;
if (velocidad>limite)
System.out.println("Multazo");
else System.out.println("Buen conductor");
36. SUCESIVOS ELSE-IF
if (condicion) instrucción;
else if (condicion) instrucción;
else if (condicion) instrucción;
....
else instrucción;
if (nota>=9) calificacion=’SB’;
else if (nota>=7) calificacion=’N’;
else if (nota>=5) calificacion=’A’;
else calificacion=’S’;
37. LA INSTRUCCIÓN SWITCH
switch (expresion) {
case valor: instrucción; break;
case valor: instrucción; break;
....
default: instrucción; break;
}
switch(nota) {
case 10:
case 9: calificacion = ‘SB’; break;
case 8:
case 7: calificacion = ‘N’; break;
case 6:
case 5: calificacion = ‘A’; break;
default: calificacion = ‘S’; break;
}
38. BUCLES FOR
for(inicio; prueba; actualización) {
< cuerpo del bucle for >
}
for(int i=0; i<5;i++)
System.out.println("hola");
for(int i=0; i<5;i++) {
cuenta += i;
System.out.println("hola");
}
39. BUCLES FOR INDETERMINADOS
for(; ; ) {
< cuerpo del bucle for >
if (condicion) break;
}
for(inicio; ; actualización) {
< cuerpo del bucle for >
if (condicion) break;
}
40. BUCLES CONDICIONALES WHILE
<instrucciones para inicializar las condiciones>
while (condiciones) {
<instrucciones para llevar a cabo el bucle
y cambiar condiciones >
}
int i=0;
while(i<5) {
System.out.println("hola");
i++;
}
41. BUCLES CONDICIONALES DO WHILE
<instrucciones para inicializar las
condiciones>
do {
<instrucciones para llevar a cabo el bucle y
cambiar condiciones >
} while (condiciones);
int i=0;
do {
System.out.println("hola");
i++;
} while (i<5);
42. CADENAS DE CARACTERES
La clase String
Creación de una cadena:
String miCadena = "Esta es la cadena";
Cadena Vacía vs Cadena Nula
String s1; // Cadena Nula, igual al valor null
String s2= ""; // Cadena Vacía
43. CADENAS (CONTINUACIÓN)
Comparación de cadenas:
if (cadena1.equals(cadena2))
System.out.println("Las cadenas son iguales");
else System.out.println("Las cadenas no son iguales");
Concatenación de cadenas:
String c3 = c1+c2;
45. EL MÉTODO TOSTRING
Cuando sobreescribimos el método toString de Object, esto nos
ofrece
un acceso automático al método println como sigue:
public class Clase {
private int entero;
public Clase (int e) {
entero = e;
}
public String toString() {
return(""+e);
}
}
Clase miClase = new Clase(5);
System.out.println(miClase); // escribe "5"
System.out.println("clase="+miClase); // escribe "clase=5"
46. ENTRADA DESDE TECLADO
import java.io.*;
BufferedReader in = new
BufferedReader(new InputStreamReader(System.in));
String cadena = in.readLine();
47. LECTURA DE NÚMEROS
int i=Integer.valueOf(in.readLine()).intValue();
double d=Double.valueOf(in.readLine()).doubleValue();
int i=Integer.valueOf(in.readLine().trim()).intValue();
double d=Double.valueOf(in.readLine().trim()).doubleValue();
48. ENTRADA/SALIDA DESDE ARCHIVOS
BufferedReader fin = new BufferedReader(new FileReader(nombreArchivo));
PrintWriter fout = new PrintWriter(new FileWriter(nombreArchivo));
fout.close();
49. EXCEPCIONES
Una excepción es un objeto que avisa que ha ocurrido alguna
condición inusual. Java tiene muchos objetos de excepción
predefinidos y también podemos crear los nuestros propios
Para utilizar excepciones, tenemos que hacer cuatro cosas:
Intentar: crear un bloquee alrededor de la instrucción donde
puedan ocurrir excepciones y precederlas con la palabra clave
try
Capturar: colocar a continuación de la instrucción try otro
bloque precedido por la palabra catch
Lanzar: si no se trata la excepción, ésta pasará
automáticamente al método llamador; si la capturamos y la
tratamos parcialmente, podemos de todas formas pasarla con
una instrucción throw.
Declarar: mencionar en la declaración del método qué
excepciones se devolverán al método llamador.
50. EJEMPLO
public void leeArchivo(String nombre) throws IOException {
BufferedReader fin = new BufferedReader(new FileReader(nombre));
try {
while(true) {
cadena = fin.readLine();
System.out.println(cadena);
}
} catch (EOFException e) {
System.out.println("Fin del archivo");
}
}
51. EXCEPCIONES DEFINIDAS
POR EL USUARIO
public class nombre extends Exception {
public nombre() {}
public nombre(String s) { }
} throw new nombre(“mensaje”);
52. EJEMPLO
public class DenominadorCeroException extends Exception {
public DenominadorCeroException() { super(); };
public DenominadorCeroException(String s) { super(s); };
}
public class Racional {
private int num, den;
public Racional(int n, int d) throws DenominadorCeroException {
if (d==0) throw new DenominadorCeroException("Denominador cero");
num = n;
den = d;
}
}