Pucp Java Puc 1 PDF
Pucp Java Puc 1 PDF
Pucp Java Puc 1 PDF
1 Curso de Extensión
PROGRAMACIÓN EN J A V A
Java es en la actualidad el lenguaje orientado a objetos más utilizado en el desarrollo de
aplicaciones de ámbito empresarial, principalmente aquellas que manejen datos en red. Es un
lenguaje muy completo que incluye una gran cantidad de funcionalidades; y en este curso se
estudiarán fes más representativas para un nivel introductorio en este programa.
' «s* i I > • ñgi
Este curso está áiseñado'?fára^pTOgramadores con conodmientos suficientes de metodología de la
programación y de programación orientada a objetos que deseen introducirse en este lenguaje
multiplataforma con el que se puedeh realizar las más diversas aplicaciones, tanto para PC como |
para Internet y comercio electrónico. | | j| M’]
f A l O na
u M icrosoft.
Curso de Extensión
PROGRAMACIÓN EN J A V A
Java es en la actualidad el lenguaje orientado a objetos más utilizado en el desarrollo de
aplicaciones de ámbito empresarial, principalmente aquellas que manejen datos en red Es un
lenguaje muy completo que incluye una gran cantidad de funcionalidades; y en este curso se
estudiarán í ¡ ! más representativas para un nivel introductorio en este programa.
Este curso está díseñado para programadores con conocimientos suficientes de metodolog la de la
programación y de programación orientada a objetos que deseen introducirse en este lenguaje
multiplataforma con el que se pueden realizar las más diversas aplicaciones, tanto para PC como
para Internet y comercio electrónico.
f A l K r f Micros o ft.
Adobe AutoCAD LjJ°ff^ .ñ S t EViewsS
INFOPUC
INSTITUTO DE INFORMÁTICA
Apreciad@ participante,
En esta oportunidad usted se integra a nuestra familia del InfoPUC por medio
del curso de extrensión: Programación en JAVA. Durante su permanencia en
el InfoPUC le pedimos el mayor compromiso para este curso de extensión, el
cual ha sido diseñado con un enfoque eminentemente práctico, con casos
reales que complementan el aprendizaje de las herramientas de computación y
enfocados al quehacer del profesional que las empresas requieren.
Atentamente,
Francisc , /ásquez
Director del Instituto de
Inform ática
JAVA Inicial INFOPUC
IN STITUTO DE INFORMATICA
Capítulo 1
Introducción a Java
1. ¿Qué es Java?
2. Ventajas frente a otros lenguajes
3. Comparación con otros lenguajes
4. Características de Java
5. Historia de Java
6. Componentes de Java2 SDK
7. La maquina virtual de Java
8. Áreas de la maquina virtual de Java
9. Compiladores JIT
10. La arquitectura neutral de Java
11. Paquetes - las librerías de clases
12. Malentendidos comunes sobre Java
JAVA Inicial ►IN F O P U C
INSTITUTO D£ INFORMÁTICA
PONTIFICIA UNIVERSIDAD C A T Ó L IC A c
1. ¿Qué es Java?
JAVA ES MEJOR MÁS POR LO QUE NO TIENE, QUE POR LO QUE TIENE!!
p o n t i f ic ia UNIVERSIDAD C A T Ó L IC A d e l p er ú
• Preprocesador (innecesario)
Los compiladores de C y C++ recurren al preprocesador, que se encarga de
buscar comandos especiales (que empiezan con #).
JAVA Inicia)
PONTIFICIA
♦ INFOPUC
IN STITUTO D6 INFORMATICA
Todo en Java (excepto tipos básicos como números) son objetos y clases, no
existe el concepto de estructuras de datos.
En resumen, Java:
UNIVERSIDAD C A T Ó L IC A d e l p er ú
4. Características de Java
Simple
Java ha sido diseñado de modo cercano a C++, omitiendo características
confusas de éste, con el objeto de hacerlo un sistema más comprensible. La
sintaxis de Java es una versión más clara de la sintaxis de C++. No existe la
necesidad de usar archivos de cabecera, aritmética de punteros, estructuras,
uniones, sobrecarga de operadores, etc.
Uno de los grandes logros de Java que lo hace simple es que es pequeño. Java
puede desarrollar software que puede correr stand-alone en máquinas
pequeñas.
Seguro
Dado que Java ha sido implementado para ser usado en ambientes distribuidos
y de trabajo en red, se ha puesto gran empeño en lo que a seguridad se refiere.
Distribuido
Java posee librerías que permiten trabajar de manera sencilla con protocolos
TCP/IP tales como HTTP y FTP. Las aplicaciones Java pueden abrir y acceder
objetos que se encuentren en la red via URLs, de un modo tan simple como
acceder a un sistema local de archivos.
Las capacidades de trabajar con Java en la red son diversas y fáciles de usar.
Robusto
Java posee buena capacidad para la verificación de errores. No posee un
modelo de manejo de punteros lo cual no le permite sobrescribir la memoria ni
corromper la data.
Java verifica el código mientras se escribe y una vez más antes de ejecutarlo.
Esto permite que el programa se comporte de un manera predecible, bajo
diversas condiciones.
JAVA Inicial INFOPUC
IN STITUTO DE INFORMATICA
Java ayuda a evitar fallas por condiciones excepcionales (división por cero,
acceso a un archivo no existente, etc.) mediante un manejo de excepciones
orientado a objetos integrados.
Arquitectura Neutral
Cuando se diseñó Java se tomaron consideraciones, tanto para el lenguaje
como para el intérprete, de manera que un programa pueda “escribirse una sola
vez, ejecutarse en cualquier sitio, en cualquier momento y para siempre”.
Es multiplataforma: Solaris, Iris, Linux, HP/UX, OSF, Windows 95, Windows NT,
OS/2, Macintosh.
Interactivo
Java tiene varias características que permiten escribir programas que hacen
muchas cosas al instante, sin perder el control de lo que debería suceder y
cuándo. El intérprete de Java soluciona esta necesidad de sincronización entre
múltiples procesos con “hilos múltiples” de sencilla utilización, que permiten
pensar en el comportamiento específico, sin tener que integrarlo en el clásico
modelo de programación global de “bucle para el evento”.
WWW y HTML: Java está diseñado para cumplir los requisitos de entrega de
contenidos interactivos usando applets insertadas en sus páginas HTML. Las
clases básicas de manejo de cadenas son especialmente adecuadas para el tipo
de manejo de texto basado en HTML.
JAVA Inicial
PONTIFICIA
<► INFOPUC
IN STITUTO DE INFORMATICA
5. Historia de Java
1992:
La compañía Sun Microsystems lleva a cabo el proyecto “Green” para comunicar
diversos aparatos o dispositivos electrónicos.
Se crea el lenguaje “OAK”, un intérprete para este y clases con este lenguaje
para la GUI.
1993:
(Marzo) FirstPerson, susbsidiaria de Sun, responde a una petición de ofertas
para el proyecto de televisión interactiva de la compañía Time Warner, requerían
un pequeño sistema operativo en microcódigo, orientado a objetos, capaz de
suminsitrar flujos de video MPEG sobre redes ATM. Sun pierde este negocio y
tampoco llega a un acuerdo con otra Cia. de televisión por cable: 3DO.
1994:
Sun implementa un browser de Web, al que llamaron “WebRunner” que podía
ejecutar clases transferidas desde un servidor HTTP.
El 1er. Applet: la mascota “Duke” aparece saludando desde una página web.
1995:
En enero renombran a Oak por Java y a WebRunner por HotJava. En noviembre
aparece en la Web la 1ra. versión beta oficial: JDK 1.0
1996:
En diciembre se libera JDK 1.1.
1998:
En diciembre se lanza JDK 1.2 al cual se le conoce como Java2.
2001:
2002 :
Las descargas de J2EE SDK llegan a los 2 millones.
2003:
La tecnología Java esta en casi 550 millones de computadoras de escritorio.
Casi el 75% de desabolladores profesionales usan Java como su lenguaje
primario de programación.
2004:
Se lanza JDK 5.
2005:
Aproximadamente 4.5 millones de desabolladores usan tecnología Java.
Más de 2.5 mil millones de dispositivos compatibles con Java están disponibles.
El compilador javac produce los bytecodes a partir del archivo fuente .java. Los
bytecodes corresponden al lenguaje de la máquina virtual.
La máquina virtual puede ser integrada (incrustada) dentro de otro ambiente tal
como un web browser o un sistema operativo.
STATIC
Las variables o métodos que son especificados mediante la palabra reservada
STATIC son ubicadas en esta área. Los elementos estáticos son cargados sólo
una vez al momento que la clase es instanciada por primera vez o cuando la
variable o método estático son referenciados por primera vez.
STACK
Las variables locales declaradas dentro de un método (incluyendo los
parámetros de los métodos) son alojadas en esta área. Las variables locales son
almacenadas cuando el método es ingresado.
HEAP
Todos los objetos son instanciados en esta área denominada de
almacenamiento dinámico. Un objeto es instanciado desde las partes no-
estáticas de una clase. Cuando un objeto es recogido por el colector de basura
es el heap quien es retornado al sistema.
JAVA Inicial INFOPUC
| £ | g | g !| j| § P ’ IN STITUTO DE INFORMATICA
2002:
Las descargas de J2EE SDK llegan a los 2 millones.
2003:
La tecnología Java esta en casi 550 millones de computadoras de escritorio.
Casi el 75% de desabolladores profesionales usan Java como su lenguaje
primario de programación.
2004:
Se lanza JDK 5.
2005:
Aproximadamente 4.5 millones de desarrolladores usan tecnología Java.
Más de 2.5 mil millones de dispositivos compatibles con Java están disponibles.
El compilador javac produce los bytecodes a partir del archivo fuente .java. Los
bytecodes corresponden al lenguaje de la máquina virtual.
La máquina virtual puede ser integrada (incrustada) dentro de otro ambiente tal
como un web browser o un sistema operativo.
STATIC
Las variables o métodos que son especificados mediante la palabra reservada
STATIC son ubicadas en esta área. Los elementos estáticos son cargados sólo
una vez al momento que la clase es instanciada por primera vez o cuando la
variable o método estático son referenciados por primera vez.
STACK
Las variables locales declaradas dentro de un método (incluyendo los
parámetros de los métodos) son alojadas en esta área. Las variables locales son
almacenadas cuando el método es ingresado.
HEAP
Todos los objetos son instanciados en esta área denominada de
almacenamiento dinámico. Un objeto es instanciado desde las partes no-
estáticas de una clase. Cuando un objeto es recogido por el colector de basura
es el heap quien es retornado al sistema.
JAVA Inicial
PONTIFICIA
<► INFOPUC
INSTITUTO DE INFORMATICA
9. Compiladores JIT
Aún cuando Java es interpretado, compiladores Just In Time (J.I.T.) ofrecen del
lado del cliente compilación de bytecodes a código máquina (instrucciones
binarias nativas).
En general todo programa se tiene que rehacer o adaptar para que funcione en
una plataforma diferente para la que se diseñó.
La estrategia de Java
p o n t if ic ia UNIVERSIDAD C A T Ó L IC A D a per ú
Java provee las mismas librerías (API) para cada sistema operativo en el que se
ejecuta.
Java requiere de un intérprete (JVM por las siglas en inglés de Java Virtual
Machine) para cada sistema operativo en el que se ejecuta.
Solaris
Iris
Unix
Linux
HP/UX
OSF
Windows 95/98
Windows NT/2000/XP
OS/2
Macintosh
Los paquetes se usan también como un mecanismo para evitar conflictos entre
nombres: se puede tener dos clases con el mismo nombre pero en diferentes
paquetes.
UNIVERSIDAD C A T Ó L IC A d e l p er ú
Java es interpretado así que es muy lento para una aplicación seria en una
plataforma específica...
Si existe un compilador JIT una aplicación escrita en Java puede ser tan rápida
como cualquier otra.
p o n t i f ic ia UNIVERSIDAD C A T Ó L IC A d e l p er ú
Capítulo 2
Estructuras fundamentales
UNIVERSIDAD C A T Ó L IC A Da Pf.ftú
p o n t if ic ia UNIVERSIDAD C A T Ó L IC A del PERÚ
Java tiene 8 tipos primitivos de datos, de los cuales 6 son de tipo numérico (4 de
enteros y 2 de punto flotante), 1 es de tipo caracter y 1 de tipo lógico o booleano.
Enteros
Punto Flotante
Máximos y
Tipo Contenido Tamaño mínimos
aproximados
IEEE estándar de precisión ±3.4x1038 a
float 32 bits
simple ±1.4x10-45
IEEE estándar de precisión ±1.8x10308 a
double 64 bits
doble ±4.9x10'324
Caracter
Booleano
2. Literales
Literales Enteros
Por defecto los literales enteros se almacenan como tipo int (entero con signo de
32 bits). Para representar números mayores que 216 o menores que -216
(aproximadamente 2,000’000,000) se puede usar la extensión L (o I minúscula)
al final del número y en cualquiera de las bases disponibles, esto indicará un tipo
long (entero con signo de 64 bits). Ejemplos: 69L, 0x7f5a965l, 034L.
• Notación Estándar
• Notación Científica
Literales booleanos
Representan los valores lógicos de verdadero o falso. Para este efecto, Java
proporciona las palabras reservadas true y false, respectivamente.
Literales de un caracter
• Octal -* ’\ddd’
• Hexadecimal -» ’\udddd’
Ejemplo:
‘H’ = ‘\u0048’ = ‘\1 10’, dado que ocupa la posición 72 en la tabla Unicode.
JAVA Inicial INFOPUC
INSTITUTO DE INFORMATICA
p o n t i f ic ia UNIVERSIDAD C A T Ó L IC A d e l pf.RÚ
3. Identificadores y Variables
Identificadores
Es recomendable:
Ejemplos:
numero, matrizCuadrada, miPrimeraClase.
Variables
Java es un lenguaje fuertemente tipeado lo que significa que cada variable debe
tener un tipo declarado. Para declarar una variable se coloca en primer lugar el
tipo, seguido del nombre que la identificará.
Ejemplos:
int valorE n t e r o ;
float valorDecimal;
char chl,ch2;
4. Palabras clave
Las palabras clave (o keywords) son de uso exclusivo del sistema Java, por esta
razón no pueden ser utilizados como identificadores.
Palabras clave: abstract, assert, boolean, break, byte, case, catch, char, class,
const, continué, default, do, double, else, enum, extends, final, finally, float, for,
goto, if, implements, import, instanceof, int, interface, long, native, new, package,
prívate, protected, public, return, short, static, strictfp, super, switch,
synchronized, this, throw, throws, transient, try, void, volatile, y while.
true, false y nuil no son palabras clave, pero si son palabras reservadas, y
tampoco es posible usarlas como identificadores.
JAVA Inicial áÉ5 | <4x l y ^F INSTITUTO
IN F O PUC
D£ INFORMATICA
p o n t ir c ja UNIVERSIDAD C A T Ó L IC A d e l per ú
5. Comentarios
• La forma más común es utilizando //. Esto se usa para comentar un texto
a partir de // hasta el final de la línea.
Los operadores especifican una operación o evaluación sobre uno o más objetos
(datos u objetos) para generar un resultado.
Aritméticos y de conversión
De Comparación
n— Igual
!= Diferente
< Menor que
<= Menor o igual que
> Mayor que
>= Mayor o igual que
Lógicos
De Asignación
= Asignación
+= Suma y asigna
_=
Resta y asigna
* _
Multiplica y asigna
/= Divide y asigna
%= Módulo y asigna
&= Y lógico (AND) y asigna
1= 0 lógico inclusivo (OR) y asigna
A=
0 lógico exclusivo (XOR) y asigna
JAVA Inicia! INFOPUC
INSTITUTO D£ INFORMATICA
p o n t i f ic ia UNIVERSIDAD C A T Ó L IC A d e l p er ú
+ i & b & = i
- 1 1 i, f t= b
± ,£
‘ += I
í , f
★ i A
i, f < b A
-= |
i, f / i « i-,£ <= b && *=
i, f % i » í / f > b 1
/=
l, f ++ 1 » > í , £ >= b f %=
i, f __ b = &=
Tipos válidos de los operandos
i — i = Entero (byte, small, int, b f= i=
long)
i f = Punto Flotante (float, b ?:
A _
double’
b = Lógico (boolean)
7. Inicializaciones y asignaciones
Ejemplos:
int v a l o r ; //declaración
v a l o r = 50; //asignación
Ejemplo:
char letra = 'A'; //inicialización
PONTIFICIA UNIVERSIDAD C A T Ó L IC A d e l p er ú
int i = 100;
long I = (long)i;
long 12 = (long)200;
Java permite el casting de cualquier tipo primitivo en otro tipo primitivo, excepto
en el caso de los booleanos, en que no se permite casting alguno.
JAVA Inicial INFOPUC
IN STITUTO D6 INFORMATICA
9. Arreglos
Ejemplos:
int n ú m e r o s [];
char[] l e t r a s ;
Ejemplos:
c h a r c a r a c t e r A l f a b e t i c o [] = n e w c h a r [27];
int d í g i t o s = {0, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 } ;
Los arreglos tienen una variable denominada length, la cual guarda el número
de elementos que tiene el arreglo.
Ejemplo:
i n t [ ] n ú m e r o s = n e w i n t [10];
f o r (int i = 0 ; i < n u m e r o s .l e n g t h ; i + + )
números[i]=i;
En Java las cadenas son manejadas por la clase String. Incluso los literales tipo
cadena, son en realidad instancias de la clase String.
Ejemplo:
S t r i n g si = " C u r s o " ;
i n t 1 = s i . l e n g t h (); // l o n g i t u d = 5
Lv-,w0<c¿b i )
La concatenación de cadenas se realiza utilizando el operador +.
JAVA Inicial IN F O P U C
(NSTiTUTO D£ ¡NíFORMÁTiCA
Ejemplo: jOl
S t r i n g s2 = si + de i*
Cv
s2 += " J a v a . " ;
Ejemplo:
if (sl==s2) // c o m p a r a l a s r e f e r e n c i a s
i f (s i .e g u a l s ( s 2 )) // c o m p a r a e l c o n t e n i d o
í A » * 1' 0
11. Ámbitos o bloques
i?
tjh
Alcance y visibilidad
p o n t if ic ia UNIVERSIDAD C A T Ó L IC A d e l per ú
Separadores
{ }
Las llaves sirven para contener los valores de arreglos inicializados
automáticamente y para definir bloques de código para clases, métodos y
ámbitos locales. , ,, fut ce <^
T\
i 0í ^
El punto y coma separa sentencias. ^v
12. for
p o n t i f ic ia UNIVERSIDAD C A T Ó L IC A d e l p er ú
13. if-else
if (condición) {sentencias;}
else {sentencias;}
14. switch
ú&
switch (Expresión) { u ív ‘
case Constantel:
sentencias; *
break;
case Constante2:
sentencias;
break;
default:
sentencias;
}
JAVA Inicial INFOPUC
IN STITUTO DE INFORMATICA
switch (Expresión){
case constante 1: lista-de-sentencias (1)
Evaluación de la
Expresión
case constante2: lista de sentencias (2)
defauIt: lista-de-sentencias
lista de sentencias
( 1)
false
lista de sentencias
( 2)
false
lista de sentencias
(D)
Sin embargo es un error común olvidar que el flujo sigue “cayendo” una vez
ejecutado el case que resultó verdadero (es frecuente olvidar colocar un break a
cada case). Por este motivo es casi una convención que cuando no hay breaks,
se colocan comentarios “continúa” que informan que no es un error de omisión.
jí'* i0 -i
while (condición) { do {
sentencias; sentencias;
} } while (condición);
JAVA Inicial INFOPUC
IN STITUTO DE íNFORMATICA
p o n t ih c ia UNIVERSIDAD C A T Ó L IC A d e l per ú
while (ExpLogicaParaSeguir) do
sentencia; o bloque sentencia; o bloque
while (ExpLogicaParaSeguir)
break
etiquetal: {
etiqueta2: {
etiqueta3: {
// á m b i t o d e la e t i q u e t a 3
if (true)
break etiqueta2;
/ / s e n t e n c i a s a q u i n u n c a se e j e c u t a r í a n
}
/ / s e n t e n c i a s a q u í n u n c a se e j e c u t a r í a n
}
//el control pasa aquí luego del break
JAVA Inicial
PONTIFICIA
<► INFOPUC
INSTITUTO DE INFORMATICA
continué
continué label;
return a
return expresión;
La sentencia return hace que el control pase al objeto que invocó al método que
contiene la sentencia.
JAVA Inicial INFOPUC
INSTITUTO DE INFORMATICA
Capítulo 3
Objetos y clases
1 . Clase y objeto
2 . Persistencia
3. Encapsulamiento de la información
4. Herencia
5. Mensajes y comunicación entre objetos
6 . Polimorfismo
7. Ventajas de la POO
8 . Definición de una clase
9. Modificadores de clase
10. Constructores
11 .Variables de instancia
12. Métodos
13. Modificadores para miembros de clase
14. Métodos predefinidos
15. Unidades de compilación
16. Paquetes
17. Recolección de basura
18. El método finalize
19. Tipos enumerados
JAVA Inicial IN F O P U C
INSTITUTO DE INFORMÁTICA
p o n t ih c ia UNIVERSIDAD C A T Ó L IC A d e l p er ú
JAVA Inicial INFOPUC
tNSTITUTO DE INFORMATICA
‘'-'«''fe* — 'ff#
1. Clase y objeto
Se distingue de otros objetos de su misma clase por los valores de sus datos
que reflejan atributos y estados del comportamiento.
En todos los lenguajes 0 0 , cada clase tiene un método por el cual se pueden
crear (“a su imagen y semejanza”) instancias (objetos de esa clase).
Los objetos de software pueden servir para representar objetos del mundo real
así como para modelar objetos abstractos para resolución de problemas.
Cuando un objeto del mundo real es modelado como un objeto de software sus
propiedades son descritas por variables de instancia y su comportamiento es
especificado mediante métodos.
2. Persistencia
Tomando como ejemplo a una persona (“objeto del mundo real”) se puede
mencionar las siguientes características, nace (técnicamente se podría decir que
es creado por sus padres) y muere (técnicamente se podría decir que
funcionalmente es destruido).
Cuando mueren los padres de una persona, ésta sigue existiendo (trasciende la
muerte de su creador).
Un objeto tiene una duración, se crea y puede dejar de existir (se destruye). Del
mismo modo trasciende el tiempo dado que sigue existiendo a pesar que su
clase ya no exista más.
3. Encapsulamiento de la información
PO NTIH C IA UNIVERSIDAD C A T Ó L IC A d e l p er ú
Los objetos encapsulan datos que sólo pueden accesarse a través de métodos
que el consumidor de software debe invocar (con el protocolo o conjunto de
mensajes correspondientes) para obtener un servicio específico
("funcionalidad"). Entonces el consumidor debe conocer QUE hace cada
componente, dejando a nivel "interno" el COMO.
Los objetos pueden simular entes del mundo real implementándose como
bloques de software que encapsulan tanto datos como procesos.
Quien desarrolla puede hacer cambios a la implementación de una clase, sin que
esto lo noten los usuarios de la misma.
4. Herencia
Los objetos de una "clase" heredan características (datos y/o métodos) de clases
más generales.
En OOP la herencia está siempre implícita cuando se define una clase en base a
otra. En este caso, la primera será una subclase de la segunda (que será su
superclase).
Una clase puede ser tan abstracta que incluso nunca genere objetos (serán sus
subclases las que los generen).
JAVA Inicial
PONTIFICIA
♦ IN F O P U C
INSTITUTO DE INFORMÁTICA
El objeto emisor (más conocido como “cliente”) solicita algo (a veces llamado
“servicio”) a un objeto “servidor” quien provee dicho servicio a través del método
que se invocó en el mensaje.
6. Polimorfismo
Por lo tanto en una misma clase puede existir más de una implementación de un
mismo método. Las diferentes implementaciones del método tendrán el mismo
nombre pero no la misma especificación.
Cualquier objeto que llame al método, ni siquiera tiene que saber qué subclase
ejecutará el método, simplemente deberá invocarlo.
7. Ventajas de la POO
Objetivismo (Simulación):
• Riqueza y precisión en la documentación de Análisis y Diseño.
• Mejor comunicación entre técnicos y usuarios.
Ocultamiento - Encapsulamiento:
• Mayor velocidad en la creación de software.
• Minimización de fallas: CALIDAD.
JAVA Inicial
p o n t i f ic ia
♦ INFOPUC
INSTITUTO DE INFORMÁTICA
UNIVERSIDAD C A T Ó L IC A d e l per ú
Sintaxis:
class IdentificadorDeClase {
cuerpo-de-la-clase
}
Sintaxis:
IdentificadorDeClase IdentificadorVariableReferencia;
Creación de instancias
Para crear un objeto de una clase y tener una variable de referencia asociada al
objeto se usa el operador new.
Sintaxis:
IdentDeClase IdentVarReferencia = new ldentDeClase();
9. Modificadores de clase
Por omisión una clase es visible a todas las demás que se encuentren en el
mismo paquete.
Si se requiere que una clase sea visible fuera del paquete donde pertenece,
debe especificarse el modificador public en la declaración de la clase.
Sintaxis:
public class IdentificadorDeLaClase { . . . }
JAVA Inicial INFOPUC
IN STITUTO DE INFORMATICA
p o n t ih c ia UNIVERSIDAD C A T Ó L IC A d e l per ú
El modificador final en una clase especifica que ésta no pueda extenderse, esto
es que no puede tener subclases.
10. Constructores
UNIVERSIDAD C A T Ó L IC A d e l p er ú
Las variables de instancia se declaran dentro del bloque principal (entre las
llaves de apertura y cierre de la declaración de la clase).
12. Métodos
Sintaxis:
Modificadores de acceso
public
Especifica que las variables y métodos de una clase podrán ser accedidas por
todos los objetos, aunque sean de clases de otros paquetes diferentes al de la
clase.
protected
Especifica que las variables y métodos de una clase podrán ser accedidas,
además de los métodos de la misma clase, por los métodos de todas las clases
del mismo paquete y por las subclases de ésta aunque no se encuentren en el
mismo paquete.
,*2¡¡¡§tev
JAVA Inicial ¿TV INFOPUC
IN STITUTO DE iNFORMATICA
prívate
Especifica que las variables y métodos de una clase podrán ser accedidas sólo
por los métodos de la misma clase.
entonces
Si un miembro tiene el acceso modficado a :
1
podrá ser accedido por métodos de: public protected private
(omitido)
la misma clase SI SI SI
SI
subclases del mismo paquete SI -
SI SI
otras clases del mismo paquete SI SI SI -
Sintaxis:
static tipo identificadorDeVariable;
Por omisión (sin modificador), cada objeto (instancia de clase) reserva memoria
para sus variables de instancia cuando es creado; por cada nuevo objeto,
nuevos espacios de memoria son reservados. Las variables estáticas reservan
un sólo espacio independientemente de cuántas instancias de la clase se hayan
creado o vayan a crearse y son comunes a todas las instancias de la clase. Es
por esto que también se les conoce como variables de clase.
PO NTIH C IA UNIVERSIDAD C A T Ó L IC A d e l p er ú
Los métodos de una clase son generalmente invocados para actuar sobre una
instancia determinada de esa clase; esto es, para que modifiquen las variables
de instancia de una instancia en particular.
Al igual que una variable de clase puede ser accedida sin que exista una
instancia, un método estático o método de clase, puede ser invocado sin
necesidad que existan instancias.
El modificador static podría verse como la forma con que Java permite definir
tanto variables como funciones globales.
En este aspecto Java tiene una ventaja sobre el código de biblioteca y variables
globales de C/C++; y es que las clases contienen el ámbito de los identificadores
y así se evitan colisiones. C permite que se vuelvan a definir funciones de
biblioteca del sistema pues todas las funciones ocupan el mismo espacio de
nombres.
Con el modificador final se especifica que una variable tiene un valor constante
(su valor no puede ser modificado) o que un método tiene una implementación
constante, esto es que no puede ser sobreescrito por subclase alguna.
Al igual que en el caso de variables static, las variables final no ocupan espacio
para cada instancia.
Una vez inicializadas, el valor de las variables modificadas con final no puede ser
alterado. Una trasgresión a lo anterior causa un error de compilación.
main()
clone()
El método clone() crea un clon del objeto que invoca al método, creándole un
espacio de memoria y asignando a este los valores correspondientes al objeto
“clonado”.
toString()
Hay que tener en cuenta que se generará un archivo .class por cada archivo
.java, razón por la cual sólo puede existir una clase pública en el archivo .java.
Tanto el archivo .java como el .class tendrán como nombre aquel que identifica a
dicha clase pública.
Directorios
Los nombres de paquetes Java son “traducidos” a una ruta del sistema donde
residen, teniendo en cuenta el operador (que en este caso actúa de separador)
punto.
JAVA Inicial ►
INFOPUC
INSTITUTO DE INFORMÁTICA
16. Paquetes
Sintaxis:
package ldentificadorDelPaquete[.paq2[...] ];
Los paquetes no sólo sirven para facilitar la organización de las clases, sino
también para el manejo de las mismas durante compilación, donde se requerirán
muchas clases de locaciones diferentes. En compilación Java encuentra los
correspondientes archivos en bytecode y los pone disponibles para el programa
que se desea compilar.
Referencia explícita:
Paquete.subpaquete.Clase.Miembro
El inconveniente es que debe colocarse toda la referencia cada vez que desee
usarse un miembro o clase.
Importación de paquetes
Sintaxis:
import IdentificadorDeLaClaseOPaqueteAImportar;
import Paquete.subpaquete.*
Teniendo en cuenta que no puede usarse * para importar todos los subpaquetes
JAVA Inicial INFOPUC
INSTITUTO D£ ¡NrORMÁTICA
Los objetos no son recogidos por el colector de basura mientras haya por lo
menos una referencia a ellos.
Java permite añadir un método finalize() a cualquier clase. Este método será
llamado antes que el colector de basura elimine al objeto. En la práctica no nos
podemos confiar del método finalize() para reciclar cualquier recurso dado que
no se sabe con certeza en que momento este método será llamado.
p o n t i f ic ia UNIVERSIDAD C A T Ó L IC A d e l per ú
Los tipos enumerados son una nueva "especie" de tipos (como los tipos clase y
los tipos interface) del lenguaje que se caracterizan por tener un número finito y
normalmente bajo de posibles valores.
Ejemplo:
public enum NotasMusicales { DO,RE,MI,FA,SOL,LA,SI};
Valores enumerados
Los valores enumerados son los valores que puede tomar el tipo enumerado.
Conceptualmente son constantes del lenguaje. Normalmente se definen con
letras mayúsculas y se accede a ellos de esta forma:
NombreTipoEnum.NOMBRE_VALOR
Ejemplo:
NotasMusicales notaActual = NotasMusicales.FA;
Los tipos enumerados en el fondo son clases. Unas clases muy especiales y con
un comportamiento limitado en algunos aspectos. Algunas particularidades
importantes de los tipos enumerados son:
Capítulo 4
Herencia,
Clases internas,
Interfaces y
Colecciones
PONTIFICIA UNIVERSIDAD C A T Ó L IC A d e l p er ú
va S S s
p o n t if ic ia UNIVERSIDAD C A T Ó L IC A d e l per ú
Definición, Sintaxis
Sintaxis:
class IdentificadorDeClase extends IdentificadorDeSuperclase {
cuerpo-de-la-clase;
}
Una clase hereda desde su inmediata super clase todas las declaraciones de los
campos en el ámbito de la superclase, excepto:
Herencia Simple
this
La palabra reservada this se usa para referenciar al objeto del instante de la
invocación.
Sintaxis:
this.miembro
super
La palabra reservada super se usa para referenciar a la superclase de la clase
del momento.
Sintaxis:
super.miembro
this hace referencia al objeto del momento como una instancia de la clase del
momento.
super hace referencia al objeto del momento pero como una instancia de la
superclase de la clase del momento.
JAVA Inicial
p o n t i f ic ia
%!► INFOPUC
INSTITUTO DE ¡N-FORMATICA
Upcasting
Downcasting
Base
void f ( )
En el caso de upcasting, vimos que se void g ( )
pierde la información del tipo específico.
Upcast Downcast
Para el caso de downcasting, la clase
Subclase
base no puede ser mas grande que su
vold fO
clase derivada. Por ejemplo, no se sabe void g ( )
realmente si un instrumento es void u ( )
actualmente una guitarra, podría ser otra void v o
void w()
subclase, por ejemplo, batería o
trompeta.
La palabra clave instanceof nos sirve para indicar si un objeto es una instancia
de un tipo particular. Devuelve un boolean para que usarlo en la forma de una
pregunta, así:
En este ejemplo se verifica si el objeto “x” pertenece a la clase Clase antes hacer
casting del objeto “x” a Clase. Es importante usar instanceof antes de aplicar el
downcasting al objeto cuando no se tiene otra información que le indique el tipo
de objeto; en caso contrario, se terminará en un ClassCastException.
JAVA Inicial INFOPUC
INSTITUTO OS INFORMATICA
p o n t i f ic ia UNIVERSIDAD C A T Ó L IC A d e l p er ú
Una clase abstracta está compuesta de uno o más métodos abstractos, los que
son declarados pero no implementados: No tienen cuerpo, pues las
implementaciones se encuentran en (son responsabilidad de) las subclases.
Puede tener también métodos no abstractos, los que serían comunes para sus
subclases.
Bastará que una clase contenga un método abstracto para que tenga que ser
declarada también abstracta. Generalmente se requieren por conveniencia en el
diseño de aplicaciones.
Restricciones:
Cualquier subclase de una clase abstract debe implementar todos los métodos
abstract de la misma o en todo caso declararlos también como abstract.
PONTIFICIA UNIVERSIDAD C A T Ó L IC A d e l p er ú
IdentificadorDeObjeto.Miembro
Para estos casos y con el fin de resolver esta situación, donde dos clases
presentan iguales identificadores para sus miembros, Java provee las facilidades
de referencia this y super.
p o n t ih c ia UNIVERSIDAD C A T Ó L IC A d e l per ú
La clase C es subclase de A.
En caso que el tipo con el que se declara una variable de referencia no tiene un
método, se irá “barriendo” el árbol de herencia hacia las superclases hasta
llamar al método contenido en una clase a la que se extendió.
6. La superclase Object
El método equals()
public boolean equals( Object o b j );
JAVA Inicial INFOPUC
IN STITUTO DE INFORMATICA
PONTIFICIA UNIVERSIDAD C A T Ó L IC A c
Todas las clases que se definan en Java heredarán el método equals(), que se
puede utilizar para comparar dos objetos. Esta comparación no es la misma que
proporciona el operador ==, que solamente compara si dos referencias a objetos
apuntan al mismo objeto.
El método equals() se utiliza para saber si dos objetos separados son del mismo
tipo y contienen los mismos datos. El método devuelve true si los objetos son
iguales y false en caso contrario.
Java ya sabe de antemano cómo aplicar el método a todas las clases estándar y
a todos los objetos de los que el compilador tiene conocimiento. Por ejemplo, se
puede usar directamente para saber si dos objetos String son iguales.
Hay que observar que en la lista de argumentos del método equals() hay que
pasarle un argumento de tipo Object. Si se define un método con un argumento
de tipo diferente, se estará sobrecargando el método, no sobreescribiéndolo.
El método toString()
public String toString();
La clase Object dispone de este método que puede usarse para convertir todos
los objetos conocidos por el compilador a algún tipo de representación de
cadena de caracteres, que dependerá del objeto.
Otros Métodos
UNIVERSIDAD C A T Ó L IC A d e l per ú
7. Clases internas
Definición.
La relación de una clase interna respecto a la clase externa que la contiene es:
La clase Interna “pertenece a” la clase Externa.
Los modificadores de acceso válidos para la clase interna son: public, protected,
package and prívate.
Una clase interna implica un relación entre las clases interna y externa. Una
instancia de una clase interna es asociada con una instancia de su inmediata
clase externa.
clase Externa{
prívate Date fecha;
private int cant;
class lnterna{
prívate int cant;
prívate Date método(){
int incantidad = cant; // o this.cant, Interna.cant, lnterna.this.cant
int excantidad = Externa.cant; // o Externa.this.cant
return fecha; // o this.fecha, Externa.fecha, Externa.this.fecha
}
}
}
Las clases internas estáticas son utilizadas para el manejo de métodos, sin
necesidad de instanciar la clase interna.