Explora Libros electrónicos
Categorías
Explora Audiolibros
Categorías
Explora Revistas
Categorías
Explora Documentos
Categorías
NDICE
PRLOGO............................................................................................................ 21
RA-MA
Secuencias de escape........................................................................................... 56
Tipos de datos Primitivos .................................................................................... 57
Variables.............................................................................................................. 58
Tipos de datos de una variable ........................................................................ 59
Declaracin de variables.................................................................................. 60
Asignacin....................................................................................................... 61
Literales ........................................................................................................... 61
mbito de las variables ................................................................................... 62
Valores por defecto de una variable ................................................................ 64
Conversiones de tipo ....................................................................................... 64
Conversiones implcitas............................................................................... 65
Conversiones explcitas ............................................................................... 66
Constantes ....................................................................................................... 67
Operadores........................................................................................................... 67
Aritmticos ...................................................................................................... 67
Asignacin....................................................................................................... 69
Asignacin de referencias y asignacin de valores ..................................... 70
Condicionales .................................................................................................. 72
Comparacin de tipos bsicos ..................................................................... 72
Igualdad de objetos...................................................................................... 73
Lgicos ............................................................................................................ 74
Operadores a nivel de bits ............................................................................... 75
Operador instanceof......................................................................................... 76
Operador condicional ...................................................................................... 77
El recolector de basura de Java............................................................................ 77
Instrucciones de control....................................................................................... 78
Instruccin if.................................................................................................... 79
La instruccin switch ....................................................................................... 80
La instruccin for ............................................................................................ 82
La instruccin while ........................................................................................ 83
Salida forzada de un bucle............................................................................... 84
break ............................................................................................................ 85
continue ....................................................................................................... 85
Arrays .................................................................................................................. 86
Declaracin...................................................................................................... 86
Dimensionado de un array............................................................................... 87
Acceso a los elementos de un array................................................................. 87
Paso de un array como argumento de llamada a un mtodo............................ 89
Array como tipo de devolucin de un mtodo................................................. 90
Recorrido de arrays con for-each .................................................................... 91
Arrays multidimensionales .............................................................................. 93
Recorrido de un array multidimensional ..................................................... 94
Arrays multidimensionales irregulares ........................................................ 94
RA-MA
NDICE 9
Tipos enumerados................................................................................................ 95
Definicin de un tipo enumerado .................................................................... 97
Clases de enumeracin .................................................................................... 98
Constructores y mtodos de una enumeracin ................................................ 99
Constructores............................................................................................... 99
Mtodos ..................................................................................................... 100
Mtodos con nmero variable de Argumentos.................................................. 101
Cuestiones de autoevaluacin............................................................................ 103
Listado de las prcticas...................................................................................... 105
PRCTICA 2.1 ............................................................................................. 105
PRCTICA 2.2 ............................................................................................. 107
CAPTULO 3. CLASES DE USO GENERAL ................................................ 109
Organizacin de clases: los paquetes................................................................. 110
Ventajas de la utilizacin de paquetes........................................................... 111
Importar clases y paquetes de clases ............................................................. 111
Paquetes de uso general................................................................................. 112
La especificacin del API J2SE..................................................................... 113
Gestin de cadenas: la clase String.................................................................... 115
Creacin de objetos String............................................................................. 115
Inmutabilidad de objetos String..................................................................... 116
Principales mtodos de la clase String .......................................................... 117
La clase Math .................................................................................................... 120
Constantes pblicas ....................................................................................... 120
Mtodos ......................................................................................................... 120
Importaciones estticas.................................................................................. 122
Utilizacin de fechas ......................................................................................... 122
La clase Date ................................................................................................. 123
La clase Calendar .......................................................................................... 124
Creacin de un objeto Calendar................................................................. 124
Mtodos de la clase Calendar .................................................................... 125
Clases de envoltorio .......................................................................................... 126
Encapsulamiento de un tipo bsico ............................................................... 127
Conversin de cadena a tipo numrico.......................................................... 127
Autoboxing .................................................................................................... 128
Entrada y salida en Java .................................................................................... 129
Salida de datos............................................................................................... 130
Salida con formato......................................................................................... 131
El mtodo printf() ...................................................................................... 131
Sintaxis de la cadena de formato ............................................................... 131
Entrada de datos ............................................................................................ 134
Scanners......................................................................................................... 137
Creacin de un objeto scanner................................................................... 137
RA-MA
RA-MA
NDICE 11
RA-MA
RA-MA
NDICE 13
RA-MA
RA-MA
NDICE 15
RA-MA
Modificadores................................................................................................ 438
Clases annimas ................................................................................................ 439
Definicin de una clase annima................................................................... 439
Clase annima como argumento de mtodo.................................................. 441
Clases internas estticas .................................................................................... 442
Instanciacin de la clase interna .................................................................... 442
CAPTULO 11. OBJETIVOS DEL EXAMEN JAVA SUN CERTIFIED
PROGRAMMER 310-055.............................................................................. 445
Objetivo 1: declaracin, inicializacin y mbito ............................................... 446
Declaraciones de elementos........................................................................... 446
Declaracin de una clase ........................................................................... 446
Declaracin de una interfaz ....................................................................... 448
Declaracin de una enumeracin............................................................... 449
Herencia de una clase abstracta ..................................................................... 450
Implementacin y herencia de una interfaz ................................................... 450
Palabras reservadas e identificadores ............................................................ 451
Variables y tipos de datos.............................................................................. 452
Tipos de datos............................................................................................ 452
Variables.................................................................................................... 453
Declaracin, construccin e inicializacin de arrays..................................... 454
Declaracin................................................................................................ 455
Construccin.............................................................................................. 455
Inicializacin ............................................................................................. 456
Array annimo........................................................................................... 456
Asignaciones de referencias a array .......................................................... 457
Utilizacin de variables de array no inicializadas ..................................... 457
Declaracin y utilizacin de mtodos............................................................ 458
Declaracin de un mtodo ......................................................................... 458
Mtodos estticos ...................................................................................... 459
Mtodos en clases JavaBeans .................................................................... 459
Mtodos con nmero variable de argumentos ........................................... 460
Sobrescritura y sobrecarga de mtodos ......................................................... 461
Definicin y utilizacin de constructores ...................................................... 464
Objetivo 2: control de flujo ............................................................................... 466
Utilizacin de las instrucciones if y switch.................................................... 466
Instruccin if..else...................................................................................... 467
switch......................................................................................................... 467
Utilizacin de bucles ..................................................................................... 470
while .......................................................................................................... 470
for .............................................................................................................. 470
for-each ..................................................................................................... 471
Uso de break y continue ............................................................................ 472
RA-MA
NDICE 17
RA-MA
Comodines..................................................................................................... 509
Mtodos genricos......................................................................................... 512
Otras peculiaridades sobre genricos ............................................................ 513
Uso de instanceof con genricos ............................................................... 514
Genricos y arrays ..................................................................................... 514
Colecciones genricas y no genricas ....................................................... 515
Ordenacin de arrays y colecciones de objetos ............................................. 516
Las interfaces Comparable y Comparator ................................................. 516
Ordenacin de una coleccin..................................................................... 519
Ordenacin de un array de objetos ............................................................ 521
Bsqueda de objetos en un array/coleccin................................................... 522
Conversin de array a coleccin y de coleccin a array................................ 524
Objetivo 7: fundamentos ................................................................................... 526
Uso de los modificadores de acceso .............................................................. 527
Argumentos de la lnea de comandos ............................................................ 527
Paso de referencias a objetos y tipos primitivos a mtodos........................... 528
El Recolector de Basura ................................................................................ 529
Comportamiento del recolector de basura ................................................. 529
Situaciones que provocan la recoleccin de un objeto .............................. 529
Reconocer en qu punto un objeto es elegido para recoleccin ................ 531
Requerir la ejecucin del recolector .......................................................... 532
El mtodo finalize() ................................................................................... 532
Organizacin y distribucin de clases ........................................................... 533
Ficheros JAR ............................................................................................. 533
Utilizacin de classpath ............................................................................. 534
Utilizacin de operadores .............................................................................. 537
Operadores de asignacin.......................................................................... 537
Operadores aritmticos .............................................................................. 539
Operadores relacionales............................................................................. 539
Operador instanceof................................................................................... 540
Operadores lgicos .................................................................................... 542
Igualdad de objetos.................................................................................... 543
APNDICES .............................................................................................545
A. CLASES PARA LA CREACIN DE
APLICACIONES GRFICAS...................................................................... 547
AWT.................................................................................................................. 547
Component .................................................................................................... 547
Mtodos destacables .................................................................................. 547
Container ....................................................................................................... 548
Mtodos destacables .................................................................................. 548
Window ......................................................................................................... 549
RA-MA
NDICE 19
Frame............................................................................................................. 549
Button ............................................................................................................ 550
Label .............................................................................................................. 550
TextComponent ............................................................................................. 551
TextField ....................................................................................................... 552
TextArea ........................................................................................................ 552
Ckeckbox....................................................................................................... 553
CheckboxGroup............................................................................................. 555
List................................................................................................................. 555
Choice............................................................................................................ 556
Panel .............................................................................................................. 557
Swing................................................................................................................. 557
JComponent................................................................................................... 557
AbstractButton............................................................................................... 557
JFrame ........................................................................................................... 558
JLabel ............................................................................................................ 559
JTextField ...................................................................................................... 559
JButton........................................................................................................... 560
JRadioButton ................................................................................................. 561
ButtonGroup .................................................................................................. 561
JCheckBox..................................................................................................... 562
B. JAVA 6 ............................................................................................................ 563
Nuevas capacidades del API Java Swing .......................................................... 564
El API Desktop.................................................................................................. 564
Nuevas caractersticas de seguridad .................................................................. 565
Establecimiento de permisos en ficheros y directorios...................................... 566
Actualizacin a JDBC 4.0 ................................................................................. 566
C. SOLUCIN A LAS CUESTIONES DE
AUTOEVALUACIN ................................................................................... 569
D. PREGUNTAS TIPO DE EXAMEN............................................................. 579
NDICE ALFABTICO .................................................................................... 617
PRLOGO
A da de hoy, el nmero de libros publicados en castellano sobre Java es
enormemente extenso. En este escenario cabe pues preguntarse qu tiene de
particular el presente libro.
Programador Java 2 Certificado no pretende ser una especie de Biblia de
Java, ms bien lo que puede distinguir a este libro de otros es su particular enfoque
didctico.
Consciente de la dificultad que entraa el aprendizaje de un lenguaje de
programacin como Java a travs de un manual, he utilizado mis siete aos de
experiencia en la enseanza de este lenguaje para intentar plasmar los conceptos de
una forma sencilla, clara y encadenada, procurando seguir un orden lgico en las
explicaciones que evitase en lo posible los saltos hacia adelante y hacia atrs en la
exposicin de los temas. Cada tema o concepto que se explica viene adems
acompaado de un ejemplo prctico para ayudar a su comprensin.
A lo anterior se debe aadir el hecho de que ste es de los pocos libros de
Java en castellano, orientados a la obtencin de la Certificacin Java Sun.
OBJETIVOS
El objetivo de este libro es conseguir que el lector adquiera un profundo
conocimiento del lenguaje Java, proporcionndole al mismo tiempo la ayuda
RA-MA
A QUIN VA DIRIGIDO
Este libro est dirigido a programadores en cualquier lenguaje que, sin
tener conocimientos de Java, quieran adentrarse en este lenguaje de programacin
y adquirir una slida formacin sobre el mismo.
Tambin aquellos programadores Java que quieran obtener la Certificacin
pueden encontrar este libro como una til herramienta para la preparacin del
examen. En l se exponen algunos conceptos que son desconocidos por los
programadores, debido a que su uso pasa mucha veces desapercibido en el
desarrollo cotidiano de las aplicaciones, pero que son de gran importancia para la
consecucin del examen.
RA-MA
PROLOGO 23
Parte I
Engloba los captulos comprendidos entre el 1 y el 9. El captulo 1 nos
introduce las caractersticas de la tecnologa Java y nos proporciona la base
necesaria para comenzar a crear programas en Java, lenguaje cuyos elementos
sintcticos son analizados en el captulo 2.
El captulo 3 presenta las clases de uso general ms importantes incluidas
en la plataforma, mientras que el captulo 4 se dedica al estudio de uno de los
pilares bsicos de la programacin Java: la programacin orientada a objetos. En el
captulo 5 se analiza el mecanismo de excepciones Java como medio para capturar
y tratar errores provocados por la aplicacin durante la ejecucin de la misma.
Tras el estudio de la sintaxis del lenguaje y los elementos de soporte, los
captulos 6, 7 y 8 se centran en el empleo de Java en dos importantes reas del
desarrollo, stas son el acceso a datos y la creacin de entornos grficos.
Finalmente, el captulo 9 est dedicado a la creacin de aplicaciones
multitarea que es uno de los aspectos ms potentes, y a la vez complejos, que nos
ofrece Java.
Parte II
Esta parte consta de los captulos 10 y 11. Por un lado, el captulo 10 nos
adentra en uno de los aspectos ms extravagantes de la programacin Java: las
clases anidadas. Se trata de un modelo de programacin cada vez menos utilizado
en el desarrollo de aplicaciones, sin embargo, gran parte de las cuestiones de
examen utilizan esta estructura sintctica.
El captulo 11 se centra en realizar una revisin exhaustiva de cada uno de
los puntos que componen los objetivos del exmen de certificacin 310-055,
llamando la atencin del lector sobre aquellos aspectos especialmente relevantes de
cara a la correcta resolucin de las cuestiones que en ellos se plantean. Este
examen corresponde a la certificacin de Programador Java Sun, centrada en el
conocimiento del lenguaje y las libreras de uso general.
RA-MA
Apndices
Adems de los 11 captulos comentados, el libro incluye cuatro apndices.
El apndice A contiene un resumen de las clases AWT y swing ms utilizadas en el
desarrollo de aplicaciones basadas en entorno grfico. En el apndice B se
enumeran las caractersticas ms importantes de la ltima versin de Java: J2SE
6.0. Por otro lado, el apndice C contiene las respuestas a las cuestiones de
autoevaluacin propuestas al final de cada captulo. Finalmente, el apndice D
incluye una simulacin del examen 310-055, con preguntas tipo que pueden ser
planteadas en dicha prueba.
Si desea obtener ms informacin sobre los programas de certificacin
Java de Sun puede consultar la pgina Web:
http://www.sun.com/training/certification/java/index.html
CD-ROM
Con el libro se incluye un CD-ROM con todas las prcticas desarrolladas
en los distintos captulos del mismo. Estas prcticas han sido creadas con el
entorno de desarrollo NetBeans 5.5 y pueden ser ejecutadas tanto con la versin
J2SE 5.0 como con la 6.0.
En el caso de que el lector disponga de un IDE distinto a NetBeans puede
utilizar los cdigos fuente de las clases que se encuentran en el subdirectorio \src
de cada prctica.
Espero que este libro resulte de utilidad al lector y le ayude, tanto a la
comprensin del lenguaje Java como a la superacin del examen de certificacin.
Si desea realizar algn comentario u observacin puede contactar con el autor a
travs de la siguiente direccin de correo:
ajms66@hotmail.com
P
A
R
T
E
PROGRAMACIN
EN
JAVA
CAPTULO 1
INTRODUCCIN A JAVA
Sun Microsystems, la empresa propietaria de Java, no imagin en 1991,
ao en que se desarroll la primera versin del lenguaje, que unos diez aos
despus, ste se iba a convertir en el lenguaje de programacin ms utilizado por la
comunidad mundial de desarrolladores y, mucho menos, que la mayora de los
grandes fabricantes de software del momento IBM, Oracle, Borland, BEA, etc.,
desarrollaran sus productos para, de alguna u otra manera, dar soporte al lenguaje
Java.
Java es, sin duda alguna, el lenguaje de programacin que ms impacto ha
tenido en los ltimos aos, especialmente en el mundo de desarrollo para la Web.
Probablemente, Internet no sera la que es hoy sin la existencia de Java.
Pero la expansin de Java, lejos de detenerse, va en aumento, pues no slo
es el referente en el desarrollo de aplicaciones Web, sino que tambin tiende a
imponerse en los grandes retos que tiene la programacin para el futuro, como son
los Servicios Web o la programacin para dispositivos electrnicos.
Esta especie de Revolucin del mundo Software que Java ha provocado
hace que uno llegue a preguntarse, qu tiene Java que no tengan los dems
lenguajes de programacin? Como lenguaje de programacin, Java no se diferencia
mucho del resto de los lenguajes orientados a objetos, sin embargo, Java es algo
ms que un lenguaje y posee una serie de caractersticas que lo hacen especial.
RA-MA
CARACTERSTICAS DE JAVA
He aqu los principales puntos en los que se apoya la tecnologa Java:
RA-MA
Fig. 1.
RA-MA
EDICIONES JAVA
Una de las caractersticas de Java indicadas anteriormente es el hecho de
disponer de un amplio conjunto de paquetes (libreras) de clases para la realizacin
de las aplicaciones. Todo este compendio de clases se organiza en tres grandes
grupos, conocidos como ediciones Java (figura 2).
Fig. 2.
Ediciones Java
RA-MA
Fig. 3.
RA-MA
Como vemos, por defecto aparece la ltima versin del JDK lanzada por
Sun, actualmente se trata de la versin JDK 6. sta no incorpora ninguna novedad
en la sintaxis del lenguaje respecto a la versin anterior JDK 5, tan slo algunas
mejoras en determinadas API especficas de Java estndar, alguna de las cuales
ser comentada en los captulos dedicados a las interfaces grficas y el acceso a
datos. As pues, aunque este libro se basa en la versin 6, todo lo aqu explicado en
lo que a sintaxis del lenguaje se refiere es igualmente aplicable para la versin 5;
incluso, para aquellos lectores que utilicen versiones de Java estndar anteriores a
sta, como la 1.4, se indicar explcitamente qu caractersticas del lenguaje han
sido incorporadas a partir de la versin 5 y, por tanto, no estn presentes en las
anteriores.
Adems del JDK, esta pgina nos ofrece otras opciones de descarga que
son:
JDK 6 with Java EE. Permite descargar, adems del Java estndar,
las liberas del J2EE
RA-MA
Fig. 4.
RA-MA
D ire c to rio d e
in s ta la c i n
Fig. 5.
RA-MA
Fig. 6.
RA-MA
Fig. 7.
Fig. 8.
RA-MA
CODIFICACIN
Utilizando cualquier editor de texto, por ejemplo el bloc de notas,
procedemos a escribir el cdigo mostrado en la figura 9. Hay que tener en cuenta
que Java hace distincin entre maysculas y minsculas, por lo que hay que
codificarlo tal cual se muestra.
Fig. 9.
Fig. 10.
RA-MA
COMPILACIN
La compilacin de un archivo de cdigo fuente .java se realiza a travs del
comando javac.exe del JDK. Si se ha establecido correctamente la variable de
entorno PATH, javac podr ser invocado desde el directorio en el que se encuentre
el archivo .java (figura 11). Tras ejecutar este comando, se generarn tantos
archivos .class como clases existan en el cdigo fuente, en este ejemplo se crear
solamente el archivo Saludo.class.
Fig. 11.
RA-MA
Fig. 12.
EJECUCIN
Para ejecutar el programa, utilizaremos el comando java.exe, seguido del
nombre de la clase que contiene el mtodo main(), en nuestro caso ser Saludo, que
es la nica clase existente. Es necesario que la variable de entorno CLASSPATH
est correctamente configurada e incluya el carcter . (Directorio actual) en la
lista de direcciones, lo que permitir invocar al comando java desde el directorio en
el que se encuentra el .class (figura 13).
Fig. 13.
RA-MA
Fig. 14.
Fig. 15.
RA-MA
Fig. 16.
RA-MA
La escritura de cdigo tambin resulta una tarea sencilla con un IDE. Estos
suelen contar con un editor de cdigo que resalta las palabras reservadas del
lenguaje para distinguirlas del resto del cdigo, algunos incluso permiten la auto
escritura de instrucciones utilizando la tcnica Intellisense, que consiste en mostrar
la lista completa de mtodos de un objeto segn se escribe la referencia al mismo
(figura 17).
Fig. 17.
Fabricante
Ms info.
NetBeans
Sun Microsystem
http://www.netbeans.org/downloads/index.html
Jbuilder
Borland
http://www.borland.com/us/products/jbuilder/index.html
Jdeveloper
Oracle
http://www.oracle.com/technology/products/jdev/index.html
Eclipse
Eclipse Foundation
http://www.eclipse.org/downloads/index.php
Fig. 18.
RA-MA
NetBeans 5.5
Jbuilder 2005
Fig. 19.
Objetos
Desde el punto de vista de la programacin, un objeto es una especie de
caja negra (figura 20) que expone una serie de operaciones (mtodos) que
pueden ser utilizados por otros programas para la realizacin de tareas mayores, de
la misma forma que en el mundo real un objeto de tipo televisin expone los
RA-MA
O b je to
m to d o 1
----------
C d ig o
m to d o
m to d o 2
----------
C d ig o
m to d o
----------
C d ig o
m to d o
:
m to d o n
Fig. 20.
Para poder invocar a los mtodos de un objeto desde fuera del mismo es
necesario disponer de la referencia al objeto. Normalmente, sta se guarda una
variable que a travs del operador . permite hacer la llamada a los mtodos del
objeto de la forma indicada en la figura 21.
referenciaobjeto.metodo1();
referenciaobjeto.metodo2(argumento1, argumento2,..);
referenciatelevision.encender();
referenciatelevision.ajustarvolumen("subir", 2);
Fig. 21.
RA-MA
Clases
Las clases contienen la definicin de los objetos, dicho de otra manera, una
clase es el lugar en el que se codifican los mtodos que van a exponer los objetos
de esa clase. Siguiendo con el smil de la televisin, una marca y modelo de
televisor sera la clase (cada modelo de televisor define sus propios mtodos),
mientras que un televisor concreto de esa marca y modelo sera el objeto.
En Java una clase se define de la forma indicada en la figura 22.
[public] class Nombreclase
{
//Declaracin de campos o atributos
//Definicin de mtodos
}
Fig. 22.
RA-MA
Fig. 23.
Mtodos y campos
Los mtodos definen el comportamiento de los objetos de una clase, estos
mtodos pueden hacer uso de campos o atributos para almacenar informacin
sobre el objeto, informacin que puede ser utilizada posteriormente por cualquiera
de los mtodos del objeto. Por ejemplo, la clase TelevisorSony debera tener un
campo volumen donde almacenar el volumen actual del televisor, de este modo, el
mtodo ajustarvolumen() podr usar este campo para mantener actualizado en cada
momento el volumen del televisor.
En Java, los mtodos de una clase se implementan mediante funciones y
los campos mediante variables, la sintaxis se indica en la figura 24. Donde la
palabra tipo, representa un tipo de dato vlido en Java y puede ser un tipo de dato
primitivo (los trataremos con detalle en el prximo captulo) o un tipo objeto y
debe ser utilizado para indicar el tipo de dato de los campos, los parmetros de
mtodos y valor de devolucin de stos.
Como hemos comentado, los mtodos de una clase Java pueden recibir
determinados datos (argumentos) en la llamada. Los valores recibidos por el
mtodo se declaran en la cabecera de ste como parmetros de llamada. La
declaracin de parmetros de un mtodo sigue el formato de la declaracin de
variables en Java.
RA-MA
Parmetros de llamada
Fig. 24.
objeto.metodo(argumento1, argumento2)
:
Declaracin
del mtodo
Fig. 25.
RA-MA
RA-MA
T e le v is o r S o n y . o b t e n e r p r e c io ( ) ;
Fig. 26.
RA-MA
Fig. 27.
A diferencia de los campos estndar, que suelen ser privados para uso
interno de la clase, los campos estticos deben llevar un modificador de acceso que
permita su uso desde el exterior de la misma, ste puede ser public, protected o
ninguno (como en la figura 27).
La implementacin de un mtodo esttico impone una serie de
restricciones en el cdigo que deben ser tenidas en cuenta:
RA-MA
El mtodo main()
Toda aplicacin Java est compuesta por al menos una clase, incluso la
sencilla aplicacin de la figura 9 que generaba un mensaje de saludo. En alguna de
esas clases, que ha de estar declarada con el modificador de acceso public, debe
existir un mtodo esttico llamado main(), cuyo formato debe ser el indicado en la
figura 28.
RA-MA
RA-MA
CUESTIONES DE AUTOEVALUACIN
1. Qu edicin Java habra de utilizar para crear un programa que es
utilizado por un nico ordenador?
2. Al intentar ejecutar este programa se produce un error (excepcin).
Dnde est el fallo?
public class Ejercicio
{
public static void main (String args)
{
System.out.println("hola");
}
}
CAPTULO 2
SINTAXIS BSICA
Antes de introducirnos de lleno en la sintaxis del lenguaje, vamos a
comentar algunos aspectos sintcticos generales:
RA-MA
SECUENCIAS DE ESCAPE
Hay determinados caracteres en Java que o bien no tienen una
representacin explcita o bien no pueden ser utilizados directamente por el hecho
de tener un significado especial para el lenguaje. Para poder utilizar estos
caracteres dentro de un programa Java se utilizan las secuencias de escape.
Una secuencia de escape est formada por el carcter \ seguido de una
letra, en el caso de ciertos caracteres no imprimibles, o del carcter especial. La
tabla de la figura 30 contiene las principales secuencias de escape predefinidas de
Java.
RA-MA
Secuencia de escape
Significado
\b
Retroceso
\n
Salto de lnea
\t
Tabulacin horizontal
\\
Barra invertida \
Comilla simple
Comilla doble
Fig. 30.
Secuencias de escape
"maana"
VB
"tarde"
utilizaramos la instruccin:
System.out.println("Java\t\"maana\"\nVB\t\"tarde\"");
T ip o b s ic o
Tam ao
b y te
8 b its
s h o rt
1 6 b its
in t
3 2 b its
lo n g
6 4 b its
char
1 6 b its
f lo a t
3 2 b its
d o u b le
6 4 b its
b o o le a n
Fig. 31.
RA-MA
Numricos enteros. Son los tipos byte, short, int y long. Los
cuatro representan nmeros enteros con signo.
VARIABLES
Una variable es un espacio fsico de memoria donde un programa puede
almacenar un dato para su posterior utilizacin.
RA-MA
int k=40;
k
Fig. 32.
40
ts (referencia)
objeto
Fig. 33.
RA-MA
Declaracin de variables
Como se desprende de los anteriores ejemplos, una variable se declara de
la forma:
tipo_dato nombre_variable;
Un nombre de variable vlido debe cumplir las siguientes reglas:
Vlidas
No vlidas
int k, cod;
long p1;
char cad_2;
Fig. 34.
RA-MA
Asignacin
Una vez declarada una variable se le puede asignar un valor siguiendo el
formato:
variable=expresion;
donde expresion puede ser cualquier expresin Java que devuelva un valor acorde
con el tipo de dato de la variable:
int p, k, v;
p=30;
k=p+20;
v=k*p;
Literales
Un literal es un valor constante que se puede asignar directamente a una
variable o puede ser utilizado en una expresin.
Existen cuatro tipos de literales bsicos, coincidiendo con los cuatro grupos
en los que se pueden dividir los tipos bsicos Java, esto es, numricos enteros,
numricos decimales, lgicos y carcter. A la hora de utilizar estos literales en una
expresin hay que tener en cuenta lo siguiente:
RA-MA
RA-MA
Local
Fig. 35.
RA-MA
char
\u0000'
float, double
0.0
boolean
false
objeto
null
Fig. 36.
Conversiones de tipo
Java es un lenguaje fuertemente tipado, lo que significa que es bastante
estricto a la hora de asignar valores a las variables. A priori, el compilador slo
admite asignar a una variable un dato del tipo declarado en la variable, no obstante,
en ciertas circunstancias, es posible realizar conversiones que permitan almacenar
en una variable un dato de un tipo diferente al declarado.
RA-MA
En Java es posible realizar conversiones entre todos los tipos bsicos, con
excepcin de boolean, que es incompatible con el resto de tipos.
Las conversiones de tipo
implcitamente o explcitamente.
pueden
realizarse
de
dos
maneras:
CONVERSIONES IMPLCITAS
Las conversiones implcitas se realizan de manera automtica, es decir, el
valor o expresin que va a asignar a la variable es convertido automticamente al
tipo de sta por el compilador, antes de almacenarlo en la variable. El siguiente
cdigo es un ejemplo de conversin implcita:
int i;
byte b=30;
i=b;
En este ejemplo, el dato de tipo byte almacenado en la variable b es
convertido en un int antes de asignarlo a la variable b.
Para que una conversin pueda realizarse de forma automtica
(implcitamente), el tipo de la variable destino debe ser de tamao igual o
superior al tipo de origen, si bien esta regla tiene dos excepciones:
RA-MA
CONVERSIONES EXPLCITAS
Cuando no se cumplan las condiciones para una conversin implcita, sta
podr realizarse explcitamente utilizando la expresin:
variable_destino = (tipo_destino) dato_origen;
Con esta expresin le estamos diciendo al compilador que convierta
dato_origen a tipo_destino para que pueda ser almacenado en variable_destino.
A esta operacin se la conoce como casting o estrechamiento ya que al
convertir un dato de un tipo en otro tipo de tamao inferior se realiza un
estrechamiento que, en algunos casos, puede provocar una prdida de datos,
aunque ello no provocar errores de ejecucin. Los siguientes son ejemplos de
conversiones explcitas:
char c;
byte k;
int p=400;
double d=34.6;
c=(char)d; //se elimina la parte decimal (truncado)
k=(byte)p; //se produce una prdida de datos, pero
//la conversin es posible
RA-MA
clase diferente. Para que esto sea posible es necesario que exista una relacin de
herencia entre las clases, por lo que este asunto se tratar en el captulo dedicado a
la Programacin Orientada a Objetos.
Constantes
Una constante es una variable cuyo valor no puede ser modificado. Para
definir una constante en Java se utiliza la palabra final, delante de la declaracin
del tipo, siguiendo la expresin:
final tipo nombre_cte=valor;
Por ejemplo:
final double pi=3.1416;
Una constante se define en los mismos lugares en los que se puede declarar
una variable: al principio de la clase y en el interior de un mtodo.
Suele ser bastante habitual que derterminadas constantes tengan que poder
ser utilizadas desde el exterior de la clase donde se han declarado; para que adems
no sea necesario crear objetos de la misma para hacer uso de estas constantes, se
declaran como campos pblicos y estticos. ste es el caso de la constante PI,
declarada en la clase Math de Java estndar de la forma:
public static final double PI=3.1416;
OPERADORES
Los operadores son smbolos que permiten realizar operaciones con los
datos de un programa. Java dispone de una amplia variedad de operadores; a
continuacin estudiaremos los ms importantes, clasificndolos segn el tipo de
operacin que realizan.
Aritmticos
Se utilizan para realizar operaciones aritmticas dentro de un programa,
actuando sobre valores de tipo numrico.
RA-MA
Descripcin
Ejemplo
int c;
c=2+5;
int c;
c=2-5;
int c;
c=2*5;
int a=8,b=5;
float x, y;
x=a/b; // El resultado es 1
y=a/3.0f; //El resultado es 2.66
int c;
c=7%2; //El resultado es 1
++
int c=3
c++; //Equivale a c=c+1
--
int c=3
c--; //Equivale a c=c-1
Fig. 37.
Operadores aritmticos
RA-MA
int a=3, b, s;
b=a++;
System.out.println("b vale "+b); //b vale 3
s=++b*++a;
System.out.println("s vale "+s); //s vale 20
Asignacin
Adems del clsico operador de asignacin (=), Java dispone de un
conjunto de operadores que permiten simplificar el proceso de operar con una
variable y asignar el resultado de la operacin a la misma variable.
RA-MA
Operador
Descripcin
Ejemplo
int c;
c=8*5; //Asigna el resultado de la
operacin a la variable c
+=
int c=4;
c+=5; //Equivale a realizar c=c+5
-=
int c=3;
c-=2; //Equivale a realizar c=c-2
*=
int a=8;
a*=2; //Equivale a realizar a=a*2
/=
int c=7;
c/=2; //Equivale a realizar c=c/2
%=
int c=6;
c%=3; //Equivale a realizar c=c%3
Fig. 38.
Operadores de asignacin
RA-MA
ob1
ff23
Object ob2=ob1;
Memoria
objeto
ob1
ff23
ob2
ff23
Memoria
objeto
Fig. 39.
int a=5;
int b=a;
5
:
String k=hola;
String p=k;
hola
k
:
p
Fig. 40.
RA-MA
Condicionales
Se utilizan para establecer una condicin dentro de un programa, el
resultado de sta ser un tipo boolean (true o false). Estos operadores se utilizan en
instrucciones de control de flujo, tal y como veremos en el apartado siguiente.
La tabla de la figura 41 contiene el listado de los operadores condicionales
Java.
Operador
Descripcin
==
<
>
<=
>=
!=
Fig. 41.
Operadores condicionales
RA-MA
IGUALDAD DE OBJETOS
Los operadores de igualdad == y desigualdad "!=" pueden utilizarse
para comparar cualquier tipo de dato compatible.
Ahora bien, si lo utilizamos para comparar variables de tipo objeto
debemos recordar que lo que contienen estas variables son referencias a objetos, no
los objetos en s, por tanto, estamos comparando referencias y no objetos.
Esto implica que podemos tener dos variables referenciando a dos objetos
iguales y que la condicin de igualdad de las variables resulte falsa. En la figura 42
se muestra un ejemplo de esto utilizando la clase String, en ella se aprecia que hay
dos objetos idnticos (mismo valor de texto), situados en zonas de memoria
diferentes, por lo que las referencias a los mismos sern tambin distintas.
Para comprobar la igualdad de objetos, las clases proporcionan un mtodo
llamado equals, en el que cada clase implementa su propio criterio de igualdad. Por
tanto, si queremos saber si dos objetos de una determinada clase son iguales,
se debe utilizar el mtodo equals, no el operador de comparacin ==, el cual
solamente dara un resultado verdadero si las dos variables apuntan al mismo
objeto. En el siguiente captulo veremos la aplicacin de este mtodo en algunas de
las clases bsicas de Java.
v1
v2
Memoria
hola
hola
Fig. 42.
RA-MA
Lgicos
Operan con valores de tipo boolean, siendo el resultado tambin de tipo
boolean.
La tabla de la figura 43 muestra los tres operadores lgicos de Java.
Operador
Descripcin
&&
||
Fig. 43.
Operadores lgicos
RA-MA
p++;
}
System.out.println("p vale "+p);
System.out.println("f vale "+f);
O p erad o r
D escrip ci n
&
Fig. 44.
RA-MA
Operador instanceof
Opera nicamente con referencias a objetos y se utiliza para saber si un
objeto pertenece a un determinado tipo. La forma de utilizarlo es:
referencia_objeto instanceof clase
El resultado de la operacin es true si el objeto pertenece a la clase
especificada o a una de sus subclases.
Por ejemplo, al ejecutar el siguiente cdigo:
String s="Hola";
if(s instanceof String){
System.out.println ("Es una cadena");
}
RA-MA
Operador condicional
Se trata de un operador ternario (consta de tres operandos) cuya funcin es
asignar un valor entre dos posibles a una variable, en funcin del cumplimiento o
no de una condicin. Su formato es:
tipo variable = (condicion)?valor_si_true:valor_si_false
Si la condicin resulta verdadera (el resultado es true), se almacenar en la
variable el resultado de la expresin valor_si_true, si no, se almacenar
valor_si_false.
La ejecucin del siguiente bloque de cdigo mostrar en pantalla la palabra
"par":
int k=4;
String s = (k%2==0)?"par":"impar";
System.out.println(s);
RA-MA
M em oria
variables
objeto1
objeto2
D isponible para
recoleccin
objeto3
Fig. 45.
INSTRUCCIONES DE CONTROL
Como cualquier otro lenguaje de programacin, Java dispone de un juego
de instrucciones para controlar el flujo de ejecucin de un programa. Tenemos
instrucciones alternativas y repetitivas, a continuacin estudiaremos cada una de
ellas.
RA-MA
Instruccin if
La instruccin if es una sentencia de tipo alternativa simple que permite
comprobar una condicin dentro un programa. En caso de que la condicin se
cumpla se ejecutar un determinado conjunto de instrucciones, mientras que si no
se cumple, se podr optar por ejecutar otro conjunto diferente de instrucciones o
por no ejecutar ninguna.
En la figura 46 se muestra el formato de esta instruccin con un ejemplo de
utilizacin.
Formato:
Ejemplo:
if(condicion)
{
sentencias
}
else
{
sentencias
}
Fig. 46.
if(a>b)
{
System.out.println(El mayor es +a);
}
else
{
System.out.println(El mayor es +b);
}
RA-MA
La instruccin switch
Se trata de una instruccin de tipo alternativa mltiple. Permite ejecutar
diferentes bloques de instrucciones en funcin del resultado de una expresin.
La figura 47 muestra el formato de la instruccin y un ejemplo de
utilizacin.
Formato:
switch(expresion)
{
case valor1:
sentencias
break;
case valor2:
sentencias
break;
default:
sentencias
}
Fig. 47.
Ejemplo:
switch(a)
{
case 3:
System.out.println(Ests cerca);
break;
case 5:
System.out.println(Enhorabuena);
break;
default:
System.out.println(Vas mal);
}
Formato y ejemplo de utilizacin de la instruccin switch
RA-MA
Los nicos valores que puede evaluar switch son nmeros enteros
de tipo int. Esto incluye, adems de int, a aquellos que puedan ser
promocionados a dicho tipo (byte, char y short).
imprimir en pantalla:
El resultado es 10
El tamao es demasiado alto
RA-MA
La instruccin for
La instruccin repetitiva for permite ejecutar un conjunto de instrucciones
un nmero determinado de veces. Su formato y ejemplo de utilizacin se muestran
en la figura 48.
Formato:
for(inicializacion;condicion;incremento)
{
sentencias
}
Ejemplo:
for(int i=1;i<=10;i++)
{
//Muestra los nmeros del 1 al 10
System.out.println(El nmero es +i);
}
Fig. 48.
RA-MA
La instruccin while
Permite ejecutar un bloque de instrucciones mientras se cumpla una
determinada condicin dentro del programa. Los dos posibles formatos que admite
esta instruccin y un ejemplo de utilizacin se muestran en la figura 49.
En ambos casos, el bloque de instrucciones se ejecuta mientras la
condicin se cumple. En el segundo formato se ejecutan las instrucciones y luego
se comprueba la condicin, lo que garantiza que el bloque de instrucciones se
ejecute por lo menos una vez.
Como en el caso de la instruccin for, la utilizacin de llaves para delimitar
un bloque de instrucciones slo es obligatoria si ste est formado por ms de una
instruccin.
RA-MA
Formatos:
do
{
while(condicion)
{
sentencias
}
sentencias
}while(condicion);
Ejemplo:
int a=10;
while(a>0)
{
//Muestra los nmeros del 10 al 1
System.out.println(el numero es +a);
a--;
}
Fig. 49.
RA-MA
break
continue
BREAK
Ya hemos visto la utilidad de break en una sentencia switch, sin embargo,
su uso tambin se puede extender a las instrucciones repetitivas. En stas, la
utilizacin de break provoca una salida forzada del bucle, continuando la ejecucin
del programa en la primera sentencia situada despus del mismo.
En el siguiente ejemplo, se detiene la ejecucin del for al producirse una
determinada situacin:
int numero=6;
boolean acierto=false;
for(int i=1;i<=5;i++)
{
int aleat=Math.floor(Math.random()*10+1);
if(aleat==numero)
{
acierto=true;
//si acierta el nmero finaliza la ejecucin de
//la instruccin for
break;
}
}
CONTINUE
La instruccin continue, provoca que el bucle detenga la iteracin actual y
pase, en el caso de for, a ejecutar la instruccin de incremento o, en el caso de
while, a comprobar la condicin de entrada.
El siguiente trozo de cdigo suma nmeros impares aleatorios entre 1 y 10,
mientras la suma total sea inferior a 1000. La utilizacin de continue en este
ejemplo impide que los nmeros pares sean sumados:
int suma=0;
while(suma<1000){
int aleat=Math.floor(Math.random()*10+1);
if(aleat%2==0){
RA-MA
continue;
}
//slo se sumarn los nmeros impares
suma+=aleat;
}
PRCTICA 2.1.
Desarrollar un programa que, a partir de dos nmeros enteros dados (dos
nmeros cualesquiera almacenados en variables), muestre en pantalla la suma de
todos los nmeros pares comprendidos entre ambos.
Se realizarn dos versiones del programa. En una primera versin, todo el
cdigo ser incluido en el mtodo main(). En la segunda versin, la clase contar
con dos mtodos: suma(), que devolver el resultado de la suma a partir de los
nmeros recibidos y main(), que realizar la llamada a suma() y mostrar el
resultado en pantalla.
ARRAYS
Un array es un objeto en el que se puede almacenar un conjunto de datos
de un mismo tipo. Cada uno de los elementos del array tiene asignado un ndice
numrico segn su posicin, siendo 0 el ndice del primero.
Declaracin
Un array debe declararse utilizando la expresin:
tipo [] variable_array;
o
tipo variable_array[];
Como se puede apreciar, los corchetes pueden estar situados delante de la
variable o detrs. Los siguientes son ejemplos de declaraciones de array:
int [] k;
String [] p;
char cads[];
RA-MA
Los arrays pueden declararse en los mismos lugares que las variables
estndar: como atributos de una clase o locales en el interior de un mtodo. Como
ocurre con cualquier otro tipo de variable objeto, cuando un array se declara como
atributo se inicializa implcitamente al valor null.
Dimensionado de un array
Para asignar un tamao al array se utiliza la expresin:
variable_array=new tipo[tamao];
Tambin se puede asignar tamao al array en la misma lnea de declaracin
de la variable. Los siguientes son ejemplos de dimensionado de un array:
k=new int[5];
cads=new char[10];
String [] noms=new String[10];
RA-MA
resulta especialmente til en aquellos mtodos que necesitan recorrer todos los
elementos de un array, independientemente de su tamao.
El siguiente bloque de cdigo utiliza length para recorrer un array y
rellenarlo con nmeros enteros pares consecutivos, empezando por el 0.
int [] nums=new int[10];
for (int i=0;i<nums.length;i++){
nums[i]=i*2;
}
RA-MA
RA-MA
menor=calculoMenor(nums);
mayor=calculoMayor(nums);
System.out.println ("El mayor es "+ mayor);
System.out.println ("El menor es "+ menor);
System.out.println ("La suma es "+ suma);
}
static int sumar(int numeros[]){
int s=0;
for(int i=0;i<numeros.length;i++){
s+=numeros[i];
}
return s;
}
static int calculoMayor(int numeros[]){
int may=numeros[0];
for(int i=0;i<numeros.length;i++){
if(nums[i]>may){
may=nums[i];
}
}
return may;
}
static int calculoMenor(int numeros[]){
int men=numeros[0];
for(int i=0;i<numeros.length;i++){
if(nums[i]<men){
men=nums[i];
}
}
return men;
}
}
RA-MA
tipo [] metodo(parmetros){
:
return variable_array;
}
El siguiente mtodo devuelve un array con los cinco nmeros enteros
siguientes al nmero recibido como parmetro:
int [] getNumeros(int n){
int [] nums=new int[5];
for(int i=0;i<nums.length;i++){
nums[i]=n+i+1;
}
return nums;
}
PRCTICA 2.2.
Desarrollar un programa que, partiendo de un array formado por 10
nmeros enteros cualesquiera, ordene de menor a mayor los nmeros contenidos en
dicho array y posteriormente muestre el contenido ordenado en pantalla.
Se debe procurar realizar el programa de forma modular, desglosando en
cdigo de la clase en los mtodos que se considere apropiados.
RA-MA
donde, tipo variable representa la declaracin de una variable auxiliar del mismo
tipo que el array, variable que ir tomando cada uno de los valores almacenados en
ste con cada iteracin del for, siendo var_array la variable que apunta al array.
Por ejemplo, supongamos que tenemos el siguiente array:
int [] nums = {4, 6, 30, 15};
Obsrvese como, sin acceder de forma explcita a las posiciones del array,
cada una de stas es copiada automticamente a la variable auxiliar n al
principio de cada iteracin.
Como ejemplo ilustrativo, a continuacin se presenta una nueva versin del
programa anterior que realiza la suma de los elementos de un array. En este caso se
han utilizado bucles for-each sin ndices en vez de for tradicionales:
public class Principal{
public static void main (String [] args){
int mayor,menor, suma;
int [] nums = {3,4,8,2};
//Llamada a los mtodos
suma=sumar(nums);
menor=calculoMenor(nums);
mayor=calculoMayor(nums);
System.out.println ("El mayor es "+ mayor);
System.out.println ("El menor es "+ menor);
System.out.println ("La suma es "+ suma);
}
RA-MA
Arrays multidimensionales
Los arrays Java pueden tener ms de una dimensin, por ejemplo, un array
de enteros de dos dimensiones se declarara:
int [][] k;
RA-MA
k= new int[3][5];
Igualmente, para acceder a cada una de las posiciones del array se utilizara
un ndice por dimensin:
k[1][3]=28;
0
1
2
28
Fig. 50.
Array bidimensional
RA-MA
Fig. 51.
TIPOS ENUMERADOS
Los tipos enumerados son otra de las nuevas caractersticas incluidas en la
versin 5 de J2SE, consistente en la posibilidad de definir nuevos tipos de datos
cuyos posibles valores estn limitados a un determinado conjunto dado.
Anteriormente a la versin 5, la forma de definir un determinado conjunto
de valores era mediante la utilizacin de constantes:
public class
public
public
public
public
}
Direcciones{
static final
static final
static final
static final
int
int
int
int
NORTE=1;
SUR=2;
ESTE=3;
OESTE=4;
RA-MA
RA-MA
Como se puede ver, los valores del tipo enumerado no necesitan ningn
nmero o cadena de caracteres asociada.
Las clases Barco y Navegacion quedaran ahora de la siguiente manera:
public class Barco{
private Direcciones orientacion;
public void setOrientacion(Direcciones s){
orientacion = s;
}
public Direcciones getOrientacion(){
return orientacion;
}
}
public class Navegacion{
public static void main(String []args){
Barco b=new Barco();
//establecimiento de la orientacin a
//partir de los valores de la enumeracin
b.setOrientacion(Direcciones.OESTE);
}
}
RA-MA
Clases de enumeracin
Una enumeracin es un tipo especial de clase, clase que hereda
java.lang.Enum. A diferencia de las clases estndares, una clase de enumeracin
no permite el uso del operador new para la creacin de objetos. Cada uno de los
valores de la enumeracin representa uno de los posibles objetos de la clase, as
pues, stos sern creados de forma implcita al hacer referencia en el cdigo estos
valores (figura 52).
Adems de los mtodos heredados de Enum, todas las enumeraciones
disponen del mtodo esttico values(), que devuelve un array con todos los objetos
de la clase.
enum D irecciones{NORTE, SUR, ESTE, O ESTE}
:
Direcciones dir;
dir = D irecciones.NORTE;
objeto enum eracin
Fig. 52.
RA-MA
Otra diferencia entre los objetos de las clases estndares y los objetos
enumerados est en que stos ltimos pueden ser utilizados en expresiones de
comparacin de igualdad mediante el signo == y como valores de una instruccin
switch:
for(Direcciones dir:Direcciones.values()){
if(dir==Direcciones.SUR||dir==Direcciones.NORTE){
System.out.println("Rumbo erroneo");
}
else{
System.out.println("Rumbo correcto");
}
}
CONSTRUCTORES
Se definen igual que en las clases estndares:
Nombre_enumeracion(lista_parametros){
:
}
Cuando una enumeracin dispone de constructores con parmetros, los
valores de los argumentos de llamada deben estar especificados en cada uno de los
valores de la enumeracin:
enum Direcciones{
NORTE(4), SUR(2), ESTE(2), OESTE(3)
int distancia;
Direcciones(int d){//constructor
distancia=d;
}
}
RA-MA
MTODOS
Los mtodos tambin se definen igual que en las clases. Como ejemplo,
incluiremos en la enumeracin Direcciones un mtodo que nos permita recuperar la
distancia:
enum Direcciones{
NORTE(4), SUR(2), ESTE(2), OESTE(3)
int distancia;
Direcciones(int d){
//constructor
distancia=d;
}
int getDistancia(){
return distancia;
}
}
RA-MA
RA-MA
RA-MA
CUESTIONES DE AUTOEVALUACIN
1. Dos de las siguientes palabras no se corresponden con tipos
bsicos del lenguaje Java. Indica cules son:
int, double, Long, boolean, byte, char, string
2. El siguiente trozo de cdigo contiene un error de compilacin.
Indica cul es:
int k=2500;
float r=3.7;
byte p=(byte)k;
RA-MA
A. if(a=(b+c))
B. if(++a>(b-c))
C. if((a+b)==0)
6. Indica cul ser el contenido de las variables k y v al finalizar la
ejecucin del siguiente bloque de instrucciones:
int k=5;
int v=2;
if(k>0 ||(++v>1)){
for(int i=0;i<v;i++){
k++;
}
}
RA-MA
RA-MA
*********versin 2*****************
public class SumaPares2 {
public static void main(String[] args) {
//nmeros cualesquiera
int n1=7, n2=13;
//invoca al mtodo sumatorio para calcular la suma
int suma=sumatorio(n1,n2);
System.out.println("La suma es "+suma);
}
//mtodo que realiza la suma
public static int sumatorio(int s1, int s2){
//variables que almacenarn el mayor y el menor de
// los nmeros
int mayor,menor;
//variable local de sumas parciales
int suma=0;
//identifica los extremos
if(s1>s2){
mayor=s1;
menor=s2;
}
else{
mayor=s2;
menor=s1;
}
RA-MA
PRCTICA 2.2.
public class Ordenacion {
public static void main(String[] args) {
//array de enteros cualesquiera
int [] nums = {2, 34, 19, 5, 7, 28, 55, 3, 45, 21};
//llama al mtodo que ordena el array
ordenar(nums);
//llama al mtodo que muestra el contenido
//del array
mostrar(nums);
}
//el mtodo no necesita devolver una referencia al
//array ordenado, dado que ambas referencias,
//num y m, apuntan al mismo objeto array
public static void ordenar(int [] m){
//variable auxiliar utilizada para el intercambio
//de datos en el array
int aux;
//recorre las posiciones del array
for(int i=0;i<m.length;i++){
//el segundo for se utiliza para comparar el
//valor de la posicin actual con las siguientes
RA-MA
for(int j=i+1;j<m.length;j++){
//si uno de los siguientes valores es inferior
//al actual, procede al intercambio de las
//posiciones del array
if(m[j]<m[i]){
aux=m[i];
m[i]=m[j];
m[j]=aux;
}
}
}
}
//se encarga de mostrar el contenido del array
public static void mostrar(int [] m){
//recorre el array utilizando for-each
for(int num:m){
System.out.print(num+",");
}
}
}
CAPTULO 3
RA-MA
Clases bsicas
Clases de envoltorio
Clases de E/S
Colecciones
P a q u e te
p rin c ip a l
ja v a .la n g .S tr in g
S u b p a q u e te
Fig. 53.
C la s e
RA-MA
RA-MA
Nombre cualificado de
la clase
}
}
Importa la clase para
su utilizacin
import java.util.Vector;
public class Ejemplo
{
public void metodo()
{
Vector v;
}
}
Fig. 54.
RA-MA
RA-MA
zona 1
zona 3
zona 2
Fig. 55.
pa q u ete
clase
Fig. 56.
RA-MA
Las variables de tipo String pueden utilizarse tambin en una expresin que
haga uso del operador + para concatenar cadenas:
RA-MA
String s="Hola";
String t=s + " que tal"; //La variable t apunta al
//objeto "Hola que tal"
2 Despus de la
1 Antes de la
concatenacin
concatenacin
Memoria
Memoria
Hola
Hola
s
Fig. 57.
RA-MA
RA-MA
RA-MA
String toUpperCase().
maysculas.
Devuelve
la
cadena
en
formato
RA-MA
LA CLASE MATH
Esta clase proporciona mtodos para la realizacin de las operaciones
matemticas ms habituales en un programa. Todos los mtodos de la clase Math
son estticos, por lo que no necesitamos crear ninguna instancia de la clase para su
utilizacin, de hecho, no es posible crear ningn objeto de la clase Math.
Constantes pblicas
La clase Math dispone de dos atributos pblicos estticos que contienen
dos de las constantes matemticas ms utilizadas:
Mtodos
Los mtodos ms interesantes expuestos por esta clase son:
RA-MA
RA-MA
Importaciones estticas
La importacin esttica es una caracterstica incluida en el lenguaje Java a
partir de la versin 5, consistente en la posibilidad de importar todos los miembros
estticos de una clase, de modo que pueda hacerse referencia a los mismos sin
necesidad de utilizar el nombre de la clase delante del mtodo o atributo.
Esta caracterstica puede resultar bastante til cuando se utilizan los
mtodos de la clase Math pues, como sabemos, todos ellos son estticos. Por
ejemplo, para invocar al mtodo pow() con la importacin esttica de la clase
Math, podemos utilizar pow(3, 8) en vez de Math.pow(3, 8).
Para importar los elementos estticos de una clase debemos utilizar la
instruccin import de la forma siguiente:
import static paquete.clase.*;
UTILIZACIN DE FECHAS
El paquete java.util proporciona dos clases para el tratamiento bsico de
fechas en una aplicacin Java, se trata de las clases Date y Calendar.
RA-MA
La clase Date
Un objeto Date representa una fecha y hora concretas con precisin de un
milisegundo. Esta clase permite manipular una fecha y obtener informacin de la
misma de una manera tremendamente sencilla, sin embargo, ofrece un nulo soporte
para la internalizacin de aplicaciones por lo que a partir de la versin JDK 1.1 se
incorpor una nueva clase llamada Calendar que ampla las posibilidades a la hora
de trabajar con fechas.
No obstante, y aunque la mayora de los mtodos de esta clase estn
deprecated (obsoletos), no est de ms conocer su funcionamiento bsico.
Uno de los dos constructores de Date que quedan no deprecated es el
constructor por defecto. Utilizando ste, crearamos un objeto Date representando
la fecha y hora actuales:
Date dt = new Date();
mostrara en pantalla algo similar a esto (suponiendo que esa fuera la fecha y hora
en que se ejecuta la aplicacin):
Thu Dec 14 09:59:46 CET 2006
RA-MA
La clase Calendar
Como se ha comentado anteriormente, la clase Calendar surgi para cubrir
las carencias de la clase Date en el tratamiento de fechas.
RA-MA
import java.util.*;
public class PruebaCalendar {
public static void main(String[] args) {
Calendar cal=Calendar.getInstance();
String fecha="";
fecha+=cal.get(Calendar.DAY_OF_MONTH)+"/";
fecha+=cal.get(Calendar.MONTH)+1+"/";
fecha+=cal.get(Calendar.YEAR);
System.out.println("Hoy es "+fecha);
}
}
Obsrvese como en el caso del mes el valor devuelto por get() est
comprendido entre 0 y 11, por lo que ser necesario sumar un 1 al resultado.
void set(int ao, int mes, int da). Modifica la fecha del objeto
calendar, asignndole el ao, mes y da especificados en los
parmetros. Este mtodo est sobrecargado, existiendo otra versin
en la que es posible establecer nuevos valores tanto para la fecha
como para la hora. Por otro lado, debemos tener en cuenta que los
meses comienzan a numerarse por 0.
void roll(int campo, int cantidad). Funciona igual que add(), con la
diferencia de que la adicin de la cantidad de tiempo al campo no
RA-MA
CLASES DE ENVOLTORIO
Para cada uno de los tipos de datos bsicos, Java proporciona una clase que
lo representa. A estas clases se las conoce como clases de envoltorio, y se utilizan
fundamentalmente para:
RA-MA
RA-MA
Autoboxing
El autoboxing representa otra de las nuevas caractersticas del lenguaje
incluidas a partir de la versin Java 5 siendo, probablemente, una de las ms
prcticas.
Consiste en la encapsulacin automtica de un dato bsico en un objeto de
envoltorio, mediante la utilizacin del operador de asignacin.
Por ejemplo, segn se ha explicado anteriormente, para encapsular un dato
entero de tipo int en un objeto Integer, deberamos proceder del siguiente modo:
int p = 5;
Integer n = new Integer(p);
RA-MA
muestraNumeros(Integer [] nums){
int suma=0;
for(Integer n: nums){
suma+=n; //autounboxing
System.out.println("El nmero vale "+n);
}
System.out.println("La suma total es "+suma);
Salida
PrintStream
BufferedReader
Entrada
InputStream
InputStreamReader
Fig. 58.
RA-MA
Salida de datos
El envo de datos al exterior se gestiona a travs de la clase PrintStream,
utilizndose un objeto de la misma para acceder al dispositivo de salida.
Posteriormente, con los mtodos proporcionados por esta clase, podemos enviar la
informacin al exterior.
El proceso de envo de datos a la salida debe realizarse siguiendo dos
pasos:
1. Obtencin del objeto PrintStream. Se debe crear un objeto
PrintStream asociado al dispositivo de salida, la forma de hacerlo
depender del dispositivo en cuestin. La clase System
proporciona el atributo esttico out que contiene una referencia al
objeto PrintStream asociado a la salida estndar, representada por
la consola.
2. Envo de datos al stream. La clase PrintStream dispone de los
mtodos print(String cadena) y println(String cadena) para
enviar una cadena de caracteres al dispositivo de salida,
diferencindose uno de otro en que el segundo aade un salto de
lnea al final de la cadena. Esto explica que para enviar un
mensaje a la consola se utilice la expresin:
System.out.println("texto de salida");
o
objeto_printstream.print(dato)
RA-MA
RA-MA
Funcin
s , S
c, C
x, X
e,E
Fig. 59.
RA-MA
Carcter
Funcin
Fig. 60.
Carcter
Funcin
Fig. 61.
RA-MA
Entrada de datos
La lectura de datos del exterior se gestiona a travs de la clase
InputStream. Un objeto InputStream est asociado a un dispositivo de entrada,
que en el caso de la entrada estndar (el teclado) podemos acceder al mismo a
travs del atributo esttico in de la clase System.
Sin embargo, el mtodo read() proporcionado por la clase InputStream
para la letura de los datos no nos ofrece la misma potencia que print o println para
la escritura. La llamada a read() devuelve el ltimo carcter introducido a travs de
dispositivo, esto significa que para leer una cadena completa sera necesario
hacerlo carcter a carcter, lo que hara bastante ineficiente el cdigo.
Por ello, para realizar la lectura de cadenas de caracteres desde el exterior
es preferible utilizar otra de las clases del paquete java.io: la clase
BufferedReader.
La lectura de datos mediante BufferedReader requiere seguir los siguientes
pasos en el programa:
1. Crear objeto InputStreamReader. Este objeto permite convertir
los bytes recuperados del stream de entrada en caracteres. Para
crear un objeto de esta clase, es necesario indicar el objeto
InputStream de entrada, si la entrada es el teclado este objeto lo
tenemos referenciado en el atributo esttico in de la clase
System:
InputStreamReader rd;
rd=new InputStreamReader(System.in);
RA-MA
Lanza la excepcin
im port java.io.*;
public class Ejem plo {
public static void m ain(String[] args) throws IOException{
String cad;
InputStream Reader ir;
BufferedReader bf;
//1. Crea objeto InputStream Reader
ir=new InputStream Reader(System .in);
//2. Crea objeto BufferedReader
bf=new BufferedReader(ir);
System .out.println("Introduzca su nom bre");
//3. Lee la lnea de texto introducida
cad=bf.readLine();
System .out.println("Te llam as: "+cad);
}
}
Fig. 62.
RA-MA
RA-MA
PRCTICA 3.2.
Scanners
Como acabamos de comprobar, la lectura de datos por teclado desde una
aplicacin Java resulta bastante engorrosa. A fin de simplificar este proceso, con la
versin Java 5 se incorpora la clase java.util.Scanner. Esta clase proporciona una
serie de mtodos para realizar la lectura de datos desde un dispositivo de entrada o
fichero, tanto en forma de cadena de caracteres como en cualquier tipo bsico.
Esto
token2
token3
es
una
Fig. 63.
token4
cadena
RA-MA
d).
Establece
un
nuevo
RA-MA
Como hemos indicado antes, hay que tener en cuenta que el delimitador de
token es el espacio en blanco. En el programa anterior esto significa que si el
nombre introducido contiene un espacio, por ejemplo, Luis Prez, al ejecutar la
instruccin:
nom = sc.next();
siendo source un objeto de la clase java.io.File asociado al fichero que contiene los
datos a leer y sc la variable que almacenar la referencia al objeto scanner. Como
se ver en el captulo 6, un objeto File es una representacin abstracta de un fichero
o archivo del disco. Para su creacin podemos recurrir a la expresin:
File f=File (String pathname)
RA-MA
EXPRESIONES REGULARES
Las expresiones regulares se introdujeron en Java a partir de la versin 1.4.
Normalmente, las expresiones regulares se emplean en programacin para la
creacin de patrones, cuya principal utilidad es la bsqueda de coincidencias dentro
de una cadena de caracteres.
Una expresin regular se compone de una combinacin de caracteres que
tienen una funcionalidad especial, por ejemplo, la expresin J2[SEM]E
permitira definir un patrn para la localizacin de las palabras J2SE, J2ME y J2EE
en una cadena.
RA-MA
Definicin de un patrn
Un patrn es un objeto de la clase Pattern, para crearlo se debe utilizar el
mtodo esttico compile() de la propia clase Pattern. El formato de este mtodo es
el siguiente:
static Pattern compile (String reg)
donde la cadena de texto reg representa la expresin regular que define el patrn.
De esta forma, si quisiramos crear un patrn con la expresin regular expuesta
anteriormente como ejemplo sera:
Pattern p=Pattern.compile("J2[SEM]E");
Bsqueda de coincidencias
Una vez definido el patrn, ste puede aplicarse sobre una determinada
cadena de caracteres para comprobar si existe una parte de la misma que coincida
con los criterios establecidos en la expresin del patrn.
Esta busqueda de coincidencias se realiza utilizando los mtodos de la
clase Matcher. La clase Pattern dispone del mtodo matcher() que permite crear un
objeto Matcher a partir de la cadena donde se desea realizar la bsqueda:
Matcher matcher (String cadena)
Por ejemplo, para poder aplicar los mtodos de bsqueda de Matcher sobre
la cadena J2SE, utilizando el objeto Pattern definido anteriormente, deberamos
crear un objeto Matcher utilizando la siguiente instruccin:
Matcher m = p.matcher("J2SE");
RA-MA
Una vez creado el objeto, podemos emplear por ejemplo el mtodo boolean
matches() para saber si la cadena coincide completamente o no con la expresin del
patrn:
if(m.matches()){
System.out.println("Existe coincidencia");
}
else{
System.out.println("No se encontraron "+
" coincidencias");
}
RA-MA
Carcter
Funcin
\d
Dgito entre 0 y 9.
\s
Espacio en blanco.
\w
Fig. 64.
Caracteres especiales
Smbolo
Funcin
Fig. 65.
RA-MA
Expresin
Significado
\d\d/\d\d/\d\d
\w+\.?\w+@\w+\.\w+
www\..+\.com
Fig. 66.
RA-MA
RA-MA
COLECCIONES
Una coleccin es un objeto que almacena un conjunto de referencias a
otros objetos, dicho de otra manera, es una especie de array de objetos.
Sin embargo, a diferencia de los arrays, las colecciones son dinmicas, en
el sentido de que no tienen un tamao fijo y permiten aadir y eliminar objetos en
tiempo de ejecucin.
Java incluye en el paquete java.util un amplio conjunto de clases para la
creacin y tratamiento de colecciones. Todas ellas proporcionan una serie de
mtodos para realizar las operaciones bsicas sobre una coleccin, como son:
Aadir objetos a la coleccin.
Eliminar objetos de la coleccin.
Obtener un objeto de la coleccin.
Localizar un objeto en la coleccin.
Iterar a travs de una coleccin.
A continuacin, vamos a estudiar algunas de las clases de coleccin ms
significativas.
RA-MA
La clase ArrayList
Un ArrayList representa una coleccin basada en ndices, en la que cada
objeto de la misma tiene asociado un nmero (ndice) segn la posicin que ocupa
dentro de la coleccin, siendo 0 la posicin del primer elemento (figura 67).
o b je to s
A r r a y L is t
n d ic e s
0
1
2
Fig. 67.
CREACIN DE UN ARRAYLIST
Para crear un objeto ArrayList utilizamos la expresin:
ArrayList variable_objeto=new ArrayList();
Una vez creado, podemos hacer uso de los mtodos de la clase ArrayList
para realizar las operaciones habituales con una coleccin.
RA-MA
RA-MA
RA-MA
RA-MA
RA-MA
RA-MA
La clase Hashtable
La clase Hashtable representa un tipo de coleccin basada en claves (figura
68), donde los objetos almacenados en la misma (valores) no tienen asociado un
ndice numrico basado en su posicin, sino una clave que lo identifica de forma
nica dentro de la coleccin. Una clave puede ser cualquier tipo de objeto.
La utilizacin de colecciones basadas en claves resulta til en aquellas
aplicaciones en las que se requiera realizar bsquedas de objetos a partir de un dato
que lo identifica. Por ejemplo, si se va a gestionar una coleccin de objetos de tipo
Empleado, puede resultar ms prctico almacenarlos en un hashtable,
asocindoles como clave el dni, que guardarlos en un ArrayList en el que a cada
empleado se le asigna un ndice segn el orden de almacenamiento.
claves
valores
H ashtable
Fig. 68.
Organizacin de un hashtable
CREACIN DE UN HASHTABLE
La creacin de un objeto hashtable se realiza utilizando el constructor sin
parmetros de la clase:
Hashtable variable_objeto=new Hashtable();
Por ejemplo,
Hashtable tb=new Hashtable();
RA-MA
mostrar en pantalla:
Antes se llamaba pepito
RA-MA
Objeto
Enumeration
Fig. 69.
RA-MA
RA-MA
import java.io.*;
import java.util.*;
public class GestionNombres {
public static void main(String[] args)
throws IOException{
Hashtable nombres=new Hashtable();
String opcion;
BufferedReader bf=new BufferedReader(
new InputStreamReader(System.in));
do{
System.out.println("Elegir opcin:\n");
System.out.println("1. Aadir nombre");
System.out.println("2. Eliminar nombre");
System.out.println("3. Mostrar todos los "+
"nombres");
System.out.println("4. Salir");
opcion=bf.readLine();
switch(Integer.parseInt(opcion)){
case 1:
String nom,dni;
System.out.println("Introduce Nombre: ");
nom=bf.readLine();
System.out.println("DNI: ");
dni=bf.readLine();
almacenaNombre(nom,dni,nombres);
break;
case 2:
String d;
System.out.println("Introduzca el dni: ");
d=bf.readLine();
eliminaNombre(d,nombres);
break;
case 3:
mostrarTodos(nombres);
break;
}
}
while(!opcion.equals("4"));
}
RA-MA
Genricos
Despus de haber analizado el funcionamiento de las colecciones y de
haber estudiado algunas de las clases ms significativas en este terreno, es el
momento de abordar una de las mejoras ms significativas del lenguaje incluidas
en Java 5 y que simplifica algunos de los aspectos relativos al tratamiento de
colecciones en los programas. Se trata de los genricos.
RA-MA
RA-MA
RA-MA
for(int i=0;i<l.size();i++){
String s=l.get(i); //ausencia de casting
System.out.println(s.length());
}
RA-MA
RA-MA
RA-MA
do{
System.out.println("Elegir opcin:\n");
System.out.println("1. Aadir temperatura");
System.out.println("2. Mostrar temperatura "+
"media");
System.out.println("3. Mostrar temperaturas "+
"extremas");
System.out.println("4. Salir");
opcion=sc.nextInt();
switch(opcion){
case 1:
double temp;
System.out.println("Introduce la "+
"temperatura: ");
//Recupera el dato como un double
temp=sc.nextDouble();
almacenaTemperatura(temp,temperaturas);
break;
case 2:
muestraMedia(temperaturas);
break;
case 3:
muestraExtremas(temperaturas);
}
}
while(opcion!=4);
}
static void almacenaTemperatura(double d,
ArrayList<Double> temperaturas){
//autoboxing
temperaturas.add(d);
}
static void muestraMedia(
ArrayList<Double> temperaturas){
double media=0.0;
for(Double tp:temperaturas){
media+=d;//autounboxing
}
media/=temperaturas.size();
RA-MA
RA-MA
RA-MA
A esta forma de definir una clase se la conoce como definicin con tipo
parametrizado o definicin de tipo genrico. La anterior declaracin se lee clase
ArrayList de E, donde E, llamado tambin parmetro de tipo, es la letra utilizada
para referirse al tipo de elementos que se pueden aadir y representa a cualquier
tipo de objeto Java.
Como hemos visto en el apartado anterior, es en la declaracin de una
variable de la clase ArrayList y en la creacin de un objeto de la misma cuando se
tiene que especificar el tipo concreto de objetos que se van a tratar en esa
coleccin, sustituyendo la letra E por el nombre de clase correspondiente:
//ArrayList de enteros
ArrayList<Integer> n;
n = new ArrayList<Integer>();
//ArrayList de cadenas
ArrayList<String> cad;
cad = new ArrayList<String>();
RA-MA
RA-MA
RA-MA
Lgica
Clase1.class
ClaseN.class
Clase2.class
m ain()
Clase3.class
Fig. 70.
RA-MA
RA-MA
RA-MA
RA-MA
CUESTIONES DE AUTOEVALUACIN
1. Qu mensaje aparecer en pantalla tras la ejecucin del siguiente
bloque de instrucciones?
String s = new String ("cadena nueva");
String p = new String ("cadena nueva");
if(s==p){
System.out.println("Son iguales");
}
else{
System.out.println("Son diferentes");
}
RA-MA
A. Aparecer: s es mayor
B. Aparecer: p es mayor
C. Se producir un error de compilacin
D. Se producir una excepcin
4. Cules de las siguientes clases de envoltorio proporcionan el
mtodo longValue()?
Int, Float, Character, Boolean, Byte, Long
5. Para leer un dato nmero entero desde el teclado, suponiendo que
la variable bf apunta a un objeto BufferedReader asociado, habra
que utilizar la instruccin:
A. int num = Integer.parseInt(bf.readLine());
B. int num = (bf.readLine()).intValue();
C. int num = (int)bf.readLine();
6. Por qu no compilara el siguiente bloque de cdigo?
ArrayList v = new ArryList();
int n [] = {4, 9, 2, 5};
for(int i=0;i<n.length;i++){
v.add(n[i]);
}
RA-MA
PRCTICA 3.2.
import java.io.*;
public class GestionNotas {
public static void main(String[] args)
throws IOException{
InputStreamReader is=
RA-MA
new InputStreamReader(System.in);
BufferedReader bf=new BufferedReader(is);
//almacena la nota leda
float nota=0.0f;
//almacenar la nota media
float media=0.0f;
//lleva la cuenta de las notas ledas
int validas=0;
//almacenarn las notas extremas
float baja=10.0f,alta=0.0f;
System.out.println("Introduce nota ");
nota=Float.parseFloat(bf.readLine());
//mientras la nota leda sea positiva
//actualiza las variables que contienen
//la media, nota mxima y nota mnima
//y vuelve a leer una nueva nota
while(nota>=0.0){
if(nota>alta){
alta=nota;
}
if(nota<baja){
baja=nota;
}
media+=nota;
System.out.println("Introduce nota ");
nota=Float.parseFloat(bf.readLine());
validas++;
}
//slo calcula la media si por lo menos hay una
//nota vlida (no negativa)
if(validas>0){
media/=validas;
}
System.out.println("media "+media+
" validas "+validas);
System.out.println("alta "+alta);
System.out.println("baja "+baja);
}
}
PRCTICA 3.3.
*******clase Pila***********
public class Pila <E>{
//almacena la pila de objetos en un ArrayList
//de tipo genrico
private ArrayList<E> v=new ArrayList<E>();
public void agregar(E s)
{
//si el objeto no existe la aade
if(v.indexOf(s)==-1){
v.add(s);
}
}
public void quitar()
{
//elimina el ltimo objeto introducido
v.remove(v.size()-1);
}
public E obtener(int p)
{
return v.get(p);
}
public int total()
{
//el tamao del ArrayList determina el
//nmero de elementos almacenados
return v.size();
}
}
*************clase GestionPila********
import java.util.*;
public class GestionPila {
public static void main(String[] args) {
//utiliza Scanner en vez de BufferedReader
Scanner sc=new Scanner(System.in);
//crea una instancia de la clase Pila
RA-MA
RA-MA
CAPTULO 4
PROGRAMACIN ORIENTADA A
OBJETOS CON JAVA
Como ya se dijo al principio, el lenguaje Java es totalmente orientado a
objetos, esto significa que podemos aplicar en una aplicacin Java todas las
caractersticas y beneficios que proporciona este modelo de programacin, entre
ellas, la encapsulacin, la herencia y el polimorfismo.
Durante este captulo vamos a estudiar todos estos conceptos clave en los
que se basa la POO y su aplicacin en Java. Se trata de conceptos cruciales, no slo
por su aplicacin directa en el desarrollo de las aplicaciones, sino tambin porque
estn presentes en todo el conjunto de clases de J2SE y J2EE.
Los distintos temas a tratar en este captulo y en los que se va a dividir el
estudio del mismo son:
Empaquetado de clases
Modificadores de acceso
Encapsulacin
Sobrecarga de mtodos
Constructores
Herencia
Sobrescritura de mtodos
Polimorfismo
RA-MA
EMPAQUETADO DE CLASES
Como hemos comentado en el captulo anterior, la organizacin de las
clases en paquetes facilita el uso de las mismas desde otras clases. Por ello, resulta
tambin recomendable utilizar esta tcnica en el desarrollo de nuestras propias
clases.
Si queremos crear una estructura de paquetes en la que vamos a incluir las
clases que vamos a definir, debemos proceder como sigue:
-
r a z
p a q u e te 1
p a q u e te 2
:
Fig. 71.
RA-MA
Fig. 72.
RA-MA
Ahora ya podemos hacer uso de Ejemplo desde cualquier otra clase que
vayamos a crear, independientemente de donde est situada. Eso s, como ya
explicamos en el captulo 3, para referirse a la clase Ejemplo desde otro lugar habr
que utilizar el nombre cualificado de la misma (pjava.Ejemplo), o bien importarla
mediante la sentencia import:
import pjava.Ejemplo;
public class OtraClase{
public void llamada(){
Ejemplo ej = new Ejemplo();
System.out.println(ej.getMensaje());
}
}
RA-MA
MODIFICADORES DE ACCESO
El tema de los modificadores de acceso no es un punto de la programacin
orientada a objetos como tal, sin embargo, conviene aclarar este aspecto antes de
entrar a analizar otros conceptos ms avanzados.
Los modificadores de acceso se utilizan para definir la visibilidad de los
miembros de una clase (atributos y mtodos) y de la propia clase.
En Java existen cuatro modificadores de acceso que, ordenados de menor a
mayor visibilidad, son:
private. Cuando un atributo o mtodo es definido como private, su
uso est restringido al interior de la clase, lo que significa que
solamente puede ser utilizado en el interior de su misma clase. Este
modificador puede ser aplicado a mtodos y atributos, pero no a la
clase.
RA-MA
package paquete2;
public class ClaseC{
void metodo3(){
//error, las clases estn en paquetes
//diferentes
ClaseA ca = new ClaseA();
}
void metodo4(){
ClaseB cb = new ClaseB();
//error, metodo2() no es visible desde
//ClaseC
cb.metodo2();
}
}
(default)
protected
public
clase
NO
NO
mtodo
atributo
variable local
NO
NO
NO
NO
Fig. 73.
RA-MA
ENCAPSULACIN
Como ya vimos en los primeros captulos, una clase est compuesta, por un
lado, de mtodos que determinan el comportamiento de los objetos de la clase y,
por otro, de atributos que representan las caractersticas de los objetos de la clase.
Los mtodos que se quieren exponer al exterior llevan el modificador de
acceso public, mientras que los atributos suelen tener acceso privado, de modo que
solamente puedan ser accesibles desde el interior de la clase.
sa es precisamente la idea de la encap