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