Académique Documents
Professionnel Documents
Culture Documents
ndice
1. De qu estamos hablando? 2. Java es un lenguaje de programacin orientado a objetos: OO
Objetos y clases Variables y mtodos Modificadores de acceso, constructores y mtodo main
3. Ms orientacin a objetos:
Leng. Prog. Herencia Reescritura, sobrecarga Operadores Arrays Strings Control de flujo de programa: condicionales y bucles Excepciones
1. De qu estamos hablando?
Arquitectura de desarrollo
Editores Notepad Herramientas de Desarrollo
- Netbeans (JDK) - Visual J++ - Visual .Net - Visual Caf - Java Workshop - J Builder - Visual Age
Grasp
Cdigo Java fichero.java
JDK
Bytecode
Otros
fichero.class
Otros
javac fichero.java
HolaMundo.class
HolaMundo.java
Hola Mundo
1. Compilamos: 2. Ejecutamos:
Arquitectura de Ejecucin
Java Class Libraries (java extension API) Java Class Libraries (Java Base API)
Java Interpreter
Qu es un objeto?
Los objetos son representaciones (simples/complejas) (reales/imaginarias) de cosas: reloj, avin empleado, etc. No todo puede ser considerado como un objeto, algunas cosas son simplemente caractersticas o atributos de los objetos: color, velocidad, etc.
Tipos de abstraccin
Definicin de objetos
Miembros pblicos
describen qu pueden hacer los objetos de esa clase Qu es el objeto (su abstraccin) Qu puede hacer el objeto (mtodos)
Miembros privados
describen la implementacin de cmo lo hace.
Ej: el objeto contacto interacciona con el circuito elctrico del vehculo, ste con el motor, etc. En sistemas orientados a objetos puros, todo el estado es privado y slo se puede cambiar a travs de la interfaz pblica. Ej: el mtodo pblico frenar puede cambiar el valor del atributo privado velocidad.
Encapsulacin
Encapsulacin: describe la vinculacin de un
comportamiento y un estado a un objeto en particular
qu partes del objeto son visibles (pblicas) y qu partes son ocultas (privadas)
La llave de contacto es una interfaz pblica del mecanismo de arranque de un coche La implementacin de cmo arranca realmente es privada y sobre ella slo puede actuar la llave de contacto
Acceso a variables
Los objetos encapsulan variables permitiendo acceso a ellas slo a travs de los mtodos Variables: Contenedores de valores Mtodos: Contenedores de funciones Un objeto tiene Estado: representado por los valores de sus variables/atributos Comportamiento definido por sus mtodos
Normalmente: Los mtodos son pblicos Las variables son privadas Puede haber mtodos privados Es peligroso tener variables pblicas
20
10
Qu es una clase?
Clase: Conjunto de objetos con estados y comportamientos similares Ej: podemos referirnos a la clase coche (cualquier instancia genrica de coche) Mi coche es un objeto, es decir una instancia particular de la clase coche Plantilla a partir de la cual crear objetos
Datos (atributos) Mtodos que operan sobre los datos
11
Paso de Mensajes
Interfaz Pblica
Implementacin
Arrancar
Los mensajes son tratados por la interfaz pblica del objeto que los recibe
Eso quiere decir que slo podemos hacer llamadas a aquellos atributos o mtodos de otro objeto que sean pblicos o accesibles desde el objeto que hace la llamada
12
Identificadores
Sirven para nombrar variables, mtodos, clases, objetos y todo lo que el programador necesite identificar Comienzan con una letra, un subrayado o un smbolo $ Distinguen maysculas y minsculas y no tienen longitud mxima Por convenio: Los nombres de variables, mtodos y objetos comienzan por minscula. Los nombres de las clases comienzan por mayscula Si contienen varias palabras se unen evitando subrayado y separando palabras con maysculas deEsteModo
13
Palabras reservadas
Reservadas:
abstract boolean break byte case catch char class const * continue default do
cast operator
double else extends final finally float for goto if implements import instanceOf
future outer
int interface long native new null package private protected public return short
generic rest
static super switch synchronized this throw throws transient* try void volatile while
inner var
Variables
Son las entidades sobre las que actan los programas Declarar una variable es decir su nombre y tipo Usar una variable es insertarla en una sentencia Podemos encontrar variables en: como miembros de la clase (dentro de una
clase) como variables locales (dentro del cdigo de un mtodo) como parmetro de un mtodo.
14
Declaracin de variables
public class Coche{ //Declaracin de atributos String color; int velocidad; //Declaracin de mtodos // (arrancar, parar, etc.) }
Sintaxis tipo nombre; tipo nombre1, nombre2, nombre3; tipo nombre = valor;
Inicializacin de la variable a un valor
Coche.java Estilo
Nombres intuitivos 1 letra minscula Sin espacios en blanco ni guiones Las palabras se separan con maysculas: miVariable Indentacin
29
En Java existen:
Tipos primitivos Tipos de referencia
15
Tipos primitivos
Contienen un nico valor Son los siguientes:
Tipo byte short int long float double char Tamao/Formato 8-bit complemento a 2 16-bit complemento a 2 32-bit complemento a 2 64-bit complemento a 2 32-bit IEEE 754 64-bit IEEE 754 16-bit Unicode carcter Descripcin [-128, 127] [-32768, 32767] [-2147483648,2147483647] [-9223372036854775808, 9223372036854775807] [min=1.4E-45, max=3.4028235E38] [min=4.9E-324, max=1.7976931348623157E308] Un carcter Un valor booleano (Nmeros enteros)
Tipos de referencia
Su valor es una referencia (puntero) al valor representado por la variable Son tipos de referencia:
Las matrices (arrays) Las clases
En particular, String
Las interfaces
16
Constantes
Son valores invariantes de los tipos bsicos (primitivos ms el String), que pueden asignarse a variables o usarse en operaciones
Tipo (Nmeros enteros) byte, short , int , long 37 045 0x25 (Nmeros en punto flotante) float , double (Otros tipos) char boolean String a \n, \\,\, true, false hola letra a nueva lnea, \, y verdadero, falso la cadena de caracteres hola 3.14159f 314159E-1 nmero pi en notacin coma flotante nmero pi con base y exponente 37 en notacin decimal 37 en notacin octal (base 8) 37 en notacin hexadecimal (base 16) Constantes Descripcin
Variables
Hay que distinguir: nmeros = 0 byte = 0 variables de instancia boleanos = false variables de clase char= \0 variables automticas String = null referencias = null Las variables pueden inicializarse en la declaracin pueden declararse sin inicializar Sin inicializacin tienen un valor por defecto salvo las automticas Constantes (variables que no se pueden modificar): usar la palabra clave final inicializarla obligatoriamente en la declaracin
Valores por defecto:
17
Declaracin de variables
Objetos como atributos
public class Coche{ //Declaracin de atributos String color; int velocidad; Equipamiento equipamientoSerie; //Declaracin de mtodos Estilo // (arrancar, parar, etc.) Recordad que las clases (tipo) }
Sintaxis
Coche.java
Creacin de un objeto
Las variables se inicializan Los objetos se crean!!!
mbito
Es el bloque de cdigo dentro del cual una variable es accesible Variable de instancia o de clase es accesible dentro de las {} de la clase que la contiene, y para el resto de las clases segn los permisos establecidos por los modificadores:
private protected public friendly
Variable local: su mbito queda fijado por {} del mtodo en que se encuentra Parmetro: su mbito queda fijado por {} del mtodo en que se encuentra
18
Mtodos
Son bloques de cdigo que describen el comportamiento de los objetos Pueden ser llamadas dentro de la clase en la que se encuentran o desde otras clases En los programas slo puede haber cdigo dentro de los mtodos Mtodos especiales El constructor El mtodo main
Declaracin de mtodos
public class Coche{ //Declaracin de atributos private String color; private int velocidad; //Declaracin de mtodos public void arrancar(){ //codigo para el metodo arrancar } public void avanzar(int velocidad){ //codigo para el mtodo avanzar } public String queColor(){ //codigo para averiguar el color return color; } }
Estilo
Nombres intuitivos 1 letra minscula Sin espacios en blanco ni guiones Las palabras se separan con maysculas miMetodo() Indentacin
Coche.java
19
Declaracin de mtodos
public class Coche{ //... public void avanzar(int velocidad){ //codigo para el mtodo avanzar } //... }
Coche.java Resultado
Mtodo
(modificadores) tipoRetorno NombreMetodo(tipo1 param1, tipo2 param2) { //cdigo del mtodo return expresion; //cuando el tipoRetorno es void no es necesario }
Declaracin de mtodos
public class Coche{ //... public String queColor(){ //codigo para averiguar el color return color; } //... }
Coche.java Resultado
Mtodo
(modificadores) tipoRetorno NombreMetodo(tipo1 param1, tipo2 param2) { //cdigo del mtodo return expresion; }
20
Declaracin de mtodos
Los mtodos
tienen 0, 1 o ms argumentos (parmetros) definen el tipo de resultado en su declaracin (salvo los constructores!) pueden tener variables locales
En el cuerpo de un mtodo no se pueden declarar otros mtodos. Si el mtodo devuelve un resultado la ltima sentencia debe ser un return
Mtodos constructores
Cuando se crea un objeto sus miembros se inicializan con un mtodo constructor Los constructores:
llevan el mismo nombre que la clase no tienen tipo de resultado
Conviene que haya al menos un constructor Si no existe, Java crea un constructor por defecto que inicializa las variables a su valor por defecto Pueden existir varios que se distinguirn por los parmetros que aceptan (sobrecarga)
IMPORTANTE: Si la clase tiene algn constructor, el constructor por defecto deja de existir
42
21
void indica que no devuelve ningn tipo de datos static indica que este mtodo se refiere a toda la clase, es decir no hay un mtodo main por cada objeto.
Ejemplo (I)
Declaracin de atributos y mtodos
dos mtodos:
decirNombre(); decirDNI();
Rellenar el cuerpo de los mtodos que tienen los comportamientos para que imprima por pantalla
22
Ejemplo (II)
Invocacin de atributos y mtodos
Crear una clase PruebaEmpleado con un mtodo main para comprobar el correcto funcionamiento de la clase.
Acceso a miembros
Modificadores de acceso
Miembros (Variables y mtodos) (friendly) Accesible slo desde clases que estn en el mismo paquete Accesible para todas las clases public Accesible slo en la propia clase private protected Accesible para la propia clase y todas las que hereden de ella.
Otros Modificadores
abstract static final
23
Acceso a miembros
Accesos a clases Dos opciones: friendly o public Friendly: por defecto (sin nada)
Todas las dems clases del paquete tienen acceso, pero para las dems es privada
Acceso a miembros
Accesos a elementos de una clase (Elementos: variables o mtodos de una clase) Friendly Las que Public utilizaremos Private de momento
Nadie puede acceder a los elementos privados de una clase, excepto ella misma (ni siquiera las clases del mismo paquete)
Protected
Similar a private, pero permite el acceso a clases derivadas de sta. Adems, tambin es friendly (permite acceso a clases del mismo paquete)
24
Acceso a miembros
Constantes definidas por el usuario
Se definen con la designacin static final
static: variable global final: su valor no se altera Pueden ser public, private o protected Suelen aparecer como todo en MAYSCULAS
class Circunferencia { private static final float PI = 3.14159; private float radio; private float area; public Circunferencia (float radio) { area= 2 * PI * radio; }//constructor } //class OperadoreUnario
Acceso a miembros
Miembros estticos Modificador static Slo existen una vez por clase, independientemente del nmero de instancias (objetos) de la clase que hayamos creado y aunque no exista ninguna Se puede acceder a los miembros estticos utilizando el nombre de la clase Un mtodo esttico no puede acceder a miembros no estticos directamente, tiene que crear primero un objeto
25
Acceso a miembros
Algunas reglas
Los miembros estticos se invocan con: NombreClase.metodoEstatico(); NombreClase.atributoEstatico; Para acceder a los miembros no estticos necesitamos disponer de una instancia (objeto) de la clase NombreClase nombreObjeto = new NombreClase(); Los miembros no estticos se invocan con: nombreObjeto.metodoNormal(); nombreObjeto.atributoNormal; Cuando invocacin (llamada) a un miembro esttico de la clase se realiza dentro de la propia clase se puede omitir el nombre de la misma. Es decir podemos escribir:
metodoEstatico(); atributoEstatico;
en vez de:
NombreClase.metodoEstatico(); NombreClase.atributoEstatico;
MODIFICADORES
clase
mtodo
atributo
Accesible desde cualquier otra clase Accesible slo desde clases de su propio paquete Accesible desde la clase y sus subclases Accesibles slo dentro de la clase
No se pueden instanciar Son para heredar de ellas Al menos 1 mtodo abstracto No se puede heredar de ellas. Es la hoja en el rbol de herencia No tiene cdigo Se implementa en las subclases o clases hijas
final static
No se puede cambiar su valor, es constante Se suele utilizar en combinacin con static Es la misma para todos los objetos de la clase.
Aplicable slo a clases Es el mismo para internas todos los objetos de la clase. Se utiliza: Clase.metodo();
26
Ejemplo (III)
Modificadores de acceso
Ejemplo (IV)
Invocacin cuando hay modificadores de acceso
Modificar el mtodo main de la clase PruebaEmpleado para realizar la comprobacin de su correcto funcionamiento
27
Ejemplo (V):
Uso de constructores
Modificar el cdigo de la clase empleado para que contenga un constructor con los siguientes parmetros:
nombre, DNI
De este modo nadie podr crear un objeto de la clase empleado sin asignarle un nombre y un DNI
Ejemplo (VI):
Mtodo main
Copia el mtodo main de la clase PruebaEmpleado a la clase empleado Elimina la clase PruebaEmpleado Ejecuta de nuevo tu aplicacin
Sigue funcionando programa? Dnde es mejor poner el main?
En la misma clase: Empleado En una clase independiente: PruebaEmpleado
28
Resumen
Programa Clases (ficheros.java) Miembros Atributos Tipo de referencia Arrays Objetos Tipo Bsico Mtodos Normales Mtodos Mtodos Especiales Main
Constructor
3. Ms orientacin a objetos
29
Herencia
Permite definir a partir de una clase otras clases relacionadas que supongan una:
Especializacin de la clase dada (ej: la clase coche es una especializacin de la clase vehculo) Generalizacin de la clase dada (ej: la clase vehculo es una generalizacin de la clase coche).
Para qu sirve?
Recurso
nombre descripcion decirNombre() decirDescripcion()
Recurso
nombre descripcion decirNombre() decirDescripcion()
Aula
nombre descripcion localizacion decirNombre() decirDescripcion() decirLocalizacion()
Ordenador
nombre descripcion sistemaOperativo decirNombre() decirDescripcion() decirSistemaOp()
Aula
localizacion decirLocalizacion()
Ordenador
sistemaOperativo decirSistemaOp()
public class Aula extends Recurso public class Ordenador extends Recurso
Los atributos y mtodos que aparecen en azul en la clase padre se repiten en las clases hijas (a la izquierda) No es necesario repetir el cdigo, basta con decir que una clase extiende a la otra o hereda de ella (a la derecha)
30
Ejemplo (VII):
Clase derivada
Un constructor:
Con 3 parmetros: nombre, DNI y salario
Dos mtodos:
getSalario(); setSalario(salario);
Ejemplo (VIII):
Otra clase derivada Crear una clase comercial que extienda a empleado y tenga:
Dos nuevas variables:
comision ventasMes
Un constructor:
Con 3 parmetros: nombre, DNI y comisin
Los mtodos:
getComision(); setComision(comision); sumarVenta(venta); getVentas(); setVentas(ventas); inicioMes();
31
Ejemplo (IX):
Mtodo main
Programar una pequea aplicacin que permita comprobar el correcto funcionamiento de las clases anteriores:
public class Test { public static void main (String[] args) { ... } }
32
convoy
moto
Redefinicin (overriding)
Si definimos en una subclase un mtodo del mismo nombre y tipo que en la superclase el de la superclase queda oculto Si ponemos el modificador final a un mtodo no lo podemos redefinir Cmo acceder a mtodos ocultos?:
arrancar() (ejecuta el mtodo arrancar del coche) this.arrancar() (mtodo arrancar del coche) super.arrancar() (mtodo arrancar del vehculo) super.super.nombre (Mal)
mtodos clase hija: visibles mtodos clases padre: ocultos
33
Para qu sirve?
Recurso
nombre descripcion decirNombre() decirDescripcion()
Recurso
nombre descripcion decirNombre() decirDescripcion()
Aula
nombre descripcion localizacion decirNombre() decirDescripcion() decirLocalizacion()
Ordenador
nombre descripcion sistemaOperativo decirNombre() decirDescripcion() decirSistemaOp()
Aula
descripcion localizacion decirLocalizacion()
Ordenador
sistemaOperativo decirSistemaOp()
this.descripcion
public class Aula extends Recurso super.descripcion public class Ordenador extends Recurso
67
Modificador Final
En argumentos: Dentro del mtodo no podemos cambiar el valor de ese argumento:
public class Prueba { void Inutil(final Objeto o) { o = new Objeto(); // Ilegal: o es final o.adios(); } }
En mtodos:
Las clases derivadas no podrn sobrescribir el mtodo Adems aporta eficiencia: el compilador convierte llamadas al mtodo en llamadas inline
34
Error!!
Sobrecarga (overloading)
Podemos definir una clase con dos mtodos con el mismo nombre si los argumentos son distintos Se utiliza mucho para los constructores Sabemos cul de los dos mtodos tenemos que ejecutar por los parmetros que le pasamos cuando le llamamos En este caso no hay ocultacin de la informacin, se puede acceder a los dos mtodos
35
Para qu sirve?
Aula
nombre descripcion localizacion decirNombre() decirDescripcion() decirDescripcion(String mobiliario) decirLocalizacion()
Son dos mtodos distintos porque aunque tengan el mismo nombre tienen distintos argumentos Tienen distinta funcionalidad como ocurre en el caso que se muestra en el ejemplo
describe el aula en general describe el mueble que se encuentra en el aula y que le pasamos como parametro
Slo se puede hacer casting entre clases padre e hija no entre clases hermanas
36
Clases abstractas
Aquellas que tienen algunos mtodos abstractos (sin cdigo) y otros no No podemos crear objetos de una clase abstracta Las clases y mtodos abstractos llevan la palabra clave abstract No pueden llevar el modificador abstract:
los constructores los mtodos estticos los mtodos privados
Para qu sirve?
La clase Recurso es abstracta porque uno de sus mtodos decirDescripcion() no tiene cdigo
* El color gris claro indica que no tiene cdigo
Recurso
nombre descripcion decirNombre() decirDescripcion()*
Todas las clases que hereden de recurso tienen que tener un mtodo decirDescripcion() donde pongamos el cdigo
** La negrita indica que tiene cdigo
Aula
descripcion localizacion decirDescripcion()** decirLocalizacion()
Ordenador
sistemaOperativo decirSistemaOp() decirDescripcion()**
public abstract class Recurso public class Aula extends Recurso public class Ordenador extends Recurso
74
37
Interfaces
Clase en la que todos los mtodos son abstractos
Las variables en las interfaces son public Los mtodos en las interfaces no tienen modificadores de acceso
El acceso a una interfaz es publico Los interfaces son implementados por clases
una clase implementa una interfaz definiendo los cuerpos de todos los mtodos. una clase abstracta implementa una interfaz rellenando el cuerpo de algunos mtodos. una clase puede implementar una o ms interfaces (herencia mltiple)
75
Para qu sirve?
Recurso no es una clase sino una interfaz porque ninguno de sus mtodos tiene cdigo Recurso
nombre descripcion decirNombre() decirDescripcion()
Todas las clases que implementen Recurso tienen que tener todos los mtodos de Recurso donde pongamos el cdigo
Aula
descripcion localizacion decirNombre() decirDescripcion() decirLocalizacion()
Ordenador
sistemaOperativo decirSistemaOp() decirNombre() decirDescripcion()
public interfaz Recurso public class Aula implements Recurso public class Ordenador implements Recurso
76
38
Paquetes
Un paquete agrupa clases e interfaces Las jerarquas de un paquete se corresponden con las jerarquas de directorios Para referirse a miembros y clases de un paquete se utiliza la notacin de separarlos por puntos. Ej: Cuando hacemos una aplicacin e importamos la clase Vector que nos proporciona Java La clase java.util.Vector est en el directorio java/util
import java.util.Vector;
Paquetes
Cmo utilizar paquetes creados por otros?
Incluimos en el CLASSPATH la direccin de la carpeta que da nombre al paquete por ej: PaqueteDeOtro
set CLASSPATH=c:\PaqueteDeOtro;%CLASSPATH%;. setenv CLASSPATH c:\PaqueteDeOtro:$CLASSPATH
(windows) (linux)
En la clase que queramos utilizarlo ponemos antes de la declaracin de la clase la sentencia import correspondiente
import PaqueteDeOtro.*;
39
OO: Resumen I
Clase (concreta)
tiene todos los mtodos implementados
Clase abstracta
Slo algunos mtodos implementados modificador abstract
Interfaz
Ningn mtodo implementado palabra reservada: interface
OO: Resumen II
Clase (concreta o abstracta)
puede extender (extends) a una sola clase (herencia simple) puede implementar (implements) uno o ms interfaces (herencia mltiple)
palabra reservada: extends
Interfaz
puede extender (extends) a uno o ms interfaces
Paquetes
Agrupan clases e interfaces
40
Operadores Unarios
Unarios toman un nico argumento:
++,--, etc. Pueden tener notacin prefijo o sufijo.
class OperadorUnario { public static void main(String[] args) { int i=0; System.out.println("i= "+(i++)); // 0: Prefijo System.out.println("i= "+(++i)); // 2 : Sufijo } //main( ) } //class OperadoreUnario
Los operadores prefijo devuelven un valor antes de realizar la operacin y los sufijo despus.
41
Operadores Binarios
Binarios toman dos argumentos:
=, +, etc.
class OperadorBinario { public static void main(String[] args) { int a = 3; int b = a + 5; System.out.println(b= "+ b); // 8 } //main( ) } //class OperadorBinario
Adems de realizar una operacin, los operadores devuelven un valor El valor y su tipo dependen del operador y del tipo y valor de sus operandos
Operadores Aritmticos
Operador + * / % Uso op1 + op2 op1 - op2 op1 * op2 op1 / op2 op1 % op2 Descripcin Suma op1 y op2 Resta op1 y op2 Multiplica op1 y op2 Divide op1 y op2 Resto de dividir op1 por op2
42
Operadores Relacionales
Los operadores relacionales comparan dos valores y determinan la relacin entre ellos
Operador > >= < <= == != Uso op1 > op2 op1 >= op2 op1 < op2 op1 <= op2 op1 == op2 op1 != op2 Descripcin op1 es mayor que op2 op1 es mayor o igual a op2 op1 es menor que op2 op1 es menor o igual a op2 op1 y op2 son iguales op1 y op2 no son iguales
Cuidado!
El operador = asigna
Ej. var = 5, asigna 5 a var
El operador == compara
Ej. var == 5, devuelve true (tras la asignacin anterior)
Operadores Condicionales
Hay tres operadores relacionales Operador Uso Devuelve true si && || ! p1 && op2 op1 | | op2 ! op op1 y op2 son ambos true op1 o op2 es true op es false
Se utilizan junto con los operadores relacionales para construir expresiones booleanas ms complejas
class Cuenta { public static void main(String[] args) { int cuenta = args.length; int max = 5; boolean enElRango = 0 < cuenta && cuenta < max; System.out.println(Est + cuenta + en el rango? + enElRango); } //main( ) }
43
Operadores de Asignacin
El operador = asigna una valor a una variable.
int cuenta = 0;
Existen abreviaturas:
i = i + 2; i += 2;
Operador += -= *= %=
Equivale a op1 = op1 + op2 op1 = op1 op2 op1 = op1 * op2 op1 = op1 % op2
Arrays (matrices)
Arrays
Declaracin, creacin e inicializacin Insercin, eliminacin y localizacin de elementos Arrays multidimensionales
44
Arrays (matrices)
Qu son?
Coleccin de entidades del mismo tipo almacenadas en una unidad El operador indexacin [ ] permite el acceso a cada elemento del array El atributo length nos permite saber el n de elementos que contiene el array Rango del Array
De 0 hasta length 1 Cuidado no sobrepasar la longitud mxima
Surge la excepcin IndexOutOfBoundsException
Arrays (matrices)
Declaracin, Creacin, Inicializacin
al array y decir de qu tipo son los elementos que va a almacenar. tipo nombreArray[];
tipo []nombreArray; Se puede hacer de dos formas Despus de la declaracin an no se ha asignado memoria para almacenar el array no podemos acceder a su contenido Valores por defecto: int, short, long = 0 float, double = 0.0 boleanos = false String = null Object = null
Es necesario utilizar new y especificar tamao del array nombreArray[] = new tipo[numPosiciones]; Una vez creado el array sus elementos tienen los valores por defecto hasta que el array sea inicializado
45
Arrays (matrices)
Declaracin, Creacin, Inicializacin
Mediante un bucle
for(int i = 0; i < nombreArray.length; i++) { nombreArray[i] = elemento-i; }
Ejemplos
Declaracin, Creacin, Inicializacin Arrays de tipos bsicos
int a[]; //Declara a = new int[3] //Crea a[0]=1; //Inicializa a[1]=2; a[2]=3; int a[] = new int[3] //Declara y Crea a[0]=1; //Inicializacin a[1]=2; a[2]=3; int a[] = new int[3] //Declara y crea for(int i=0; i<a.length;i++){ //inicializa a[i]=i+1; }
46
Errores frecuentes
Declaracin, Creacin, Inicializacin public class EjemplosMatrices{ public static void main(String args[]){ double miMatriz[]; Sintaxis System.out.println(miMatriz[0]); } }
Cuando la matriz slo ha sido declarada no podemos acceder a sus elementos: el programa no compilara y dara un error
Errores frecuentes
Declaracin, Creacin, Inicializacin
public class EjemplosMatrices2{ public static void main(String args[]){ int miMatrizDeEnteros[] = new int[10]; compilar float miMatrizDeReales[]= new float[10]; boolean miMatrizDeBooleanos[] = new boolean[10]; Ejecutar char miMatrizDeCaracteres[] = new char[10]; String miMatrizDeStrings[] = new String[10]; Object miMatrizDeObjetos[] = new Object[10]; System.out.println("Entero por defecto: " + miMatrizDeEnteros[0]); System.out.println("Real por defecto: " + miMatrizDeReales[0]); System.out.println("Booleano por defecto: " + miMatrizDeBooleanos[0]); System.out.println(Carcter por defecto: " + miMatrizDeCaracteres[0]); System.out.println("String por defecto: " + miMatrizDeStrings[0]); System.out.println("Objeto por defecto: " + miMatrizDeObjetos[0]); Entero por defecto: 0 } Real por defecto: 0.0 } Booleano por defecto: false Carcter por defecto: Cuando la matriz slo ha sido declarada y creada String por defecto: null pero no inicializada podemos acceder a sus Objeto por defecto: null elementos pero estos tienen su valor por defecto
47
Arrays Multidimensionales
Es un array en el que el acceso a los elementos se hace utilizando ms de un ndice 0 1 2
0 0 1 2 1 2 0 0 1 2 1 2
a j r b k s c l t
t i r z l w z q
A B C D E F G H I
a[0][2]=C
//Declara //Crea //Inicializa
a d g
b e h
c f i
a[0][2][1]=l
char a[][][]; //Declara a = new char[3][3][3] //Crea a[0][0][0]=a
...
...
Arrays Multidimensionales
Ejemplos Declarar y crear directamente
//Declaracin y Creacin String [][]miMatriz = new String[3][4]
null null null null null null null null null null null null
Otros ejemplos
// Matriz 3x3 inicializada a 0 int [][] a= new int[3][3]; int [][] b= {{1, 2, 3}, {4, 5, 6}};
0 0 0 0 0 0 0 0 0
1 4
2 5
3 6
int [][] c = new[3][]; c[0] = new int[5]; c[1] = new int[4]; c[2] = new int[3];
0 0 0
0 0 0
0 0 0
0 0
48
Cadenas (Strings)
Son secuencias de caracteres implementadas en la clase String (dentro del paquete java.lang) Creacin de Strings
String vaco= new String(); String vacio= ; String mensaje= hola String repeticion= mensaje;
Concatenacin de cadenas
La concatenacin de cadenas se hace utilizando el operador sobrecargado +.
este + aquel abc + 5 a + b + c a + 1 + 2 1 + 2 + a 1 + (2 + a) // Genera esteaquel // Genera abc5 // Genera abc // Genera a12 // Genera 3a // Genera 12a
Comparando Cadenas
Sobre Strings no funcionan los operadores relacionales (<, >, <=, <=) y de igualdad (==, !=)
Estos operadores comparan objetos y no el contenido
Mtodo compareTo
cadenaA.compareTo(cadenaB) entero negativo, si cadenaA es menor que cadenaB 0, si cadenaA es igual que cadenaB entero positivo, si cadenaA es mayor que cadenaB
49
Longitud de un objeto String Usar mtodo length() Como length() es un mtodo, es necesario usar parntesis Acceso a los caracteres individuales de un String Usar mtodo charAt(), con la posicin
La primera posicin es la posicin 0
Para ello se utilizan las llamadas clases envoltorio (wrapper) que se encuentran en java.lang
Se llaman as porque envuelven a los tipos primitivos Integer, Double, Float, Double, Character, Conversin a String
toString(), doubleValue(), ... sin argumentos
50
La sentencia de Seleccin if
Seleccin: elegir entre varias alternativas de cursos
Pseudocdigo:
51
La Sentencia if/else
Pseudocdigo:
Si la nota del estudiante es mayor o igual que 5 Imprimir Aprobado si no Imprimir Suspenso
Java:
El Operador Condicional
Relacionado con if/else...
Java:
En programas complejos, el ooperador condicional Es mucho ms difcil de leer que la simple sentencia if/else !
52
si la nota del estudiante es mayor o igual que 9 Imprimir A si no si la nota del estudiante es mayor o igual que 8 Imprimir B si no si la nota del estudiante es mayor o igual que 7 Imprimir C si no si la nota del estudiante es mayor o igual que 5 Imprimir D si no Imprimir E
if (notaEstudiante >= 9) System.out.println( A ); else if (notaEstudiante >= 8) System.out.println( B ); else if (notaEstudiante >= 7) System.out.println( C ); else if (notaEstudiante >= 5) System.out.println( D ); else System.out.println(E);
53
if (notaEstudiante >= 9) System.out.println( A ); else if (notaEstudiante >= 8) System.out.println( B ); else if (notaEstudiante >= 7) System.out.println( C ); else if (notaEstudiante >= 5) System.out.println( D ); else System.out.println(F);
Los programas indentados adecuadamente son ms fciles de entender
Sentencias Compuestas
Una sentencia compuesta puede aparecer all donde apareca cualquier sentencia simple
Se introducen ente llaves { } Las llaves fijan el mbito de todo lo declarado entre las llaves
Java:
if (notaEstudiante >= 5) System.out.println ( Aprobado ); else { System.out.println ( Suspenso ); System.out.println ( Debe recuperar ); }
54
switch ( expresion ) { byte, short, int, long y char. ... No String } Dentro del switch aparecen case, break, y default. Ejemplos:
int num=5; switch(num){} char character=z; switch(character){} String string=cadena; switch(cadena){}
55
56
Solucin:
(1) Usando ifs anidados. (2) Usando la sentencia switch.
57
if (notaEstudiante == 10) System.out.println(Matricula); else if (notaEstudiante == 9) System.out.println(Sobresaliente); else if (notaEstudiante == 8) System.out.println(Notable alto); else if (notaEstudiante == 7) System.out.println(Notable bajo); else if (notaEstudiante == 6) System.out.println(Aprobado alto); else if (notaEstudiante == 5) System.out.println(Aprobado bajo); else System.out.println(Suspenso);
switch (notaEstudiante){ case 10: System.out.println(Matricula); break; case 9: System.out.println(Sobresaliente); break; case 8: System.out.println(Notable); break; case 7: System.out.println(Notable bajo); break; case 6: System.out.println(Aprobado alto); break; case 5: System.out.println(Aprobado bajo); break; default: System.out.println(Suspenso); }
58
cmo lo hacemos?
59
60
cuntas veces sale el mensaje por pantalla? cunto vale i en cada mensaje?
61
62
Actualizacin
cuntas veces se ejecutan estos bucles? cul es el valor de i en cada caso al salir del bucle?
63
1
2 6 10
2
3 7 11
3
4 8 12
64
Estructuras de repeticin
Estructuras de repeticin
for (;;){ } while(condicion){}; do {}while( condicion);
65
}
condicion es una expresin lgica
Ej:
int cuenta=0; while (System.in.read() != -1) { cuenta++; System.out.println(He ledo: " + cuenta + veces" ); }
cuenta++; System.out.p
66
for es ms compacto
Sentencias de repeticin
Estructuras de repeticin:
for (;;){ } while (condicion){ } do{ }while(condicion);
67
Es una estructura muy parecida al while. Difiere con while en que la comprobacin se hace al final, primero se ejecuta y despus se comprueba. Siempre se ejecuta al menos una vez, el while puede no llegar a ejecutarse nunca.
Ejemplo
int c; InputStream in; do { c = in.read(); ... } while (c != -1); c!=-1 si
68
expresion es una expresin lgica. La sentencia do{} while es muy poco usada.
69
Comparativa ...
Comparativa for vs. while vs do while
Inic For While do while
S No No
Act
S No No
Condicin
Continuar Continuar Continuar
Min Ej Uso
0 0 1 Alto Alto Bajo
Inic: Posibilidad de inicializacin de variables. Act: Posibilidad de actualizacin de variables. Condicin: Indica si la condicin es de continuacin o salida. Min ej: nmero mnimo de veces que ejecuta el bloque de texto. Uso: Indica el grado de uso de la estructura de control.
for while X X X X
Ej: lectura de fichero con while. Ej: recorre matrices con for.
70
break continue
while, for, do/while o switch hace que se abandone la estructura donde aparece
71
continue:
Imprime 5 veces cada uno de los dos mensajes. Y salta a la etiqueta fuera que est fuera de la estructura de los dos bucles.
72
Clases estndar
Java Base API
Java.lang: Interfaz y ncleo de clases Java.util: Clases de utilidades Java.io: Clases de input/output Java.net: Clases de red (Basada en TCP/IP) Java.applet: Clase Applet
Excepciones
Motivacin: Si ejecuto el programa:
public class Suma{ public static void main(String[] s){ float[] numeros ={1,2,3,4}; float valor=numeros[10]; } }
73
Excepciones
Por qu se ha generado?
Hemos tratado de acceder a una posicin no vlida del array La ha generado la mquina virtual Java La excepcin informa del tipo de error que se ha producido: java.lang.ArrayIndexOutOfBoundsException
Excepciones qu son?
Evento que al ocurrir impide la ejecucin normal del programa Cuando ocurre se crea un objeto excepcin y se pasa al sistema de control de ejecucin El sistema de control de ejecucin:
Busca un trozo de cdigo que maneje la excepcin Si no lo encuentra termina el programa
74
Excepciones: Tipos
Hay fundamentalmente 3 tipos:
De tiempo de ejecucin (RuntimeException)
Ej: ArithmeticException, NumberFormatException, IndexOutOfBoundException, NullPointerException, etc.) De entrada y salida (IOException, FileNotFoundException, EOFException)
75
Qu hacer:
Tratarla:
Rodear con try{} las sentencias susceptibles de lanzar excepciones Rodear con catch(nombreException){} las sentencias que se deben ejecutar cuando se produce Lanzarla public void miMetodo throws IOException
Excepciones: Semntica
Semntica
Try { Sentencias; } catch(except ) { Sentencias; } [catch(except2) {} ] [ finally{ } ]
excepcin Tipo_de_Excepcion si Manej1 catch try{ Array[10]; }
Ejemplo
no
Manej2 finally
76
Excepciones: Semntica
Notas:
Se encierra todo en un bloque try{ } El catch(Except){} es obligatorio Except ha de heredar de System.exception El cdigo del finally se ejecuta siempre. No suele ser muy usado (controversia) Si hay varios catch en batera y uno captura una excepcin a partir de entonces slo se podrn capturar las excepciones padre de la actual (ver ejemplo)
77
Se usa la palabra throw seguida del nombre de la excepcin que se quiere lanzar
Fin...
// Aplicacin final public class Final { public static void main(String[] s) { System.out.println(Se acab... ); } }
78