Introducción a la Programación en Java

Texto completo

(1)

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

(2)

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

(3)

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

(4)

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

(5)

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

(6)

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

(7)

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

(8)

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

(9)

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

(10)

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

(11)

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:

(12)

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(...);

(13)

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()

(14)

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

(15)

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.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

(16)

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

(17)

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

(18)

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

(19)

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

(20)

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

(21)

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);

(22)

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

Figure

Actualización...

Referencias

Actualización...