Introducción a la Programación
en Java
Elementos Básicos
Ángel Lucas González Martínez Jaime Ramírez
DLSIIS. Facultad de Informática Universidad Politécnica de Madrid
El primer Programa
• En java todos los programas tienen al menos una clase
• El punto de entrada de una aplicación es:
– El método main para aplicaciones en consola, AWT y SWING
– El método init para applets
• En todo fichero .java contiene una clase con el mismo nombre que el fichero
• Hay que tener cuidado con las mayúsculas y las minúsculas en los nombres de fichero
El primer Programa (consola)
//Primer programa en Java
//El fichero debe llamarse igual que la clase
public class HolaMundo {
/**
* @param args */
public static void main(String[] args) { System.out.println("Hola Mundo"); }
}
Definición de la clase
Punto de entrada
El primer Programa (Gráfico)
• La programación GUI es más compleja que la de consola
• Se basa en la programación dirigida por eventos • No existe un flujo de ejecución único: Los
eventos de usuario determinan las acciones a realizar
• Primer programa en AWT: codigo/El primer
Ejemplo/HolaMundo_AWT.java
• Primer programa en Swing: codigo/El primer
Elementos de una Aplicación
Paquete APaquete A Unidad de compilación: •Clases (.java) •Interfaces (.java) Unidad de compilación: •Clases (.java) •Interfaces (.java) Paquete NPaquete N Unidad de compilación: •Clases (.java) •Interfaces (.java) Unidad de compilación: •Clases (.java) •Interfaces (.java) Programa Java (.class) Programa Java (.class) Unidad de compilación: •Clases (.java) •Interfaces (.java)Los comentarios
• Fundamental en un lenguaje de programación • Dota de mayor claridad el código
• Facilita el mantenimiento
• Java permite poner comentarios que van a la documentación
• Tipos de comentarios:
– //: Una línea
– /* ..*/: Varáis líneas
Comentarios para Documentación
• De propósito general:
–@see: permite poner referencias en la sección
See Also
–@link: similar a see. El enlace es parte de un párrafo y no de una sección
• De clase: después de import e inmediatamente
antes de class. Algunos tags posibles:
–@author: Indica el autor o autores –@version: Permite indicar la versión
Los comentarios
• Comentarios de método:
– Inmediatamente antes al método – Se pueden utilizar los tags:
• @param: para cada parámetro permite indicar cual es su finalidad
• @return: permite indicar el valor de retorno • @throws: descripción de las excepciones que
levanta
• Ejemplo:..\Codigo\EjemploComentarios\Ejemplo
Los comentarios (javadoc)
• La herramienta javadoc interpreta los comentarios de documentación
• Genera las páginas html correspondientes • Permite la inserción de código html
• La documentación generada depende de:
– Los comentarios de documentación – Los parámetros pasados a javadoc
Los comentarios (javadoc)
• Se puede encontrar más información en:
http://java.sun.com/j2se/javadoc/index.jsp
• Para generar la documentación se utiliza el comando:
javadoc –author -d docs –version –private -link
http://java.sun.com/j2se/1.5.0/docs/api EjemploComentarios.java • En eclipse: project > Generate Javadoc
Algunas definiciones
• Clase: Son una descripción abstracta de un grupo de objetos que comparten características (atributos) y operaciones (métodos)
• Objeto o Instancia: Particularización de una clase
• Método: Servicio que puede realizar un objeto (de instancia) o una clase (de clase)
• Atributo: Propiedad que caracteriza a un objeto (de instancia) o compartido por todas las
instancias (de clase)
Los Identificadores
• Nombre asignado a una clase, constante, método o variable
• Puede contener cualquier letra, número o _ • No hay restricción en el número de caracteres • Distingue entre mayúsculas y minúsculas • No puede empezar por número
Los Identificadores
• Sun establece un convenio para los identificadores:
– Nombres de clase empiezan por mayúsculas – Nombres de atributos, variables y métodos
empiezan siempre con minúsculas: argumentos
– Nombres compuestos, la separación se marca con una letra mayúscula: proximaSalida
– Constantes todos los caracteres en mayúsculas:
SALUDO
SOLICITUD_INFORME
Los Literales
• Valor constante que se escribe directamente en el programa • Literales enteros: – Base diez: 503 – Octal: 0767 – Hexadecimal: 0x1F7 • Literales reales: – Reales: 3.14159f, 0.314159E10f – Doble precisión: 6.5454E-10, 9.81
Los Literales
• Carácter
– Se representan entre comillas simples ‘a’
– Caracteres especiales o de escape: ‘\t’, ‘\n’, ‘\\’, ...
• Cadena de caracteres
– Conjunto de caracteres entre comillas dobles – Para incluir comillas dobles en una cadena de
caracteres se utiliza \”
“Hola Mundo” “Hola \“Mundo\””
Tipos de datos básicos
• Los tipos básicos proporcionados son: Palabra Tipo de datos Rango
boolean Variable lógica false y true byte Entero de 8 bits De –128 a 127 char Character.SIZE
Carácter Unicode Cualquier carácter
short Short.SIZE De Short.MIN_VALUE a Short.MAX_VALUE
int Integer.SIZE De Integer.MIN_VALUE a Integer.MAX_VALUE
long Long.SIZE De Long.MIN_VALUE a Long.MAX_VALUE
float Float.SIZE De Float.MIN_VALUE a Float.MAX_VALUE
Clases Asociadas a los Tipos Básicos
• Java proporciona clases para los tipos básicos • Necesarias para las contenedoras y plantillas • Java 5 conversión automática Básico ↔ Clase• Proporciona conversión String ↔ Tipo (valueOf
↔ toString) Clase Tipo básico Boolean boolean Byte byte Character char Double double Float float Integer int Long long Short short
Atributos, constantes y variables
• Cada instancia tiene una copia de los atributos • Las constantes son compartidas por todas las
instancias
• Las constantes públicas son accesibles usando el nombre de clase
• Las variables sólo existen dentro de un ámbito • No pueden existir nombre repetidos en un
subámbito
• Las variables pueden definirse en cualquier parte dentro de un ámbito o bloque
Atributos, constantes y variables
• Atributos de instancia:
– Se definen fuera de los métodos – No tienen posición fija
– Aconsejable agruparlos en una zona del fichero – Al definirlos se pueden asignar un valor inicial – No debería existir atributos públicos
– Pueden ser modificados consultado por métodos – Tiene un tipo asociado
Atributos, constantes y variables
• Atributos de case:
– Se aplica lo anterior
– Van precedidos de la palabra reservada static
– Puede ser consultado y modificado por métodos de clase
– Compartida por todas las instancias
• Constantes:
– Van precedidas de final static
– Han de ser inicializadas
– Compartidas por todas las instancias – Puede ser pública
Atributos, constantes y variables
public classLiterales_Tipos_Basicos {//Literales_Tipos_Basicos
private intatributoInstnacia = 0;
private static intatributoClase = 0;
public static intatributoClasePublico = 0;
final static intSOLICITUD_INFORME = 1;
public final static floatEURO =166.386f;
public static voidmain (String [] args) {//main
floatcont=2.5f;
Enumerados
• Aparecen en Java 5
• Antes de JDK 1.5 se usaban constantes • Se definen utilizando la palabra enum • La conversión a String la hace Java • La obtención del ordinal por medio de
java.lang.Enum <Enum>
• Se pueden definir métodos asociados a un enumerado
• Se pueden asociar atributos a un enumerado • Ejemplo:
Array
• Un array es un conjunto de elmentos del mismo tipo
• El acceso a cada elemento se realiza por medio de un índice
• La primera posición del array es la cero
• La última es n-1
• La sintaxis es: tipo [] id_array;
• Para conocer el tamaño de un array se usa la propiedad length
Array
//Array sin tamaño especificado int[] nValores;
//Crea un array de 55 enteros, no se ha inicializado ninguna posición int[] nValores2 = new int[55];
//Crea un array de tres posiciones, y se inicializa cada una de ellas int[] nValores3 = {2, 3, 4};
String [] conjuntoCadenas = newString [5]; String [] conjuntoCadenas2 = {"Hola", "Adiós"}; //Array de una clase definida por el usuario MiClase [] conjMiClase = newMiClase [3]; //...
nValores = new int [3]; nValores[0] = nValores3 [2]; conjuntoCadenas[1] = "Hola";
//Los parámetros dependen de los constructores de la clase conjMiClase[0] = newMiClase(...);
La clase
String
• Define un array de caracteres • Literales entre comillas dobles (“)• Una vez creado no se puede cambiar el valor de su contenido
• A una variable string se le puede asignar un nuevo valor
• StringBuffer define Strings modificables
La clase
String
• char charAt (intpos)• intcompareTo (String con):
– Resultado cero son iguales
– Resultado negativo “con” es mayor – Resultado positivo si “con” en menor
• intcompareToIgnoreCase (String con)
• booleanequals (String compara) • booleanequals (Object compara)
• booleanequalsIgnoreCase (String compara) • int length()
Expresiones y operadores
• Expresión: conjunto de identificadores o literales combinados usando operadores para obtener un valor
• Los elementos participantes en una expresión deben respetar restricciones y tipos
• Java proporciona operadores: aritméticos, de relación, lógicos, de bits, de cadena, de
selección, conversión y de asignación
Operadores aritméticos
• Unarios: -, ++ y
--• Binarios: +, -, *, /,%: En la división si los
operandos son enteros el resultado es entero. El módulo sólo es aplicable con enteros
int a = 2, z;
float b = 3.5f; z = -a; //z vale -2
z = a++; //a vale 3, z vale 2 z = --a; //a vale 2, z vale 2 b--; //b vale 2.5
Operadores aritméticos
int a = 2; int b = 5; int c = 7; float d = 3.5f; float e = 2.5f; float f = 5f / 2; //f vale 2.5 c = a + b - c; //c pasa a valer 0 c = b / a; //c pasa a valer 2 c = b % a; //c pasa a valer 1 c = a * b + c; //c pasa valer 11 f = e – d; //f pasa a valer -1.0Operadores de asignación y relación
• Operadores de asignación =, <op>=• Comparan dos elementos • Retornan cierto o falso
• Los operadores son: Operador Significado
== Igual* != Distinto* < Menor <= Menor o igual >= Mayor o igual > Mayor
Operadores lógicos
• Y lógico: && • O lógico: ||
• O exclusivo (Xor): ^ • Negación: !
• Java utiliza evaluación perezosa
c = a > 1 || ++e != 7 && m(); //c = ((a > 1) || (((++e) != 7) && m())) /* como a es mayor que 1, ya se sabe con seguridad que c será cierto, por lo que no se evaluará el resto de la expresión, es decir, no se autoincrementa e ni se llama a la función m */
Operadores sobre bits
• Y bits: & • O bits: | • Xor bits: ^ • Complemento ~ • Desplazamiento o shift: Operador Significado
op1 << op2 Desplaza en op1 a la izquierda el número de bits indicados por op2. Se rellena con ceros los bits de la derecha
op1 >> op2
Desplaza en op1 a la derecha el número de bits indicados por op2. Se rellenan los bits de la izquierda con el más significativo (bit de signo)
op1 >>> op2 Desplaza en op1 a la derecha el número de bits indicados por op2. Se rellena con ceros los bits de la izquierda
Operadores de cadena y selección
• Operador de cadena concatenar: +
• Operador de selección: ?: String saludo = "Hola"; String nombre = "Luis"; //Toma el valor “Hola, Luis”
String saludoPersonalizado = saludo + ", " + nombre; //Toma el valor “5*6=30”
String operación = "5*6=" + 5 * 6;
float nota = 5.4;
String calificacion = (nota >= 5.0) ?
"Aprobado" : "Suspenso";
Conversión de tipos (
casting
)
• Permite el cambio de un tipo a otro
• Produce una modificación de la información • No siempre es factible la conversión
public class Casting
{//Casting
//Se define el punto de entrada
public static void main (String [] args){//main
char caracter = 'a';
int entero = (int) caracter;
float real = 66.65533f;
long enteroLargo = (long) real;
String prueba = "Hola";
//int entero2 = (int) prueba; ERROR
... }//main }//Casting
Precedencia de operadores
Tipo Operadores Asociatividad
postfijo [] . () expr++ expr-- De izquierda a derecha unarios ++expr --expr +expr -expr ! ~ De derecha a izquierda creación/casting new (type)expr De derecha a izquierda multiplicativo * / % De izquierda a derecha suma y resta + - De izquierda a derecha desplazamiento << >> >>> De izquierda a derecha de relación < <= > >= instanceof De izquierda a derecha igualdad == != De izquierda a derecha y sobre bits & De izquierda a derecha xor sobre bits ^ De izquierda a derecha o sobre bits | De izquierda a derecha y lógico && De izquierda a derecha o lógica || De izquierda a derecha operador de selección ?: De derecha a izquierda asignación = "op=" De derecha a izquierda
Sentencias de Control de Flujo
• Condicional if if (expresión_lógica) { sentencias } [else { sentencias }] Evaluar expresión Sentencias de IF Sentencias de ELSE false true
Sentencias de Control de Flujo
• Selección switch: Expresión
Opción1Opción1 Opción2Opción2 OpciónnOpciónn break? break? defaultdefault break? switch(expresión) {
caseet1: sentencias1;
[break;]
caseet2: sentencias2;
[break;]
. . .
caseetn: sentenciasn;
[break;] [default: sentencias;] } Si No No No
Sentencias de Control de Flujo
• Bucle for:
– Se conoce el número de iteraciones
– Utiliza una o varias variables a modo de contador – Termina cuando la condición deja de ser cierta
InicializaciónInicialización Condición SentenciasSentencias Actualizar Contadores Actualizar Contadores false true
for(inicialización;condición;
actualización)
{
sentencias
Sentencias de Control de Flujo
• Bucle for each(JDK 1.5):
– Recorrido de una colección – No hay contador
– Variable que se rellena con cada uno de los valores del contenedor o array
int i;
char j;
for (i= 1, j= 'c'; i<nElementos && j<'k';i++,j+=2)
{
sentencias
}
for (intd= 0; d<nElementos;d++)
{
sentencias
}
Sentencias de Control de Flujo
• TMes2.values retorna un array con los valores del enumerado
• También se puede recorrer una colección. Por Ejemplo una cola
for (TMes2 mes : TMes2.values())
{
System.out.println("El mes: "+mes+
“ tiene un valor numérico de "+mes.intValue()); }
java.util.Queue<Float> cDatos=new
java.util.LinkedList <Float>(); cDatos.add((Float) 5.4f);
cDatos.add(new Float(5.6));
cDatos.add((Float) 5.7f);
for (Float dato : cDatos)
{//FOR
System.out.println("[for java 5 sobre
Queue<Float>]Dato:"+dato); }//FOR
Sentencias de Control de Flujo
• Bucle while:
– Las sentencias se realizan un número de veces en función de una condición
– Se sale cuando la condición se evalúa como falsa Condición SentenciasSentencias false true while(condición) { sentencias }
Sentencias de Control de Flujo
• Bucle do while:
– La condición de salida se comprueba al final del bucle
– Las operaciones del bucle se realizan siempre al menos una vez
Condición false true SentenciasSentencias do { sentencias } while(condición);
Ejercicios
• Realizar un programa que reciba una lista de cadenas como argumento y las muestra por pantalla una vez ordenadas
• Realizar un programa que pida al usuario
cadenas hasta que este diga que no quiere dar más cadenas. Le pregunta al usuario si quiere orden ascendente o descendente. Las cadenas se ordenan según el criterio dado. Utilizar