Curso de Java J2SE
Instructor: ISC. Yasmin Melo Jacinto
Antecedentes
Sun Microsystems
1991: se desarrollo la
primera versión del lenguaje
Lenguaje utilizado por la
comunidad mundial de
desarrolladores
Ir al sitio
Características de Java
Lenguaje Orientado
a objetos Aplicaciones
◦ Encapsulamiento multiplataforma
◦ Herencia
◦ Polimorfismo
◦ Etc.
Ejecución segura de
aplicaciones
Librerías (API) Amplio soporte de
fabricantes software
Máquina virtual de JAVA (JVM)
Es un entorno de ejecución para aplicaciones java.
Finalidad: adaptar los programas Java compilados a las
características del sistema operativo donde se va ejecutar.
Código fuente
Proceso de compilación y Byte codes
ejecución de aplicaciones
Java
VM VM VM
(Windows) Linux OTRO
Otro S.O
Garbage collector
Aplicación que forma parte de la JVM
Objetivo: liberar de la memoria los objetos no
referenciados.
variables
Objeto 1
Disponible para
recolección
Objeto 2
Objeto 3
Memoria
Ediciones de JAVA
Java 2 Estándar Edition (J2SE)
◦ Paquetes de uso general
◦ Paquetes para la creación de entornos gráficos
◦ Applets.
Java 2 Enterprise Edition (J2EE)
◦ Paquetes y tecnologías para la creación de aplicaciones Empresariales
multicapa
Java 2 Micro Edition (J2ME)
◦ Paquetes y especificaciones para crear aplicaciones Java ejecutables en
dispositivos electrónicos (agendas electrónicas, PDA, teléfonos móviles)
Primeros pasos de Java
1. Ejecutar Java Development Kit (KIT): conjunto
de herramientas básico para el desarrollo de
aplicaciones con Java estándar.
◦ La implementación de la máquina virtual para el
sistema operativo indicado.
◦ Herramientas de compilación y ejecución de
programas.
◦ Paquetes de clases del J2SE ([Link] contiene las
clases)
Configurar las variables de entorno
1. Inicio
2. Equipo / clic derecho /propiedades/ configuración
avanzada del sistema
3. Variables de entorno /Nueva
1. Nombre : CLASPATH
2. Valor: ;
3. Nombre: PATH
4. Valor: C:\Program Files\Java\jdk1.6.0_22\bin
Reglas de declaración de archivos de código
fuente
Solo puede existir una clase publica por cada
archivo de código fuente (archivo .java)
El nombre del archivo .java debe ser
exactamente igual al nombre de la clase
declarada como public
Ejemplo:
public class Dog { } el nombre del
archivo debe ser [Link]
Reglas de declaración de archivos de código
fuente
Si la clase es parte de un paquete, entonces, la
sentencia package debe ir en la primera línea
antes de cualquier declaración de las sentencias
import
Si hay sentencias import, estas deben estar
declaradas entre la sentencia package y la
primera declaración de una clase, si no hay
sentencias package, las sentencias import van en
la primera línea
Reglas de declaración de archivos de código
fuente
Las sentencias import y package aplican para
todas las clases contenidas en un solo archivo de
código fuente.
Un archivo de código fuente puede tener mas de
una clase no publica.
Archivos de código fuente que no contienen
ninguna clase publica pueden tener un nombre
diferente al de cualquier clase contenida en el
archivo
Práctica 1.- Primer programa
Objetivo: conocer el procedimiento general para
crear, compilar y ejecutar programas con Java
estándar.
public class Saludo{
public static void main(String [] args)
{
[Link](“Bienvenido al curso de Java”);
}
}
Guardar en un archivo de texto como
[Link] (nombre igual al de la clase)
COMPILACIÓN
EJECUCIÓN
Repaso
Conceptos básicos de
Java
Aspectos sintácticos generales
Sensible a mayúsculas / Comentarios de un a
minúsculas línea va precedido por
“//”
Las sentencias finalizan ◦ Ejemplo:
con “;” ◦ //comentario 1 línea
Multilínea se delimitan
Los bloques de por “/*” y “*/”
instrucción se delimitan ◦ Ejemplo
con llaves ({…}) ◦ /*comentario de varias
líneas*/
CamelCase
Es la práctica de escribir frases o palabras compuestas eliminando
los espacios y poniendo en mayúscula la primera letra de cada
palabra.
El nombre se debe a que las mayúsculas a lo largo de una palabra en
CamelCase se asemejan a las jorobas de un camello.
El nombre CamelCase se podría traducir como
Mayúsculas/Minúsculas Camello.
UpperCamelCase: cuando la primera letra de cada una de las
palabras es mayúscula. Ejemplo: EjemploDeUpperCamelCase.
lowerCamelCase: igual que la anterior con la excepción de que la
primera letra es minúscula. Ejemplo: ejemploDeLowerCamelCase.
Casos donde usar el camelCase
Clases Variables
Interfaces Métodos
UpperCamelCase lowerCamelCase
Objeto
Es un conjunto de variables y de los métodos relacionados con esas
variables
Ejemplo:
Nombre
Edad
Variables
Vacunas
(información):
Comer
Métodos Correr
(funciones): Caminar
Ladrar
Actualizar vacunas
Invocar métodos
Para poder invocar a los métodos de un objeto desde
fuera del mismo es necesario disponer de la referencia
al objeto.
Normalmente se guarda en una variable que a través del
operador “.” permite hacer la llamada a los métodos del
objeto.
referencia.metodo1();
referencia.metodo2(argumento1,argumento2,…)
[Link]();
[Link](“subir”,2);
Argumentos
Algunos métodos necesitan que les
proporcione una serie de datos (argumentos
de llamada) para poder realizar su función.
Deben ser suministrados en la llamada al
método, situándolos entre paréntesis y
separados por “,”, a continuación del nombre
del método.
◦ ajustarVolumen(“subir”,2);
Clase
Es un proyecto, o prototipo, que define las variables
y los métodos comunes a un cierto tipo de objetos.
Clase: Perro
Firulais Sansón Pelusa
3 años 4 años 2 años
2 vacunas 5 vacunas 3 vacunas
Comer: 3 veces al día Comer: 2 veces al día Comer: 1 vez al día
Sintaxis de una clase en java
<modifiers> class <class_name>
{
[<attribute_declarations>]
[<constructor_declarations>]
[<method_declarations>]
}
Ejemplo:
public class Vehicle {
private double maxLoad;
public void setMaxLoad(double value)
{
maxLoad = value;
}
}
Instancias
Una vez definida la clase, los programadores
podrán crear objetos de la misma (instancias)
para poder hacer uso de sus métodos.
Las instancias u objetos de una clase se crean
con el operador new, el cual crea la instancia,
la almacena en memoria y devuelve una
referencia a la misma, que normalmente se
guarda en una variable para posteriormente,
invocar a los métodos del objeto.
Creando un objeto
NombreClase v=new NombreClase();
v.metodo1();
Perro p1=new Perro();
[Link](3,6,9);
Televisor v=new Televisor();
[Link]();
Métodos
Definen el comportamiento de los objetos de una
clase.
Pueden hacer uso de campos o atributos para
almacenar información sobre el objeto.
Ejemplo: la clase Television debe tener un campo
volumen donde almacenar el volumen actual del
televisor, en donde el método ajustarVolumen()
podrá usar este campo para mantener actualizado
en cada momento el volumen del televisor
Métodos de una clase
<modifiers> <return_type> <name>
([<argument_list>]) {
[<statements>]
}
public class Dog {
private int weight;
public int getWeight() {
return weight;
}
public void setWeight(int newWeight) {
weight = newWeight;
}
}
Llamada y declaración de un método
Llamada al método:
[Link](argumento1,argumento2)
Declaración del método
◦ .
◦ .
◦ tipo metodo(tipo parametro1,tipo parametro2){
..
◦ }
◦ ..
Atributos de una clase
<modifiers> <type> <name>;
public class Foo {
private int x;
private float y = 10000.0F;
private String name = "Bates Motel";
}
Modificador suele ser private para impedir que puedan ser
utilizados directamente desde el exterior, forzando a que
el acceso a los mismos se haga siempre a través de los
métodos de la clase(encapsulamiento en POO).
Type: representa un tipo válido en java, puede ser tipo de
dato primitivo o de tipo objeto
Definición de una clase con métodos
y atributos.
<En java, los métodos de una clase se implementan mediante funciones y los
campos mediante variables.
[public] class NombreClase{
[private] tipo campo1;
//otros campos
[public] tipo método (tipo param1,tipo param2,…)
{
//código método
[return valor;]
}
//otros métodos
}
Ejemplo
public class Televisor
{
private int volumen;
public void ajustarVolumen(String modo, int valor)
{
if([Link](“subir”))
volumen+=valor;
else
volumen-=valor;
Televisor t=new Televisor();
}
[Link](“bajar”,1);
}
Controlar el acceso de los miembros
de una clase
Uno de los beneficios de las clases es que
pueden proteger sus variables y métodos
miembros frente al acceso de otros objetos.
Private
Public
Protected
private
El nivel de acceso más restringido es private.
Un miembro privado es accesible sólo para la clase en la que
está definido.
Se utiliza este acceso para declarar miembros que sólo deben
ser utilizados por la clase
Para declarar un miembro privado se utiliza la palabra clave
private en su declaración.
class Alpha {
private int soyPrivado;
private void metodoPrivado()
{
[Link]("metodoPrivado");
}
}
protected
Permite a la propia clase, las subclases (con la excepción a la que nos
referimos anteriormente), y todas las clases dentro del mismo paquete
que accedan a los miembros.
Este nivel de acceso se utiliza cuando es apropiado para una subclase de
la clase tener acceso a los miembros, pero no las clases no relacionadas.
Los miembros protegidos son como secretos familiares - no importa que
toda la familia lo sepa, incluso algunos amigos allegados pero no se
quiere que los extraños lo sepan.
Para declarar un miembro protegido, se utiliza la palabra clave protected
class Alpha {
protected int estoyProtegido;
protected void metodoProtegido()
{
[Link]("metodoProtegido");
}
}
public
El especificador de acceso más sencillo es 'public'.
Todas las clases, en todos los paquetes tienen acceso a
los miembros públicos de la clase.
Los miembros públicos se declaran sólo si su acceso no
produce resultados indeseados si un extraño los utiliza.
Aquí no hay secretos familiares; no importa que lo sepa
todo el mundo.
Para declarar un miembro público se utiliza la palabra
clave
class Alpha {
public int soyPublico;
public void metodoPublico() {
[Link]("metodoPublico");
}
}
Métodos y campos estáticos
No todos los métodos y campos de una clase
tienen por que estar asociados a un objeto
particular de la misma.
Suponiendo que la clase Televisor podrá tener
un método obtenerPrecio(), cuya ejecución
generaría el mismo resultado para cualquier
objeto .
◦ [Link]()
◦ [Link]();
Métodos y campos estáticos
[public] class NombreClase
{
◦ Static tipo campo1;
Static tipo metodo1(parametros)
{
//codigo método
} Los campos estáticos
deben llevar un
modificador de acceso que
} permita su uso desde el
exterior (public, protected
o ninguno)
Restricciones de los métodos
estáticos
No puede hacer referencia a elementos
estáticos de su misma clase.
No puede hacer uso de super y this.
Método main()
Toda aplicación java está compuesta por al
menos una clase.
Alguna de las clases debe estar declarada con
el modificador de acceso public.
Formato:
Public static void main(String[] args)
{
//código del método
}
Características del método main()
Método público
Método estático
Public static void main(String[] args)
No puede devolver {
ningún resultado (void) //código del método
}
Declarar un array de
cadenas de caracteres
en la lista de
parámetros o un
número de argumentos.
Ejemplo
public class Saludo{
public static void
main(String [] args)
{
[Link](“Bienv
enido al curso de Java”+
args[0]);
}
}
Secuencias de escape
Secuencia de escape significado
\b Retroceso
\n Salto de línea
\t Tabulación horizontal
\\ Barra invertida
\’ Comilla simple
\” Comilla doble
Práctica: mostrar en pantalla lo siguiente (en una sola impresión):
Hoy veremos las “secuencias de Escape”
Y continuaremos en la ‘tarde’
Tipos de datos primitivos
Java soporta 8 datos primitivos
Tipo básico Tamaño
byte 8 bits
short 16 bits
int 32 bits
long 64 bits
char 16 bits
float 32 bits
double 64 bits
boolean -
String Clase
Tipos de datos primitivos se pueden organizar
en cuatro grupos:
Números enteros: byte, short, int y long.
Carácter: El tipo char (un carácter codificado
en el sistema unicode)
Numérico decimal: float y double
Lógicos: boolean (true o false)
Wrappers
La finalidad de tener clases “wrapper” es
poder envolver a un tipo de dato primitivo en
actividades que solo están disponibles para
objetos.
Creando objetos Wrappers
Todas las clases wrapper por lo regular tienen dos constructores
como lo vimos en la tabla anterior (a excepción de la clase
Character), uno toma un tipo de datos primitivo y el otro una
cadena que representa el valor.
Integer i1 = new Integer(42);
Integer i2 = new Integer("42");
Float f1 = new Float(3.14f);
Float f2 = new Float("3.14f");
Character c1 = new Character('c');
Boolean a = new Bollean(true);
Boolean b = new Boolean("false");
Variables
Tipo de Datos variable
Tipos primitivos: almacenan el dato real
◦ Ejemplo: int k=20;
◦ k 20
Tipos objetos: contiene una referencia al mismo
◦ Con el operador “.” podemos acceder a los métodos del
objeto referenciado
Usando la expresión: variable_objeto.metodo();
Televisor ts=new Televisor();
ts (referencia)
objeto
Palabras reservadas
Declaración de variables
Tipo_dato nombre_variable;
Reglas:
Comenzar por un carácter alfabético
No puede contener espacios, signos de puntuación o secuencias de escape
No pueden usarse palabras reservadas
Válidas No válidas
int k, cod; boolean 7q;
long p1; int num uno;
char cad_2; long class;
Asignación
Una vez declarada la variable se le puede
asignar un valor:
◦ Variable=expresion;
int p, k,v;
p=30;
k=p+20;
v=k*p;
int num=5;
int p, n=7;
Literales
Es un valor constante que s epuede asignar
directamente a una variable o puede ser
utilizando en una expresión.
◦ Literales numéricos enteros(int)
◦ Literales numéricos decimales (double)
◦ Literales boolean son true false.
◦ Literales de tipo char (entre comillas simples)
Ejemplos
Literales numéricos enteros(int)
◦ byte=b=10;
Literales numéricos decimales (double)
◦ float p=3.14;
◦ float p=3.14f;
Literales boolean son true false.
◦ boolean b=“true”;
Literales de tipo char (entre comillas simples)
◦ char car=‘#’;
◦ char p=‘\u03AF’;
◦ char c=231
Ámbito de las variables
◦ Campo o atributo:
Se declaran al principio de la clase, fuera de los métodos.
Son compartidas por todos los métodos de la clase
Suelen declararse como private (limitar su uso)
Pueden ser utilizadas sin haber sido inicializadas de
manera explicita, ya que se inicializan implícitamente
cuando se crea el objeto.
Valores por defecto de una variable atributo
Tipo de variable Valor por defecto
byte, short, int, long 0
char ‘\u0000’
floar, double 0.0
boolean False
objeto null
Practica: mostrar en pantalla el valor por defecto de los tipos de
variable que se muestran en la tabla
Ámbito de las variables
◦ Variable local:
Se declaran dentro de un método, su ámbito de
utilización está restringido al interior del método
No admiten ningún tipo de modificador
Se crea en el momento en el que se hace la llamada al
método, destruyéndose cuando finaliza la ejecución de
éste.
Puede declararse en el interior de un bloque de
instrucciones (su uso esta restringido al interior de ese
bloque)
Toda debe ser inicializada explícitamente antes de ser
utilizada
Ejemplo:
public class Ejemplo{
Campo o atributo
◦ private int p;
public void metodo(…)
{
char t;
if(…)
{ local
long c;
}
}
}
Operadores
Símbolos que permiten realizar operaciones
con los datos de un programa
Aritméticos Valores tipo numérico
Operadores
Java
Asignación Operador de asignación (=)
Condicionales boolean (true o false)
lógicos boolean (true o false)
Operadores Aritméticos
Operador Descripción Ejemplo
+ Suma dos valores numéricos int c;
c=2+5;
- Resta dos valores numéricos int c;
c=2-5;
* Multiplica dos números int c;
c=2*5;
/ Divide dos números int a=8,b=5;
float x,y;
x=a/b; //resultado es 1
y=a/3.0f; //el resultado es 2.66
% Calcula el resto de la división entre dos números int c;
c=7%2; //el resultado es 1;
++ Incrementa una variable numérica en una unidad y int c=3;
deposita el resultado en la variable c++;
//el resultado es 4
-- Decrementa una variable en una unidad y deposita el int c=3
resultado en la variable c--;
//el resultado es 2
Observaciones
Operadores incremento(++) y decremento(--)
Es posible situarlos delante de la
variable(prefijo)
O después de la variable(posfijo)
Caso1: Caso 2:
int a=3, b;
int a=3, b,s;
b=a++;
b=a++;
[Link](“b vale”+b);
s=++b*++a;
[Link](“a vale”+a);
[Link](“s vale”+s);
Como norma general
Al utilizar operadores de incremento y decremento en
una expresión compleja, debemos tener en cuenta los
siguientes puntos:
◦ Las expresiones en java se evalúan de izquierda a derecha.
◦ Si el operador se sitúa delante de la variable, se ejecutará
primeramente la operación que representa antes de seguir
evaluando la expresión.
◦ Si el operador se sitúa después de la variable se utiliza el valor
actual de la variable para evaluar la expresión y a continuación
se ejecuta la operación asociada al operador.
Operadores de asignación
Operador Descripción Ejemplo
= Asigna la expresión de la derecha, al operador situado a la izquierda int c;
del operador c=8*5;
+= Suma la expresión de la derecha a la variable situada a la izquierda int c=4;
del operador c+=5;
-= Resta la expresión de la derecha a la variable situada a la izquierda int c=4;
del operador c-=5;
*= Multiplica la expresión de la derecha con la variable y deposita el int a=8;
resultado en la variable a*=2;
/= Divide la variable situada a la izquierda entre la expresión de la int c=7;
derecha, depositando el resultado en al variable c/=2;
%= Calcula el resto de la división entre la variable situada a la izquierda y int c=6;
la expresión de la derecha, depositando el resultado en al variable c%=3;
Asignación de referencias y de
valores
Object ob1=new Object(); Int a=5;
Object ob2=ob1; Int b=a;
ob1 ff23
objeto a 5
.
memoria
.
ob2 ff23 b 5
Por objeto Por variables
Operadores condicionales
Operador Descripción
== Compara dos valores, en caso de que sean iguales el resultado de
la operación será true
< Si el operador de la izquierda es menor que el de la derecha, el
resultado es true
> Si el operando de la izquierda es mayor que el de la derecha, el
resultado es true
<= Si el operando de la izquierda es menor o igual que el de la
derecha, el resultado es true
>= Si el operando de la izquierda es mayor o igual que el de la
derecha, el resultado es true
!= Si el valor de los operandos es diferente el resultado es true
Los operandos <,>,<= y >= únicamente
podrán utilizarse para comparar enteros,
puntos flotantes y caracteres
Operadores lógicos
Operador Descripción
&& Operador lógico AND. El resultado será true si los dos operandos son true,
en cualquier otro caso el resultado será false
|| Operador lógico OR. El resultado será true si alguno de los operandos es
true
! Operador lógico NOT. Actúa sobre un único operando boolean, dando como
resultado el valor contrario al que tenga el operando.
Operadores a nivel de bits
Operador Descripción
& Operador lógico AND. Realiza la operación AND entre los operandos, bit a
bit
| Operador lógico OR. Realiza la operación OR entre los operandos, bit a bit
^ Operador lógico OR exclusiva. Realiza la operación OR exclusiva entre los
operandos, bit a bit
~ Operador NOT, invierte el estado de los bits del operando
Operador condicional
Operador ternario(3 operandos)
Asigna un valor entre dos posibles a una
variable
Formato:
Tipo variable=(condicion)?valor_si_true:valor_si_false
Ejemplo:
Int k=4;
String s=(k%2==0)?”par”:”impar;
[Link](s);
Instrucciones de control
Instrucción if
◦ Sentencia de tipo alternativa simple que permite
comprobar una condición dentro de otro programa.
◦ Si es verdadera se ejecutará una determinado
conjunto de instrucciones.
◦ En caso de que no lo sea: se puede optar por
ejecutar otro conjunto diferente de instrucciones o
por no ejecutar.
Formato instrucción if
If(condición)
{
//sentencias Ejemplo:
}
If(a>b)
else {
{ [Link](“El mayor es ”+a);
}
//sentencias else
} {
[Link](“El mayor es ”+b);
}
Observaciones
La condición de comprobación puede ser
cualquier expresión cuyo resultado sea de
tipo boolean(true o false).
El bloque else es opcional.
Cuando el bloque de sentencias, if o else,
esta formado únicamente por una
instrucción, las llaves delimitadoras son
opcionales.
Instrucciones de control
Instrucción switch
◦ Es de tipo alternativa múltiple
◦ Permite ejecutar diferentes bloques de instrucción
en función del resultado de una expresión.
Formato: Ejemplo:
switch(expresión)
{ switch(a)
case valor1: {
//sentencia case 1:
[Link](“Entro al primer case”);
break;
break;
case valor2: case 2:
//sentencia [Link](“Entro al segundo case”);
break; break;
default: default:
//sentencia [Link](“No acertó a nungún case”);
}
}
Observaciones
Los únicos valores que puede evaluar switch son
números enteros de tipo int (byte , short, chat e
int).
Puede contener cualquier numero de case, pero no
dos case con el mismo valor.
La sentencia break es opcional, se emplea para
provocar la finalización del switch al terminar el
case.
El default (es opcional) se ejecutará si el resultado
de la expresión no coincide con ningún case
Ejemplo
int h=5;
switch(h*2)
{
case 10:
[Link](“El resultado
: es 10”);
case 20:
[Link](“El tamaño es demasiado alto”);
break;
default:
[Link](“El resultado no es correcto”);
}
Instrucción for
Permite ejecutar un conjunto de instrucciones
un número determinado de veces.
Formato:
for(inicialización;condicion;incremento)
{
//sentencias
}
Ejemplo:
for(int i=1;i<=10;i++)
{
[Link](“El numero es ”+i);
}
Observaciones
Las instrucciones de control (inicialización,
condición e incremento) son opcionales, pero el
delimitar “;” siempre debe estar presente.
for(int i=0;;)
La variable declarada en la instrucción de
inicialización, solo será accesible dentro del
interior del for.
Si solamente tiene una instrucción las llaves se
pueden omitir.
Instrucción while
Permite ejecutar un bloque de instrucciones mientras se cumpla una
determinada condición dentro del programa.
while(condicion){ do{
//sentencias ◦ //sentencias
} }while(condicion);
int a=10; int a=10;
while(a>0){ do{
[Link](“El numero es” +a); [Link](“El numero es” +a);
a--; a--;
} } while(a>0);
Debe cumplir la condición Se ejecuta al menos 1 vez y continua
para dar inicio al ciclo si se sigue cumpliendo la condición
Salida forzada de un bucle
Provoca la salida forzada del Provoca detenga la
bucle continuando la ejecución
del programa en la primera iteración actual
sentencia situada después del ◦ for: ejecute el incremento
mismo
◦ while a comprobar la
int numero=6; condición de entrada.
for(int i=1;i<=5;i++) int suma=0;
{
double aleat=[Link]([Link]()*10+1); While(suma<1000)
[Link](aleat); {
if(aleat==numero) double aleat=[Link]([Link]()*10+1);
break; if(aleat%2==0){
} continue;
}
suma+=aleat;
}
break continue
ARRAYS
Es un objeto en el que se puede almacenar un
conjunto de datos de un mismo tipo (tipos
primitivos o referencia a objetos)
Cada uno de los elementos del array tiene
asignado un índice numérico según su posición
Cero es el índice primero.
0 1 2 3 4 5 …
Declaración
Tipo [] variable_array;
Tipo variable_array[];
•Declaración de arreglos de tipo primitivo
int[] key;
int key [];
•Declaración de arreglos de referencia a objetos
Thread[] threads;
Thread threads[];
•Declaración de arreglos Multidimensionales
String[][][] occupantName;
String[] ManagerName [];
•Pueden declararse como
atributos de una clase o
locales.
Dimensionado de un array
Variable_array=new tipo[tamaño];
Se puede asignar el tamaña en la misma línea de
declaración.
Todos sus elementos son inicializados explícitamente
Ejemplo:
K= new int[5];
Cads=new char[10];
String[] noms=new String [10];
Inicializar arrays
De tipos primitivos
◦ int x = 9;
◦ int[] dots = {6,x,8};
De objetos
◦ Dog puppy = new Dog("Frodo");
◦ Dog[] myDogs = {puppy, new Dog("Clover"), new Dog("Aiko")};
Acceso a los elementos de un array
Variable_array[indice]
◦ Indice: representa la posición a la que se quiere tener
acceso (valor comprendido entre 0 y tamaño -1)
◦ Los objetos array tienen un atributo público, llamado
length, que permite conocer el tamaño al que ha sido
dimensionado un array.
Int [] nums=new int[10];
For (int i=0;i<[Link];i++){
nums[i]=i*2;
}
Int [] testScores;
testScores=new int[4];
Recorrido de un arreglo con for-
each
Facilita el recorrido de arrays y colecciones
Formato:
for(tipo variable:var_array){
//instrucciones
}
for(int n:nums){
for(int i=0; i<[Link];i++){
[Link](n);
[Link](num[i]);
}
}
Arrays multidimensionales
Los arrays pueden tener más de una
dimensión, por ejemplo, un array de
enteros de dos dimensiones se
declararía: 0 1 2 3 4 5
Declarar: 0
28
◦ Int [][]k; 1
2
Dimensionarlo:
K=new int[3][5];
Acceder a una de sus posiciones:
◦ K[1][3]=28;
Recorrido de un arreglo multidimensional
Se puede utilizar la instrucción for tradicional, empelando para ello tantas
variables de control como dimensiones tenga el array.
for(int i=0; i<5;i++){
for(int j=0; j<3;j++){
k[i][j]=i+j;
}
}
Se puede utilizar tambien for-each para recuperar el
contenido
for(int n:k){
[Link](“valor:”+n);
}
Arrays multidimensionales
irregulares
Es posible definir un array multidimensional
en el que el número de elementos de la
segunda y sucesivas dimensiones sea
variable, indicando únicamente el tamaño de
la primera dimensión.
p
◦ int [][]p=new int[2][];
◦ p[0]=new int[3]; 0
◦ p[1]=new int [2];
1
Clases de uso general
Java es más que un lenguaje
Tan solo la edición J2SE proporciona más de
8000 clases (clases e interfaces) con sus
correspondientes conjuntos de métodos
Organización de clases
Los paquetes son un mecanismo utilizado por
Java que permite organizar las clases de una
manera estructurada y jerárquica.
Un paquete es un directorio en el que se
almacenan archivos .class con los byte codes
de la clase; un paquete puede a su vez estar
compuesto de otros subpaquetes.
Paquete principal de J2SE
java
lang
[Link]
[Link]
clase
Paquete principal
subpaquete
Ventajas
Permite organizar las clases de manera
estructurada.
Evitan conflictos de nombres.
Sentencia import
import <pkg_name>[.<sub_pkg_name>].<class_name>;
OR
import <pkg_name>[.<sub_pkg_name>].*;
Ejemplos:
import [Link].*;
import [Link];
import [Link].*;
Paquetes de uso general
[Link]: Incluye las clases fundamentales para la
realización de cualquier programa. El compilador
importa el paquete completo de forma implicita.
[Link]: contiene las clases para la gestión de
entrada y salida de datos en Java.
[Link]: en este paquete encontramos clases
para varias utilidades, como el tratamiento de
colecciones de objetos, manipulación de fechas o
construcción de expresiones regulares
API
Documentación oficial de las clases del Java Estándar.
Contiene:
◦ Definición de la clase:
Nombre,
Modificadores,
Clase que hereda,
interfaces que implementa
◦ Paquetes en donde se encuentra
◦ Atributos publicos
◦ Metodos
◦ contructores
Gestión de cadenas: La clase String
Las cadenas de caracteres son objetos
pertenecientes a la clase [Link]
La clase String proporciona una amplia
variedad de métodos que permiten realizar
las operaciones de manipulación y
tratamiento de cadenas de caracteres,
habituales en un programa
Creación de objetos String
String s=new String(“Texto de prueba”);
Dada su amplia utilización :
◦ String s=“Texto de prueba”;
Una vez creado y asignada la eferencia al
mismo a una variable, puede utilizarse para
acceder a los métodos definidos en la clase
String.
◦ [Link]();
Inmutabilidad de objetos String
Las cadenas de caracteres son objetos
inmutables, es decir que una vez creado el
objeto no puede ser modificado.
Antes de la Después de la
String s=“Hola”;
concatenación concatenación
s=s+”que tal”;
“Hola” “Hola”
s s
“Hola que tal”
Principales métodos de la clase String
Int length(). Devuelve el número de caracteres de la
cadena sobre la que se aplica.
Boolean equals( String otra). Compara la cadena con
otra, haciendo distinción entre mayúsculas y minúsculas.
Boolean equalsIgnoreCase(String otra). Actúa igual que la
anterior pero sin hacer distinción entre mayúsculas y
minúsculas.
Char charAt(int pos). Devuelve el carácter que ocupa la
posición indicada (base 0)dentro de la cadena.
Ejemplo
Public class Principal{
Public static void main(String[] args){
String s=“texto de prueba”;
char c=‘e’;
Int cont=0;
For(int i=0;i<[Link]();i++){
if([Link](i)==c)
cont++;
}
[Link](“La letra “+c+”aparece ”+cont+”vece”);
}
}
Principales métodos de la clase String
String substring(int inicio, int final). Devuelve un trozo de la cadena
sobre la que se aplicará.La subcadena devuelta está formada por los
caracteres que van desde la posición indicada en inicio hasta la
posición final-1.
◦ String s=“texto de prueba”;
◦ [Link]([Link](6,15));
Int indexOf(String cad). Devuelve la posición dela cadena indicada en
el paramétro, dentro de la cadena principal, si no aparece devuelve -
1
◦ Public boolean existe(String texto, String car){
If([Link](car)!=-1)
Return true;
else
Return false;
◦ }
Principales métodos de la clase String
String toUpperCase). Devuelve la cadena en formato mayúscula
String toLowerCase). Devuelve la cadena en formato minúscula
String Split(String regex). Devuelve el array de String resultante de
descomponer la cadena de texto en subcadenas, utilizando como
separador de elemento el carácter especificado en el parámetro
regex.
Public class ConversionArray{
public static void main(String [] args){
String s=“lunes,martes,miercoles”;
String[] cads=[Link](“,”);
for(String aux:cads){
[Link](“día: ”+aux);
}
}
}
Clase Math
Proporciona métodos para la realización de
las operaciones matemáticas más habituales
en un programa.
Todos los métodos son estáticos, por lo que
no necesitan crear una instancia de la clase
para su utilización.
Constantes públicas:
◦ static double E
◦ Static double PI
Métodos
Numero max(numero n1, numero n2). Devuelve el
mayor de dos números(int,long,float o double)
public class Termometro{
◦ public static void main(String[] args){
int[] temp={25,38,12,30};
int maxima=temp[0];
for(int tp:temp){
maxima=[Link](maxima,tp);
}
◦ }
}
Métodos
Numero min(numero n1, numero n2). Devuelve el
menor de dos números(int,long,float o double).
double ceil(double n). Devuelve el entero mayor
más cercano al número indicado en el parámetro.
◦ Double d=[Link](4.3) //devuelve 5.0
double floor(double n). Devuelve el entero menor
más cercano al número indicado en el parámetro.
◦ Double d=[Link](4.3) //devuelve 4.0
Métodos
Double round(double n). Devuelve el entero
más cercano al número indicado en el
parámetro.
◦ double d=[Link](4.3// almacena el valor 4.0)
double pow(double n1,double n2). Devuelve
el resultado de elevar n1 a n2.
◦ Double d=[Link](4.3) //devuelve 5.0
Métodos
double random(). Devuelve un número aleatorio
mayor o igual que 0.0 y menor que 1.0.
public class Principal{
public static void main(String [] args){
int[] m=new int[10];
for(int i=0; i<[Link];i++){
M[i]=int([Link]()*50+1);
}
}
}
Importaciones estáticas
Consiste en la posibilidad de importar todos
los miembros estáticos de una clase, de
modo que pueda hacerse referencia a los
mismos sin necesidad de utilizar el nombre
de la clase delante del método o atributo.
Import static [Link].*;
Importa static [Link].*;
◦ M[i]=(int) (random()*50+1);
Entrada y salida en Java
Paquete [Link]. Contiene una serie de clases
que permiten gestionar la entrada y salida de
datos de un programa (independiente al
dispositivo)
Salida PrintStream
BufferedReader
entrada InputStream
InputStreamReader
Salida de datos
Obtención del objeto PrintStream. Se debe crear un
objeto PrintStream asociado al dispositivo de salida.
La clase System proporciona el atributo estático out
que contiene una referencia al objeto PrintStream
asociado a la salida estándar, representada por
consola.
Envío de datos al Stream. La clase PrintStram
dispone de los métodos print(String cadena) y
println(String cadena).
◦ [Link](“texto de salida”);
Entrada de datos
La lectura de datos del exterior se gestiona a
través de InputStream, mediante el atributo
estático in de la clase System.
De las clases del paquete [Link]: la clase
BufferedReader.
◦ Crear objeto InputStreamReader. Es necesario indicar el
objeto InputStream de entrada. Si es por teclado lo
tenemos referenciado en el atributo estático in de la
clase System.
◦ InputStreamReader rd;
◦ rd=new InputStreamReader([Link]);
Entrada de datos
Crear objeto BufferedReader. A partir del objeto
anterior se puede construir un BufferedReader
que permita realizar la lectura de cadenas.
◦ BufferedReader bf;
◦ bf=new BufferedReader(rd);
Invocar el método realLine(). Devuelve todos los
caracteres introducidos hasta el salto de línea.
String s=[Link]();
Ejemplo
import [Link].*;
public class Ejemplo{
public static void main(String [] args) throws IOException{
String cad;
InputStreamReader ir;
BufferedReader bf;
ir=new InputStreamReader([Link]);
bf=new BufferedReader(ir);
[Link](“Introduzca su nombre”);
cad=[Link]();
[Link](“Te llamas:”+cad);
}
}
Scanners
[Link]
Primero se debe crear unobjeto scanner asociado
al InputStream del dispositivo de entrada.
Scanner sc=new Scanner([Link]);
La cadena de caracteres introducida por teclado
hasta la pulsación de la tecla “enter” es dividida
en un conjunto de bloques denominados tokens
Esto es una cadena
token1 token2 token3 token4
Métodos de la clase Scanner
String next(). Devuelve el siguiente token
Boolean hasNext(). Indica si existe o no un nuevo token
para leer.
Xxx nextXxx(). Devuelve el siguiente token como un
tipo básico.
Boolean hasNexXxx().Indica si existe o no un siguiente
token del tipo especificado.
Void useDelimiter(String d). Establece un nuevo
delimitador.
Constructores
Todas las clases Java tienen métodos
especiales llamados Constructores que se
utilizan para inicializar un objeto nuevo de
ese tipo.
<modifier> <class_name> ([<argument_list>])
{
[<statements>]
}
Ejemplo
public class Dog {
private int weight;
public Dog() {
weight = 42;
}
public int getWeight() {
return weight;
}
public void setWeight(int newWeight) {
weight = newWeight;
}
Ejemplo
public class MyDate {
private int day = 1;
private int month = 1;
private int year = 2000;
public MyDate(int day, int month, int year) { ... }
public void print() { ... }
}
public class TestMyDate {
public static void main(String[] args) {
MyDate today = new MyDate(22, 7, 1964);
}
Una declaración reserva espacio sólo para
una referencia:
MyDate my_birth = new MyDate(22, 7, 1964);
my_birth ???
Se utiliza el operador new() para asignar
espacio a my_birth
my_birth ???
day 0
month 0
year 0
Atributo explícitamente inicializado
MyDate my_birth = new MyDate(22, 7, 1964);
my_birth ???
day 1
month 1
year 2000
Valores tomados de la declaración de la clase
Ejecuta el constructor
MyDate my_birth = new MyDate(22, 7, 1964);
my_birth ???
day 22
month 7
year 1964
my_birth 0x01abcdef
day 22
month 7
year 1964
Igualdad de objetos
Los operadores de igualdad(==) y
desigualdad(!=)
◦ Se compara referencias y no objetos(mismo tipo)
◦ Para comprobar igualdad de objetos: método
equals.
String v1= new String(“hola”);
String v2=new String(“hola”); “hola”
v1
v2 “hola”
this
Éstos son algunos usos de la palabra clave
this:
Para los miembros de atributo de referencia
local y el método dentro de un método o
constructor local
La palabra clave this que distingue a este
local o un método constructor de variable de
una variable de instancia
Para pasar el objeto actual como un
parámetro a otro método o constructor
public class MyDate {
private int day = 1;
private int month = 1;
private int year = 2000;
public MyDate(int day, int month, int year) {
[Link] = day;
public class TestMyDate {
[Link] = month;
[Link] = year; public static void main(String[] args) {
}
MyDate my_birth = new MyDate(22, 7, 1964);
public MyDate(MyDate date) {
MyDate the_next_week =my_birth.addDays(7);
[Link] = [Link];
[Link] = [Link]; the_next_week.print();
[Link] = [Link]; }
} }
public MyDate addDays(int more_days) {
MyDate new_date = new MyDate(this);
new_date.day = new_date.day + more_days;
return new_date;
}
public void print() {
[Link]("MyDate: " + day + "-" + month + "-" + year);
}
}
Herencia
Puedes crear una clase a través de una clase
existente, y esta clase tendrá todas las variables y
los métodos de su 'superclase', y además se le
podrán añadir otras variables y métodos propios.
Se llama 'Superclase' a la clase de la que desciende
una clase
<modifier> class <name> [extends <superclass>] {
<declarations>
}
Herencia
Sobreescribir metodos
Una subclase puede modificar el
comportamiento heredado de un
los padres de clase.
Una subclase puede crear un método con
diferentes funcionalidad que el método de los
padres pero con el mismo:
◦ Nombre
◦ Tipo de retorno
◦ Lista de argumentos
public class Employee {
protected String name;
protected double salary;
protected Date birthDate;
public String getDetails() {
return “Name: “ + name + “\n” +“Salary: “ + salary;
}
}
public class Manager extends Employee {
protected String department;
public String getDetails() {
return “Name: “ + name + “\n” + “Salary: “ + salary + "\n" + “Manager of: “ +
department;
}
}
super
super se utiliza en una clase para referirse a
su superclase.
super se utiliza para referirse a los miembros
de la superclase, tanto los atributos de datos
y métodos.
Comportamiento de invocar no tiene que
estar en la superclase; puede ser más arriba
en la jerarquía.
public class Employee {
private String name;
private double salary;
private Date birthDate;
public String getDetails() {
return "Name: " + name + "\nSalary: " + salary;
}
}
public class Manager extends Employee {
private String department;
public String getDetails() {
// call parent method
return [Link]() +"\nDepartment: " + department;
}
}
Operador instanceof
Opera únicamente con referencias a objetos
Se utiliza para saber si un objeto pertenece a un
determinado tipo.
El resultado será true si pertenece a la clase especificada
referencia_objeto instanceof clase
Ejemplo
String s=“Hola”;
If(s instanceof String){
[Link](“Es una cadena”);
}
Excepciones
Es una situación anómala que puede
producirse durante al ejecución de un
programa, como puede ser un intento de
división entera entre 0.
Un error representa una situación anormal
irreversible, como por ejemplo el fallo de la
máquina virtual.
Superclase de Excepciones y errores
Object
Throwable
Exception
Error
Exception
RuntimeException IOException SQLException
ArithmetcExceptio
n
NullPointerExcepti
on
IndexOutOfBound
sException
ClassCastExceptio
n
Declaracion de una excepción
Se utiliza la palabra throws, seguida de la
lista de excepciones que el método puede
invocar.
public String readLine() throws IOException
public void service(…) throws
ServletException,IOException
Caputa de Excepciones
Las instrucciones try, catch y finally proporcionan una forma
elegante y estructurada de capturar excepciones dentro de
un programa java.
Sintaxis
Try{
//instrucciones
}
Catch(TipoExcepcion1 args)
{
//tratamiento
}
..
Finally{
//Instrucciones de última ejecución
}