Programacion en Java 2
Programacion en Java 2
'
• 1
j
'\I• \
n¿ept91 s p1'aiV~-;
co 1
' '. \\' ,, ' '\
¡\ OBJE TIVos
• 11 to\·1·''
Desp ,
Al!IPortam1e.~ . ~:.1-'\:,1\',1~.·'\ . t' , ues de haber le(d
CUl'' 1 1 \ \· • ·' , i
INTRODUCCIÓN
bajo un solo-nomb
Un método es un m.inip rogr~a dentro un ,programa. Los ~étodo s ~ontienen ~rias sentencias s .ab.ouan espa<
que u~ programa_p_uede utihz~ una o mas v~ces para e1ec~!ar dichas sentencias. Los método de dividir un pxoye
reduciendo repetic iones y haciend o más fácil la programac1on, proporcionando un medio
s en un progr,
grand~ en módulos pequeñ os más maneja bles. Este capítulo examina el papel (rol) de loa método pue:den ex
Java. Los métodos en Java siempr e han de ser miembros de una clase; en otros lenguaje s;comQ C++,
>n o program a Java tie1
de modo autónomo o bien como miemb ros de una clase. Como ya cono<?e, cada. a!)licací?
miembros de una o
menos un método main { ) ; sin embarg_o, cada program a Java consta de muchos métodos
s hace que las mism:
clases en lugar de un método main { ) grande . La división del código en clases y método
un método , pruébe lo y depúre
puedan reutilizar en su progra ma y en otros program as .• Despué s de que escriba
sQlo se ~ecesita llar
puede utilizar nuevam ente una y otra vez. Para reutilizar un método dentro ·de su programa
en la clase derivad
método. Por el mecani smo de la herenc ia, todo método de una clase se podrá reutilizar
que otros program a.& pueden ret
clases Ysus métodos miemb ro se agrupa n en paquet es de c\a.3~s, de tal fo~a
desarrollo. Y dado q
las clases y los método s definid os en ellas, por esa razón se 'puede ahorrar tiempo de
del progr~ a compl
paquetes contienen clases presum ibleme nte compro badas, se incrementa la fiabilidad
ente, la~ utilizan. Es I
mayoría de los progra madore s no constru yen paquet es de clases, sino que, simplem
~e tiempo de des
conocer los paquet es que incorpo ra Java para utilizar las clases proporcionadas Y ahorra_r,
en Java, Y_ un b,
Las clases, los objetos y los método s son una de las piedras angular es d~ la programacion
das ~e. 1~~ métc
de todas las propie dades básica s ya expues tas, así como de las propied ades avanza 1~ ~edeñmcion de:
proporcionarán una potenc ia, a veces impens able, a sus prograrnac~ones. La sobr~ca:ga,
eficien te de progr<
Y1 recursividad son propie dades cuyo conoci miento es esencia l para un diseno
ª
numerosas aplicaciones.
Programación en JAVA 2
244
8.1. MÉTODOS
Sintaxis
tipo especifica el tipo de datos devuelto por el método (cualquier tipo válido incluyendo tipos
clase que se puedan crear).
nombre el nombre que identifica al método. El convenio suele ser utilizar una letra minúscula para la
primera letra del nombre.
Si el método no devuelve un valor, su tipo de retorno debe ser void. El nombre del método puede
ser cualquiera distinto de aquellos ya utilizados por otros elementos dentro del ámbito actual (no puede
ser igual a una palabra reservada Java).
La lista de parámetros es una secuencia de parejas de identificadores y tipos de datos separados por
comas. Los parámetros son, fundamentalmente, variables que reciben el valor de los argumentos pasados
al método
,,, ,,,
cuando éste es llamado. Si el método no tiene parámetros, entonces la lista de parámetros
sera vac1a. .
Los métodos que devuelven a la rutina llamadora un tipo de datos distinto de void deben utilizar
una sentencia ret urn con la siguiente sintaxis:
return valor
valor es una expresión con el valor que-devuelve.
Ejemplo
void saludoBienvenida()
{
System.out.println(u ¡Hola!u);
System.out.pr~nt(uMé todo llamado saludoBienvenidau).
System.out.println(u que contiene tres sentencias u;;
}
El método ha sido •
·1· insertad o e n una clase llamada
ut1 izar para crear un ob. t O 8 1
se puede
declarado en la clase. Je Saludo y los objetos ten~rI :º • Re~ordemos que la claseenida () ,
. un metodo saludo Bienv
Ejemplo
Saludo unObJ 'eto -_ new s 1
.ª udo();
unObj eto.sa ludoB ienvenida ()
nvenid a ()
. Este program a contien e dos declaraciones de métodos. A continuación de sal udoBie
el programa
viene un segund o método llamad o main () , este método es el primero que se llama cuando
. Una vez
comienza a ejecuta rse. main () contien e las sentencias que crean y utilizan un objeto Saludo
. java. A
que se ha creado y editado el progra ma se ha de compilar el programa: j avac Saludo
continuación se ejecuta utilizan do la orden: java Saludo .
le .,de la
Esta orden produc e que el sistema J av~-~~ tiempo de ejecución busqu~ el c?~g~ ejecutab
el metodo
clase Saludo que está localiz ado en el archivo saludo . class y a cont1nuac1on ejecute
ma in ( ) que pertene ce a la clase dada. (~.Si? º se
La ejecuci ón de cualqu ier program a Java se inicia siempre llamando a un m_étodo main
se v1suahza el
e~cuentra ningún método main () en la clase dada, el programa-no se puede ejecutar y
siguiente mensaj e de error:
th
Excep tion in thread 11 main" java.la ng.No SuchM e ºªErro r: main
Nota
L ,, d llamada a otro método.
nu \Cntencia en el interior de un metodo pue e ser una
246 Programación en JAVA 2
Sintaxis
public static void main(String [] args)
,,
Ejemplo. La clase Parra fo contiene sólo el método main (). Este consta de una línea de código
para dar salida por pantalla a la frase "Este es el verbo" junto a la cadena args [ oJ de la
línea de órdenes.
public class Parrafo
{
public sta~ic void main(String []ar)
{
System.out.println(uEste es el verbo u+ ar[O]);
}
}
Esta clase se edita y se guarda con el nombre de Parra fo.java; una vez compilada con la orden
j _avac___Parraf~. java (la ~ompi:ación genera el archivo Parra fo. class) , se ejecuta. La orden de
eJecucion se realiza en una hnea, linea de órdenes, y en este caso está esperando que se introduzca una
cadena adicional:
Sintaxis
return;
return objeto;
----------- Métodos 247
Ejemplo ----------------------
int flex ()
{
int clorExtremo•
// realiza cálculos
re t urn c 1 OrExtremo; Y almacena resultados en clorExtremo
}
En este
resultado caso
a la vanable x. el valor devuelto por el m~todo
~e evalúa f 1 ex ( ) , se multiplica por 4 4 y se asigna el
EJEMPLO 8.1. El método calcularArea () de la clase Rectangulo se utiliza para devolver el área
de un rectángulo.
public class PruebaRetorno
{
public static void main(String ar[])
{
Rectangulo r = new Rectangulo(3. 0,7.0);
Systern.out.p rintln(u El área es u+ r.calcularArea ());
}
}
class Rectangulo
{
• te double base, altura; h)
priva . u bl e b , double
public Rectangulo(do
{
base - b;
altura= h;
}
public double calcularArea( )
{
return base*altura;
}
} ·ct
• ción da lugar a esta sah a:
Una vez compilado, la eJecu
El área es 21.0 ·
Regla ~~
sel tipo de retomo es void .
• ~~~~~00
Si un método no devuelve nmg ~~~~-~~~-~-~--
método que no devuelve ningún valor. No es posible tener ~ari~bles de tipo void. El tipo Sólo
~s un t'do asociado con métodos en los que void simplemente s1gmfica que un método no devolve ,
uene sen 1 ra
un valor.
Los métodos se pueden sobrecargar. Dos métodos con· diferentes listas de parámetros pueden tener
el mismo nombre.
Nota
El método .que llama a otro método es el invocador y el método controlado se denomina invocado.
El método llaI?ado recibe el control del ~rograma~ se ejecuta desde el principio y cuando termina (se
alcanza la sent~nc1a return, o la llave de cierre(}) s1 se omite return) el control del programa vuelve
y retorna al metodo llamador. ·
La llamada a un método
/ . desde
. otro de la misma clase y para el llll·smo ob'~eto se rea¡·iza escn·b·1endo
e1nombre y entre parentes1s la hsta de argumentos actuales Por eJ·e ¡
• mp o, sea 1a case
1 Semana
class Semana
{
public void listado(int horas)
{
int dia;
dia = diaSemana():
// ...
}
objet o.no mbre Meto do(li sta de argum entos actua les);
Los métodos s ta ti d
e e una c1ase no son metod
, os de los . . que son métodos
obJetos de la clase sino
de la clase. Por esa razón la llamada a un método s ta ti e se hace
con el nombr~ de la clase, el selector
punto ( •) Y el nombre del método con sus argumentos actuales.
nomb reCla se.no mbre Meto do(li sta de argum entos actua
les);
Precauc,on
.,
No se puede definir un método dentro de otro. Antes de que aparez
ca el código de un método debe
aparecer la llave de cierre del método anterior.
EJEMPLO 8.2. En la clase Matem se define un método que calcula el factorial de un entero. ~l méto-
do es static y por consiguiente se invoca con el nombre de ésta: Matem
.factorzal( ). La
clase principal llama a factorial() para enteros de 1 a 15.
class Matero
{
stat ic long fact oria l (int n)
{
long P = l;
for (int i - 2; i<=n ; i++)
p *= i;
retu rn p;
}
/ / ...
}
().
Pri me ra P = new Pr im era
; // er ro r, el ~é tod o go lia r() es pr iva do
p. go lia r()
s l •
p. a us tio (); // co rre cto
, es ta en el mi sm o pa qu ete
}
}
(1 fin de l pa qu ete
im po rt do lm en .*;
pu bli c cla ss Pru eb a
{
St .
pu bli c sta tic vo id ma in( r1n g ar [])
{
Se ?un da st = new Se gu nd a() .
pt = new P . ' !!. cr ea un Ob J'e to
Pri me ra rim era ();
1 s t . ba 1 s as ( ) '. ¡ ¡ 11 amada co r .
ro( ); // 11a m re cta po r ten er ac ce so pu bl ico
pt. ho me a co rre cta po r ten e r ac ce so pú bl ico
pt .sa lu sti o( ). // errad or , el ac ce so es l
} ' e pa qu ete do lm en
}
OS A MÉTODOS
8.5. PASO DE ARGUMENT
método sen J ava p
Los argumentos se pasan a los or va
l
or. Se hace u .
•
( in t' flo at ... ) o la refere nci a al ob· t d
y s na cop ia del tipo de dat o primitivo
~e o e la clase o array e pas a al m ., t d
e O o. Lo s len gua jes de
Métodos 25 1 ·
. ,,
como Java .
Programac1on • · .
,, dos valore~ Illlc1ales. .
proporcionan un mecanismo .
meto de paso de parámetros para permittr dar a los
Algunos metodos no n .
,, do sea genera1·izado Es eces1tan parámetros, aunque s1,, la mayoóa. Los parámetros permiten que un
meto d .
datos y/o ser utilizado en· un b;;Ir, ~n método con parámetros puede operar sobre una gran variedad de
cuadrado del núm~ro 25: n numero de situaciones diferentes. Un método simple que devuelve el
int cuadrado ()
{
return 25*25·
'
}
Ahora cuadrado () devolver"a eI cuadrado de cualquier valor que se encuentra entre paréntesis.
Ejemplo
int x,y;
Se suele denominar parámetro a la variable definida en el método y que tiene un valor cuando se
llama al método (a veces también se le conoce como parámetro formal) y argumento (a veces también
se le conoce como parámetro real) es el valor que se pasa al método cuando se invoca.
cuadrado(23 )
~
Pasa 23 como argumento
n recibe el valor 23
int cuadrado(i nt n)
{
,, tros no se 11·m1·tan a números ' sino que pueden ser cualquier expresión (tal
Los va1ores de 1os parame
como una variable) que evalúe el tipo. de valor a pasar.
EJ.:--e_m_p_l_o__---.,- - - - - - - - d - l l__a_r_e_n_u_n---:b~u-c-:le-u-:t~ili-:-.z-an~d-;o~u~n~a~v~a~n-;:.a~b~le:--:p:a:"f'.:a~d;:-et~e-=rm=in~a:r~el
El me todo por3 () se pue e am •
valor del parámetro.
~nt concador = l;
1 ntresultado= O;
While (contador<lO O)
{
Programaci ón en JAVA 2
252
resultad o+= unObjet o.por3(c ontador) ;
contador ++;
}
_
8 5_1. Paso de paráme tros por valor
Paso por valor (tambi~n llamado,,paso Pº: copia) si~nifica que cuando Java co~pila el método y el
código que llama al metodo, el metodo recibe una copia de los valores de los parametro s. Si se cambia
- el valor de un parámetro variable local, el cambio sólo afecta al método y no tiene efecto fuera del
método. La Figura 8.1 muestra la acción de pasar un argumento por valor. La variable real (dirección en
memoria) i no se pasa, pero el valor de i, 6, se pasa al método receptor.
En la técnica de paso de parámetro por valor, el método receptor no puede modificar la variable del
método (parámetro pasado).
void
metodo2 (int n)
{
int k = 9; ;
n += k;
}
Nota
La manera de pasar par.., t J
se pasa es una referenc·ame ros
1 b•
en ava es por valor. Cuando se pasa un ob1eto realmente lo que
~ . ,, J ,
la co • ) . ,, d ia ~. o ~eto, esa re1erenc1a el metodo llamado no puede modificar la (pasa
pza ' 81 pue en modificarse lo8 d t • b d 1 Ob'
objetos podrán d1·fi ª os miem ro e ~eto. Los arrays en Java se consideran
' mo icarse los elementos del array, pero no la referencia a éste.
. Métodos 253
EJEMPLO 8.4. ~~d~odd
me -'C.. e la ~~~~:;: 7 :----:-= --:---- ------- ---
clase princi al -;-
tros por valor. Se p d p , PorValor, muestra el mecanismo de paso de para-
mod¡-t::
:1icación no •pued ue l'e cambiar .ª
l vana
• ble del parámetro
en el método, pero su
class PorValor esa ir al exterior.
{
public static .
{ void rnain(string [J a)
int n = 10 .
System.ou't.println"
demoLocal (n) ; ( Antes de l larnar a dernoLocal, n = 11 + n) ;
System out .
} • •Println ( "Después
de la llamada, n = 11 + n);
static void demoLocal( '
{ 1nt valor)
System.ou t.println("D ent
valor= 999. ro de dernoLocal, valor = JI
+ valor);
'
System.ou t.println("D entro
} de dernoLocal, valor = " + valor);
}
EJEMPLO 8.5. El listado de la clase principal, PorValorO bjeto, muestra cómo se pasa la refe-
rencia de un objeto creado y pueden modificarse sus miembros dato.
class Julian
{
String fecha;
int dias;
Julian ()
{
fecha= 01-Jan-200 1";
11
dias = 1;
}
void mostrar()
{ 1 "+fecha+ "\t Dias = " + dias) ;
System.ou t.println(n Fecha actua:
}
// ...
}
Ejemplo
doub le grl( fina l doub le a, fina l doub le b)
{
retu rn (a*1 5)-(b *25) ;
}
d · t· corres-
Todo.s los parám
,, etros .deben de tener un tipo deter mina do , de modo qu e h a e ex1s 1r una
les (pará metro s O argum entos ) con el
p?nde nc1a _en nume ro y !1po de datos de _los parám etros forma
da al méto do.
nume ro y tipo de los param etros reales existe ntes en la llama
Los métodos abS tractos se utilizan en clases abstractas para imponer una cierta funcionalidad a las
subclases de las. clases abstractas. Los métodos abstractos se designan por la palabra reservada
abstract y no tienen cuerpo.
La implementación de los métodos abstractos se deja a las subclases. Por ejemplo, en una clase
Figura se definen los métodos abstractos calcularArea () y perimetro () que devuelven el área Y
el perímetro del objeto Figura. Las subclases Circulo y Rectangulo se pueden definir como sub-
clases de Figura. Ya que el área de un rectángulo y de un círculo se calcula utilizando fórmulas mate-
máticas diferentes, las clases Rectangulo y Circulo proporcionarán sus propias implementaciones de
los métodos calcularArea () y perimetro () .
Definición de los
métodos abstractos
calcularArea()
perimetro ()
Implementación de los
métodos abstractos
calcularArea ()
perimetro ()
r.perimetro());
system.out.println(ll El área del círculo es ll +
c.calcularArea() +
ll\t el perímetro que tiene ll +
c. perimetro ·() ) ;
}
}
.·. ,_. .,. ,_. _ . .,. ,.,., . , -~---·:" ~ .. ~:: ~r:.:~;:~:7~·, --'.7 7~ ,~~ -; ~z /; ·: ·- ·:, 7:-.:.: •- J~tii i -· -
•i F~
EJEMPLO 8.7. -Se define una clase con cuatro métodos sobrecargados, prueba(), diferenciándose
uno de otro por el número/tipo de los parámetros. En el método main() se llama a
cada uno de. los métodos.
El método p~ueba ( ) se ha sobrecargado cuatro veces. La primera versión no tiene parámetros; la
s_egunda tiene un parámetro entero; la tercera tiene dos parámetros enteros y' la cuarta tres parámetros de
tipo double .
. class Sobrecarga
' {
public void prueba()
{
System.out.println(ll Método sin argumentos.#);
}
s
8.7.1. Sobrecarga de constructore
a un con jun to de objetos con las mismas propiedades y comportamiento. El objeto
La clase describe tidos en el
do es creado se inic ializa con uno s valo res por defecto, o bien con unos valores transmi
cuan ctor. Éste
realiza la inicialización del objeto es el constru
~omento de la instanciación. El método que '
e tipo de retorno.
tiene el rnismo nombre que la clase y no tien rgar los constructores.
normales, se pueden sobreca
Además de la sobrecarga de métodos es,
en la may oría de las clases que se crean en programas se sobrecargan los constructor
Nonnalmente y entonces
no es una reg la obl igat oria . Inc luso -una clase puede definirse sin constructor
~un que · • .
sin argumentos.
llllplícitamente queda definido un constructor
argumentos,
MP LO 8.8 . Se define la clas e Rac ional con tres constructores sobrecargados; uno sin
' EJE tercero con un argumento que es 'un objeto Racional.
otro con dos arg ume ntos y un
entero. El
tener un numerador y un denominador de tipo
Los números racionales se caracterizan por núm ero racional o/ 1. El constructor con dos
argum ento s inic iali za el obj eto al
constructor sin
n en JAVA 2
Programació
258
1 dor y denominador respectivamente. El terc er
teros es para inicia. lizar e nume ra
umentos en • 'd
arg . ·cializa el obieto al obJeto transm1t1 o.
constrUctor 1n1 J
El ámbito o alcance de .
Si un método reco una vanable determina cuál 1 ,, . •
• noce una variable 1 . es .s?n os metodos que reconocen ciertas vanables.
pr~gr;ma :~ el que es visible una vari ~lv~able es v1s1ble en ese método. El ámbito es la zona de un
m !º o y .oq~~- Se puede desi nar: e. n_Java se pueden considerar tres tipos de ámbitos: de clase,
van.~~~e es 1nv1s1ble fuera de su ~mbit;a v~nable para que esté asociada a uno de estos ámbitos. Tal
pos1c1on de la sentencia que declara a la~ s~lo se puede acceder a ella en su ámbito. Normalmente la
anable en el programa determina el ámbito.
Todos los métodos de la clase Radio pueden hacer uso libremente de las variables de la clase,
independientemente del lugar (dentro de la clase) en que aparezca la sentencia de declaración. De otro
modo, el ámbito de las variables instancia de una clase va desde la llave de apertura ( {) a la llave de
cierre (}) .
Las variables instancia o variables de clase son automáticamente inicializadas por el compilador. •
Las variables de clase de t_ipo numérico (int, f loat, double) se inicializan a cero, las variables de
tipo booleana false. Las variables cuyo tipo es una clase, las variables array ,·yen general las
referencias a objetos, se inicializan a null.
Programación en JAVA 2
260
Ámbito de método
s.s.2.
. ble que tiene ámbito de método se puede referenciar desde cualquier parte d 1 ;
Una. vana declaradas dentro del cuerpo . de1 meto ,, do se d.ice que son locales al métod e Lmetod?· Las
1
vanab es e pueden utilizar fuera del ámbito del método en que están definidas º· as variables
locales no ~ ables declaradas entre la llave de apertura ( { ) y la llave de cierre ( }) ·del cue
ámbito del método. Tamb.,,
,,
1en 1os 1.dentlºfi1cadores de 1os parametros formales tiene
rpo del m,
. Las van , etodo
uenen e1 u<totalidad. n como ambito
el método en s
Ejemplo
double producto(double v[], int n)
{
int k;
double p = 1.0;
for (k = O; k< n; )
{
p *= v[k];
k += 2;
}
return p;
}
En product~ () las vari_ables ~ y p están d~claradas en el cuerpo del método y por tanto se pueden
utilizar en cualqmer sentencia de este. Los parametros v (referencia de un array) y n tienen también
como ámbito el método.
Al estar definidos los métodos dentro de las clases puede ocurrir que variables instancia de fa clase
coincidan con el nombre de una variable definida dentro del método, en cuyo caso la variable en el
ámbito del método oculta a la variable instancia de la clase.
Ejemplo
public class Mixto
{
prívate int n;
public double valor()
{
float n = 12.0f; // oculta a la variable int n de ámbito
//la clase
//
}
}
E 1 1 • , b' 1 lase· todos los métodos
_n acaseM1xto, nesunavariabledeti ointquetienecomoam ito_ac ' . ofloat· en
~:~~;~~ :ttad~ndacceder a n • En el método ~alor () se ha d_efi
nid01 :~:~::fi~~~;en su ámbito.
ª
e tipo f loat la que prevalece frente ande tipo int P0
Regla
Las variables definidas dent ,, . . . . d s or el compilador de Java. Es un
error de compila . ,, ro de un metodo no son in1c1ahza ~ pdO 8in haber sido inicializada.
cion acceder al valor de una variable de un rneto