Download Introducción a la Programación en Java El primer Programa

Document related concepts
no text concepts found
Transcript
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
1
El primer Programa (consola)
//Primer programa en Java
//El fichero debe llamarse igual que la clase
Definición de la clase
public class HolaMundo {
/**
* @param args
Punto de entrada
*/
public static void main(String[] args) {
System.out.println("Hola Mundo");
}
}
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
Ejemplo/HolaMundo_Swing.java
2
Elementos de una Aplicación
ProgramaJava
Java
Programa
(.class)
(.class)
PaqueteAA
Paquete
PaqueteNN
Paquete
Unidad de compilación:
•Clases (.java)
•Interfaces (.java)
Unidad de compilación:
•Clases (.java)
•Interfaces (.java)
Unidad de compilación:
•Clases (.java)
•Interfaces (.java)
Unidad de compilación:
•Clases (.java)
•Interfaces (.java)
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
3
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
Comentarios.java
4
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
5
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
6
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
• Lógico: true, false
7
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
boolean
byte
char
short
int
long
float
double
Tipo de datos
Variable lógica
Entero de 8 bits
Character.SIZE
Carácter Unicode
Short.SIZE
Integer.SIZE
Long.SIZE
Float.SIZE
Double.SIZE
Rango
false y true
De –128 a 127
Cualquier carácter
De Short.MIN_VALUE a Short.MAX_VALUE
De Integer.MIN_VALUE a Integer.MAX_VALUE
De Long.MIN_VALUE a Long.MAX_VALUE
De Float.MIN_VALUE a Float.MAX_VALUE
De Double.MIN_VALUE a Double.MAX_VALUE
8
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
Byte
Character
Double
Float
Integer
Long
Short
boolean
byte
char
double
float
int
long
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
9
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
Se accede con ID_CLASE.ID_CTE
10
Atributos, constantes y variables
public class Literales_Tipos_Basicos
{//Literales_Tipos_Basicos
private int atributoInstnacia = 0;
private static int atributoClase = 0;
public static int atributoClasePublico = 0;
final static int SOLICITUD_INFORME = 1;
public final static float EURO = 166.386f;
public static void main (String [] args)
{//main
float cont=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:
Codigo\Identificadores_Literales_Tipos_Basicos
11
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 = new String [5];
String [] conjuntoCadenas2 = {"Hola", "Adiós"};
//Array de una clase definida por el usuario
MiClase [] conjMiClase = new MiClase [3];
//...
nValores = new int [3];
nValores[0] = nValores3 [2];
conjuntoCadenas[1] = "Hola";
//Los parámetros dependen de los constructores de la clase
conjMiClase[0] = new MiClase(...);
12
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 (int pos)
• int compareTo (String con):
– Resultado cero son iguales
– Resultado negativo “con” es mayor
– Resultado positivo si “con” en menor
•
•
•
•
•
•
int compareToIgnoreCase (String con)
boolean equals (String compara)
boolean equals (Object compara)
boolean equalsIgnoreCase (String compara)
int length()
static String valueOf (<tipo básico> valor)
13
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 -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
• Binarios: +, -, *, /, %: En la división si los
operandos son enteros el resultado es entero. El
módulo sólo es aplicable con enteros
14
Operadores aritméticos
int a
int b
int c
float
float
float
c = a
c = b
c = b
c = a
f = e
=
=
=
d
e
f
+
/
%
*
–
2;
5;
7;
= 3.5f;
= 2.5f;
= 5f / 2; //f vale 2.5
b - c; //c pasa a valer 0
a; //c pasa a valer 2
a; //c pasa a valer 1
b + c; //c pasa valer 11
d; //f pasa a valer -1.0
Operadores 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
15
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
Desplaza en op1 a la izquierda el número de bits indicados
op1 << op2
por op2. Se rellena con ceros los bits de la derecha
Desplaza en op1 a la derecha el número de bits indicados
op1 >> op2 por op2. Se rellenan los bits de la izquierda con el más
significativo (bit de signo)
Desplaza en op1 a la derecha el número de bits indicados
op1 >>> op2
por op2. Se rellena con ceros los bits de la izquierda
16
Operadores de cadena y selección
• Operador de cadena concatenar: +
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;
• Operador de selección: ?:
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
17
Precedencia de operadores
Tipo
postfijo
unarios
creación/casting
multiplicativo
suma y resta
desplazamiento
de relación
igualdad
y sobre bits
xor sobre bits
o sobre bits
y lógico
o lógica
operador de selección
asignación
Operadores
[] . () expr++ expr-++expr --expr +expr -expr ! ~
new (type)expr
*/%
+<< >> >>>
< <= > >= instanceof
== !=
&
^
|
&&
||
?:
= "op="
Asociatividad
De izquierda a derecha
De derecha a izquierda
De derecha a izquierda
De izquierda a derecha
De izquierda a derecha
De izquierda a derecha
De izquierda a derecha
De izquierda a derecha
De izquierda a derecha
De izquierda a derecha
De izquierda a derecha
De izquierda a derecha
De izquierda a derecha
De derecha a izquierda
De derecha a izquierda
Sentencias de Control de Flujo
• Condicional if
false
Evaluar
expresión
true
Sentencias de
ELSE
Sentencias de
IF
if (expresión_lógica)
{
sentencias
}
[else
{
sentencias
}]
18
Sentencias de Control de Flujo
• Selección switch:
Expresión
Opción1
Opción1
switch (expresión)
{
case et1: sentencias1;
[break;]
case et2: sentencias2;
[break;]
...
case etn: sentenciasn;
[break;]
[default: sentencias;]
}
No
break?
Si
Opción2
Opción2
No
break?
Opciónn
Opciónn
No
break?
default
default
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ón
Inicialización
Actualizar
Actualizar
Contadores
Contadores
Condición
true
false
for (inicialización; condición;
actualización)
{
sentencias
}
Sentencias
Sentencias
19
Sentencias de Control de Flujo
int i;
char j;
for (i= 1, j= 'c'; i<nElementos && j<'k';i++,j+=2)
{
sentencias
}
for (int d= 0; d<nElementos;d++)
{
sentencias
}
• 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
Sentencias de Control de Flujo
• TMes2.values retorna un array con los valores
del enumerado
for (TMes2 mes : TMes2.values())
{
System.out.println("El mes: "+mes+
“ tiene un valor numérico de "+mes.intValue());
}
• También se puede recorrer una colección. Por
Ejemplo una cola
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
20
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
while (condición)
{
sentencias
}
Condición
false
true
Sentencias
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
Sentencias
Sentencias
do
{
sentencias
} while (condición);
Condición
false
true
21
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
consola.jar
22