+
Java en 2 horas
+
Generalidades
l
Desarrollado por Sun
en 1995
lHereda mucha de la sintaxis de C (1972)
l
Fuertemente tipado y orientado a objetos
lAplicaciones compiladas a bytecode
l
Gestión interna de la reserva de memoria
lDesde 2007, el Java de Sun es software libre
l Salvo las bibliotecas de clases para ejecutar programas java (OpenJDK) l IcedTea es una versión de la OpenJDK totalmente libre
+
Bytecode
l
Un programa Java no se compila a código de la máquina, si
no a bytecode
l Código intermedio entre el código máquina y el lenguaje de alto nivel que permite que un programa Java corra en distintas plataformas sin recompilar
l Tan sólo es necesario tener instalada la Máquina Virtual de
Java (JVM), que se encarga de ejecutar las instrucciones del
bytecode
+
JRE y JDK
l
Java Runtime Environment (JRE)
l Contiene la JVM en su versión más simple
l Suele incluir las bibliotecas de clases estándar (API de Java, o J2SE, hoy Java Standard Edition o JSE)
- Vamos por la versión 1.6 l
Java Development Kit (JDK)
l JRE para desarrollar programas java l API de Java (código fuente libre)
l Compilador de Java (javac), generador de documentación (javadoc), visor de applets, depurador, etc.
+
Hola Mundo
clase método Tipos básicos como en Cjavac Hola.java
java Hola
class Hola {public static void main(String[] args)
{
System.out.println("Hola, mundo."); }
}
+
Sintaxis básica
l Control de flujo l Tipos básicos l Arrays l Operadores aritmético-lógicosl Formato de cadenas: variables entre texto
l
String
cad=
“hola,”
+nombre+
”, buenos días”
;
l Palabras clave particulares:package, class, public,
private, extends, implements, this
...
Idéntico a C
+
Entornos de Desarrollo Integrado (IDE)
l
Integran bibliotecas, compilador, intérprete, depurador,
editor y otros complementos en un solo entorno:
l Netbeans l Eclipse
l IntelliJ IDEA l Anjuta
l
En esta asignatura utilizaremos Eclipse
l Es gratuito y con licencia de software libre (EPL) l Tiene una instalación limpia, disponible en el aula l Ampliaciones (plugins) para desarrollo web
+
Paquetes y Clases
l Paquete: contenedor de clases (carpeta)
l Clase: contenedor de métodos y atributos (fichero)
l
paquete2 dentro de paquete1: paquete1.paquete2
introduccion Herencia.java package introduccion class Hola { ... } 8 Convención: en minúscula en mayúscula
+
Clases y objetos
9
l
Clase: diseño abstracto de un concepto
l Define atributos (variables de la clase) l Define métodos (operaciones de la clase)l
Objeto: cada instancia concreta de la clase
l Permite dar valor a los atributos+
public class Coche
{
float velocidad; int numPuertas;
String color;
public Coche(int numPuertas, float velocidad, String color)
{
this.velocidad=velocidad; this.numPuertas=numPuertas; this.color=color;
}
public int getNumPuertas()
{
return numPuertas;
}
public void acelerar(int nuevaVelocidad)
{
if(nuevaVelocidad>velocidad)velocidad=nuevaVelocidad;
} }
Clases y Objetos
clase objeto 10 import Cochepublic class Main {
public static void main(String [] args)
{
Coche miFerrari=new Coche(3,0, ”rojo”);
System.out.println(” Mi coche tiene "
+miFerrari.getNumPuertas()+” puertas”); miFerrari.acelerar(100);
} }
+
package introduccion; /** * Tabla de multiplicar * (Variables y atributos) */ class Mult {int m; //Atributo de la clase Mult
public static void main(String[] args) {
if (args.length!=1) {
System.err.println("USO: java Mult <n>");
return; }
int n=Integer.parseInt(args[0]);//Variable del método main
for (int i=1;i<=10;i++)
System.out.println(n+"x"+i+"="+n*i); } ... } n m
Variables y atributos
Alcance
11+
Privacidad
l
public: accesible desde fuera y dentro de la clase
lprivate: accesible sólo desde la clase
l
protected (por defecto) accesible desde dentro de la
clase o de clases hijas
l
Atendiendo a la modularidad, es recomendable que
los atributos de una clase sean privados o protegidos.
l
Atendiendo a la claridad de código y eficiencia de
recursos, los atributos públicos pueden ser útiles.
+
Herencia
Constructor por defecto ~ super() Vehículo Moto Coche 13+
Clases abstractas
l
No se pueden instanciar en objetos
l
Palabra clave abstract antes de class
+
Polimorfismo
public class Coche extends Vehiculo implements Cloneable {
public Coche(int numPuertas, int velocidad, String color) {
this.velocidad=velocidad;
this.numPuertas=numPuertas;
this.color=color;
this.numRuedas=4; }
public Coche(String color) {
this.velocidad=0;
this.numPuertas=3;
this.color=color;
this.numRuedas=4; } public Coche() { this.velocidad=0; this.numPuertas=3;
this.color="negro";
this.numRuedas=4; }
}
Varios métodos con el mismo nombre, siempre que los
parámetros sean distintos
+
Métodos estáticos
public class Coche extends Vehiculo {
public Coche(int numPuertas, int velocidad, String color) {
this.velocidad=velocidad;
this.numPuertas=numPuertas;
this.color=color;
this.numRuedas=4; }
...
public static String getAutorDeLaClase() {
return "Rodrigo Santamaría"; }
}
En un método estático no podemos hacer uso de atributos o métodos no estáticos
public class Main {
public static void main(String [] args) {
System.out.println("Autor de la clase Coche: "
+Coche.getAutorDeLaClase()); ...
}
+
Gestión de la memoria
l
Reserva de memoria explícita (new)
l
Liberación automática (garbage collector)
l Detecta objetos no utilizados/accesibles y los borra l Puede reducir el rendimiento
l Solicitud explícita con System.gc();
l
Asignación de objetos por referencia
l Para asignación por valor: coche1=coche2.clone(); l Sólo si Coche implementa Cloneable
- Y redefine el método clone() public Object clone()
{
Coche obj=new Coche();
obj.numPuertas=this.numPuertas; obj.velocidad=this.velocidad; obj.color=this.color;
return obj;
}
+
Control de Errores
El método indica qué excepciones pueden ocurrirle
Y cuando ocurren, las lanza
Al usar métodos que pueden lanzar
excepciones, deben estar en una sección
try/catch, de forma que si se producen, las detectemos y gestionemos correctamente 18
+
Serialización
+
Concluyendo...
l
Organización en:
l paquetes, clases y objetos l atributos y métodos
l
Programación
l Orientada a objetos: modularidad, herencia, polimorfismo l Gestión sencilla de memoria, errores, I/O
l
Multiplataforma (bytecode + máquina virtual)
lSofware “libre”
l API oficial
l Multitud de paquetes desarrollados
+
Documentación
l
Tutorial:
http://java.sun.com/docs/books/tutorial/index.html lDocumentación:
http://java.sun.com/javase/8/docs/apil
Paquetes en la red para todo tipo de propósitos
+
Ejercicio
l
Definir una clase Fruta y las clases hijas Naranja y Manzana.
l Deben tener los atributos genéricos- peso, en kilos (atributo real)
- hechaZumo, falso por defecto (atributo lógico)
- La manzana debe tener también el atributo entero
numPepitas
l Deben tener los métodos siguientes
- Constructor por defecto y constructor que permita al usuario iniciar todos los atributos
- Un método hacerZumo() que modifique el estado de la fruta si hechaZumo es falso.
+
Ejercicio
l
Definir una clase Principal que:
l Instancie dos frutas, una manzana y una naranja l Nos diga el peso de la manzana
l Haga zumo de naranja
l
Tratamiento de errores
l El método hacerZumo debe lanzar una excepción si se intenta hacer zumo de una fruta ya exprimida
l La clase Principal debe capturar la excepción y avisar al usuario
+
Ejercicio
l
Serialización
l La clase Fruta debe implementar un método congelar(String
lugar) que guarde la fruta en la ruta especificada por lugar
l Para ello deberá implementar la interfaz Serializable
l Utilizar el método para guardar el zumo de naranja en el fichero “helado” dentro de la carpeta “nevera”
cont.
Duke, la mascota de Java