Guía Programación Java
Guía Programación Java
Variables
Las variables almacenan datos que pueden cambiar durante la ejecución de un programa. Para usarlas en
Java, deben declararse con un tipo de dato y un nombre.
Declaración de variables
Se usa la sintaxis:
tipo_variable nombre_variable;
Ejemplo:
int numero;
int numero = 0;
Reglas para nombrar variables
2. Constantes
¿Qué es una constante?
Una constante es un valor que no cambia durante la ejecución del programa. Si intentamos
modificarla, Java generará un error.
¿Por qué usar constantes?
Se usa la palabra clave final antes del tipo de dato y el nombre debe escribirse en mayúsculas
por convención:
Ejemplo práctico
public class PruebaApp {
public static void main(String[] args) {
final double IVA = 0.18; // Definimos la constante
int producto = 300; // Precio del producto
5 +, - (Suma, resta)
9 `
10 ? : (Operador ternario)
int variable = 10 + 5 * 5;
System.out.println(variable); // Salida: 35
System.out.println(variable); // Salida: 75
4. Prioridad de operadores
Tabla de prioridad de operadores
Prioridad Operadores
1 (Mayor prioridad) (), [], . (Paréntesis, corchetes, punto)
2 -num, --, ++, ! (Signo negativo, decremento, incremento, negación)
3 new Tipo() (Creación de objetos)
4 *, /, % (Multiplicación, división, módulo)
Prioridad Operadores
5 +, - (Suma, resta)
6 >, <, >=, <= (Comparaciones)
7 ==, != (Igualdad, desigualdad)
8 && (AND lógico)
9 `
10 ? : (Operador ternario)
11 (Menor prioridad) =, +=, -=, *=, /=, %= (Asignación)
Consejos
-Usar paréntesis () para asegurarse de que las operaciones se ejecutan en el orden esperado.
-Agregar trazas (System.out.println) para depurar cálculos complejos.
-Aprender el orden natural de ejecución para mejorar la lectura del código.
5. Convención de nombres
Convención
• En las clases:
o La primera letra ira en mayúscula.
o Si esta formada por más de una palabra, la primera letra de la palabra estará en
mayúscula.
o Si está clase contiene un main, haciendo que sea ejecutable, incluiremos al
final App. Si no tiene, no se incluye.
o Ejemplo: SalarioEmpleadoApp
• En los métodos o funciones:
o La primera letra ira en minúscula.
o Si esta formada por más de una palabra, la primera letra de la palabra estará en
mayúscula.
o Ejemplo: calculaSueldo
• En las constantes:
o Todas las letras irán en mayúsculas.
o No pueden comenzar por números.
o Ejemplo: IVA
• En las variables:
o La primera letra ira en minúscula.
o Si esta formada por más de una palabra, la primera letra de la palabra estará en
mayúscula. También se pueden usar separadores como guiones bajos.
o No pueden comenzar por números.
o Ejemplo: sueldoEmpleado o sueldo_empleado
• En las interfaces:
o La primera letra ira en mayúscula.
o Si esta formada por más de una palabra, la primera letra de la palabra estará en
mayúscula.
o Normalmente, suelen acabar en -able.
Podemos mostrar los datos de dos maneras, a través de la consola o mediante un cuadro de
dialogo. Este primero solo lo veremos si ejecutamos nuestro programa en Eclipse o en una
ventana de comandos.
También se puede incluir una cadena de texto mas el valor de una variable, para ello
escribimos la cadena con comillas dobles, un signo + y el nombre de la variable, recuerda
poner un espacio entre una variable y una cadena de texto. Por
ejemplo, System.out.println(«El valor de la variable num es
«+num); o System.out.println(«El precio final es «+precio+» euros»);
Incluso podemos escribir una formula y nos mostrara el resultado, debe estar entre
paréntesis.
La clase Scanner nos permite que un usuario externo a nuestra aplicación inserte datos necesario
para nuestro programa, por ejemplo, pedir al usuario un número para calcular alguna formula.
Hay varias formas de usar esta clase pero nos centraremos en la introducción de datos. En otros
posts, nos centraremos en esas otras funciones.
Ya teniendo el objeto creado, podemos usar los metodos que tiene. Recordar que tenemos que
importar la clase poniendo este import al principio del fichero.
import java.util.Scanner;
Los que mas nos importa son los metodos next. Son los que devuelven el tipo de dato deseado. Por
ejemplo:
8. Estructuras condicionales
Explicación
Las estructuras condicionales nos permiten ejecutar una serie de instrucciones si cumple una
determinada condición que nosotros le indiquemos. Es importante recordar que la condición debe
dar un resultado booleano, por lo que lo mas normal es usar operadores relacionales y
condicionales.
If
Le indicamos una condición si esta es verdadera se ejecuta, sino no se ejecuta las instrucciones de
dentro. Se suele traducir como «Si se cumple esta condición haz esto». Su sintaxis es:
If-ELSE
Es como el anterior solo que después de cerrarse la llave de if, se añade else sin indicarle
ninguna condición. Esto sirve para que si la condición del if no es verdadera, ejecute otras
instrucciones que estarán dentro de else. Se suele traducir como «Si se cumple esta condición haz
esto y sino haz esto»
If-ELSEIF
Esta estructura es como una mezcla de los anteriores, esto nos permite, que si no se cumple
la condición podamos indicar otra condición para hacerlo aún mas especifico. Se suele traducir
como «Si se cumple esta condición haz esto y sino si cumple esta condición haz esto».
SWITCH
Esta estructura condicional de selección múltiple, le damos un valor (puede ser una variable) y
una lista de casos y si cumple alguno de los casos ejecuta las instrucciones asociadas a ella, en
caso de que ninguna sea podemos indicarle que hace por defecto, normalmente se usa para
indicar de un error con un mensaje. Su sintaxis es:
La clase Scanner nos permite que un usuario externo a nuestra aplicación inserte datos necesario
para nuestro programa, por ejemplo, pedir al usuario un número para calcular alguna formula.
Hay varias formas de usar esta clase pero nos centraremos en la introducción de datos. En otros
posts, nos centraremos en esas otras funciones.
import java.util.Scanner;
Los que mas nos importa son los metodos next. Son los que devuelven el tipo de dato deseado. Por
ejemplo:
Una estructura de repetición o bucle nos permite ejecutar un numero de veces determinado una
serie de instrucciones. La mayor utilidad es evitar la repetición de lineas de código iguales. Para
salir del bucle, se indica una condición, si esa condición no se cumple se sale del bucle.
While
Indicamos una condición que se ejecutara hasta que la condición sea falsa, es importante que la
variable que este en la condición, varíe para que no se produzca un bucle infinito.
Como vemos, num vale 1 al principio, se comprueba la condición, como 1 es menor o igual que 5,
entra en el bucle y ejecuta las instrucciones, y así sucesivamente hasta que num vale 6, ya que 6 no
es menor o igual que 5. Si num no fuera modificado, nunca saldría del bucle.
For
Este tipo de bucle, es como el anterior pero ademas de la condición, incluye una inicialización de
una variable y un incremento o decremento de esa variable, en principio, no es necesario que
incluya las 3 partes, se pueden inicializar o incrementar varias varias separadas por comas. Cada
parte se separa con un ; . NOTA: cuando salimos del bucle, la variable inicializada no existe.
Do-while
Esta estructura repetitiva, tiene algo especial y es que como mínimo las instrucciones dentro de la
estructura repetitiva al menos una vez, mientras que el while sus instrucciones pueden ejecutarse
0 o N veces. Se sale del bucle cuando la condición del while no se cumple, si esto pasa empieza
desde el do. Se utiliza para la validación de datos.
Tenemos que pensar bien la condición de salida. En nuestro caso, si insertamos un 5 (5>=10 or
5<0) devolvería falso, si insertáramos un -1 (-1>=10 or 5<o) devolvería verdadero, haciendo que
vuelva a pedir un numero.
La Cada variable que creamos tiene un ámbito, es decir, que hay partes de la aplicación donde la
variable creada no existe. Un bloque de código es lo que hay dentro de { }.
- A nivel global de clase: cuando declaramos una variable al inicio de la clase (antes del main),
esta variable se podrá leer y modificar en cualquier parte del programa.
- Variable local a nivel de método: una variable se declara dentro de un método y cuando este
finaliza, la variable deja de existir.
- Variable a nivel de bloque de código: cuando creamos una variable dentro de un bloque de
código (como dentro de un if) este solo existirá dentro de ese bloque.
12. Casting (conversión de tipos)
Explicación
Un casting es una operación especial que nos permite realizar una conversión entre tipos, es algo
que hemos comentado en varios posts, que algunos tipos no son compatibles entre sí como int y
double.
El código anterior, no nos dará ningún error, ya que double si puede contener un int, pero si
cambiamos la linea b=a; por a=b; nos informara un error, esto es porque int no puede contener
un double, pero si usamos un casting si nos dejara ejecutar.
Como vemos, un casting se indica entre paréntesis con el tipo de dato al que queremos pasar, en este caso int. La variable
a, contendrá un 2 y no un 2.5
El error relacionado con los castings es Type mismatch: cannot convert from (dato1) to (dato2)
No se puede hacer castings entre todos los tipos, por ejemplo, entre un int y un String. El error que aparece es
este Cannot cast from (dato1) to (dato2).
Vamos a ver otro ejemplo muy común para usar un casting. Si recuerdas dijimos en otro post, que int y char son
compatibles, si tenemos un int y hacemos un casting a char este se convertirá en un carácter asociado de la tabla ASCII.
Veamos un ejemplo:
13. Tipos de datos ENUMERADOS
Explicación
Los tipos enumerados es como una clase donde definimos una serie de constantes de cualquier
tipo de dato, normalmente suelen tener algo en común entre entre ellos. Escribimos los valores
separados por comas, estos estarán en mayúsculas como si fueran constante. Se declaran así:
Ejemplo
- Clase ejecutable
Como vemos, para asignar la especialidad usamos el tipo enumerado, igual que si fuera una constante.
14. String
Explicación
String se usa para almacenar un conjunto de caracteres, ademas, es un tipo de dato especial, ya
que en realidad es una clase pero que puede declararse como si fuera una variable primitiva.
El valor de un String debe ir con comillas dobles para que Java lo considere un String, cuidado no
confundir con char, ya que este solo puede almacenar un solo carácter y va entre comillas simples.
Un String puede contener todos los caracteres que queramos.
Un String es como un array, veremos que en los métodos podemos obtener partes de la cadena. El
primer carácter es la posición 0.
15. Métodos de String
Explicación
La clase String tiene varios métodos muy útiles como saber su longitud, trocear la cadena, etc.
Recuerda que para invocar un método debemos escribir el nombre del String, un punto y el nombre
del método, más sus parámetros. Es importante que si necesitas almacenar el valor devuelto, uses
una variable para ello.
Los métodos en Java nos sirven para ejecutar instrucciones mediante unos parámetros que
nosotros le damos (a veces, no es necesario incluir parámetros).
Los métodos se definen fuera del main, debemos de indicarle que es lo que queremos que tipo de
dato o referencia devuelva, ya sea un int, String, un objeto, un array, etc, después el nombre del
método y por último los parámetros que utilizara el método, estos parámetros son los valores que
le daremos desde el main.
19. Arrays
Explicación
La Los arrays son colecciones de datos que agrupan una serie de variables del mismo tipo.
Cuando creamos un array se reserva automáticamente memoria, al iniciar un array debemos indicar
su tipo y tamaño, este tamaño no puede variar durante la ejecución. El tamaño debe ser un número
entero positivo.
Para crear un array usamos new, veamos su sintaxis para definirlo:
Tipo_dato nombre_array[]=new tipo_dato[tamaño];
Métodos ARRAYS
Veamos un ejemplo de un método que incluya un plus al sueldo si tiene mas de 40 años:
Como vemos, le pasamos por parámetro el plus, pero ¿por que no le pasamos la edad o el salario
por parámetro? Esto es debido a que desde la propia clase puede acceder a todos sus atributos.
Solo nos falta crear un constructor, este es un método especial en las clases, que es el invocado al
crear un nuevo objeto de esa clase, normalmente se suele usar para inicializar los atributos,
también puede ejecutar métodos.
Si no definimos un constructor Java, nos construye uno por defecto, que no hace nada al crear el
objeto. NOTA: si definimos un constructor, el constructor por defecto desaparece.
Para crear un constructor, escribiremos public nombre_clase (parámetros). Sigamos con el
ejemplo:
22. Referencias (creación de objetos con new)
Explicación
Cuando creamos un objeto con new, estamos creando una referencia, esta indica donde está el
objeto en memoria. Podemos asignar una referencia a otro objeto. Veamos un ejemplo con arrays:
Como vemos en el ejemplo anterior, hay una nueva palabra, null, sirve para indicar que no apunta
nada para que el recolector de basura limpie la memoria de aquello que no es necesario. Si lo
queremos invocar manualmente a este recolector, usamos System.gc();
Null también nos sirve para comprobar, por ejemplo, si un objeto apunta a alguna dirección de
memoria, esto suele ser útil en varios casos.
Las referencias se pueden comparar con el operador lógico == o !=, si dos referencias son iguales
es que apuntan a la misma zona de memoria. Por ejemplo:
23. Variable this
Explicación
/**
* El salario por defecto
*/
private final static double SALARIO_DEF=600;
Como vemos, se define igual que hemos visto, incluyendo static, esto se debe ya que sera igual
siempre en todos los objetos que creemos, lo explicaremos con mas detalle con los método y
variables estáticas. Cuando creemos un empleado, sin parámetros, el empleado tendrá un salario
de 600. Veamos un ejemplo completo:
27. Sobrecarga de métodos y constructores
Explicación
28. Métodos y atributos estáticos (static)
Explicación
Una variable o método estático es aquel es igual en todas las clases, es decir, que aunque creemos
distintos objetos en todos sera igual. Se define escribiendo static en la definición del método o del
atributo.
Vamos a ver un ejemplo, tenemos una clase Empleado con un atributo salarioBase que es estático.
29. Clases y métodos finales
Explicación
30. Herencia
Explicación
La herencia en Java consiste en la creación de clases a partir de otras ya existentes. Tenemos lo que
llamamos una clase padre (superclase) y clases hijas (clases derivadas), que heredan los métodos y
atributos de su clase padre.
Vamos a ver un ejemplo, tenemos una clase empleado que sera una superclase y las clases hijas serán el
tipo de empleados que puede haber como comerciales o repartidores.
La idea es que los empleados sean del tipo que sean tienen atributos o métodos comunes y para optimizar
las clases creamos una clase padre que contenga todo lo común a todas las hijas y en las hijas, ademas de
los atributos del padre pueden tener sus propios atributos o métodos.
Una buena forma de ver la herencia, es con la frase «es un». Por ejemplo, un Comercial «es un» Empleado
o un Repartidor «es un» Empleado.
Vayamos por partes, en la clase padre, vemos que los atributos en lugar de private usamos protected, haciendo
que los atributos se hereden a las clases hijas.
En las clases hijas, vemos que después del nombre de la clase escribimos extends nombre_clase_padre, también
tienen sus propios atributos.
Debemos tener en cuenta varios aspectos, los constructores de la clase hija siempre llaman al constructor por
defecto (el que no tiene parámetros) de la clase padre, también podemos indicar que constructor debe de llamar,
se indica con super(parametros);, después podemos hacer lo queramos. Si no indicamos nada es como si
escribiéramos super();.
También debemos tener en cuenta que los métodos no es necesario que los heredemos, ya que con public las clases
hijas podrán acceder a los métodos de la clase padre.
También podemos llamar métodos de la clase padre con super.nombre_método(parámetros) podemos usarlo para
que llame a un método que necesitamos para un método de la clase hija. Nos ahorrara trabajo, es mejor que copiar
y pegar código.
31. Polimorfismo
Explicación
32. Método toString
Explicación
33. JAVADOC
Explicación
Javadoc es una utilidad incluida en el JDK, que genera documentación automática en formato HTML, a partir de
código fuente Java.
Los comentarios deben ser escritos siguiendo una serie de reglas, donde podrán figurar las propias etiquetas
Javadoc junto con etiquetas HTML. Un ejemplo de Javadoc es el API de Java.
Se documenta las clases, los métodos, constructores, paquetes y atributos. En principio, los atributos y métodos
privados no es necesario documentarlos con Javadoc.
/**
* Texto con alguna descripción (posibilidad de usar HTML)
*
* Etiquetas javadoc (comienzan por @)
*
*/
En las clases, se hace una breve descripción de la clase y se suele escribir una etiquetas de Javadoc especiales para
las clases.
En los métodos y constructores, la primera frase describe lo que hace el método de forma breve, en las siguiente
lineas definimos las etiquetas de Javadoc, ahora hablamos de ellas.
En los atributos, se escribe una breve definición del mismo.
Las etiquetas de Javadoc van precedidas por @, estos son los mas usados:
- @author: Autor de la clase. Solo para las clases.
- @version: Versión de la clase. Solo para clases.
- @see: Referencia a otra clase, ya sea del API, del mismo proyecto o de otro. Por ejemplo:
@see cadena @see paquete.clase#miembro @see enlace
- @param: Descripción parámetro. Una etiqueta por cada parámetro
- @return: Descripción de lo que devuelve. Solo si no es void. Podrá describir valores de retorno
especiales según las condiciones que se den, dependiendo del tipo de dato
- @throws: Descripción de la excepción que puede propagar. Habrá una etiqueta throws por cada tipo
de excepción.
- @deprecated: Marca el método como obsoleto. Solo se mantiene por compatibilidad.
- @since: Indica el nº de versión desde la que existe el método.