Está en la página 1de 14

1

. \
'\..J/;.,

'.
"
\ al

u
. ;:'1 o .
;....
,\
\'
' <
\j '-J
"'

, ' e' ,
'<, / .
-&
3>'j
.
,:.
;.'
O, ' :;; ' .,: ' \ . :' .. "

.. . ...
18
MTODOS

.
' cla-ve
OBJETIVOS
0".\/'1/(:.\ dt' hubl',-I tla \' c .\/ I/ ,{(ul/) ste CO/ I / t l/Ir) 1/ \' 11 ' , //) / :'/11 ; :
"h.. L' P ITn" \;IIIl CllI L' L"n .: 1 <.." nl tlrll l ) de IIHa cI:l "C.
I Jil ercnci ar l'nlrr' 1111 1IIl; l\ l t! l) plihlic(I y \111 1l 1\;tudo f'1 i\",Hh L
1:lI h' ru, kr la iJllpli l': 1t.: il ) 11 que , i l ' l h.' d :It.: l ' '': ,,!) rtihli cp ':' d ;1CCC' S() por dClL"r lo ;1 Otlllll.! (t ltlP.
C t l ll \)(: Cr n i11l1) :Ipl kar los Ji !. I;II!O" :1 1111 11I t' l od n ('n la iIlJP!(' II\C,lI :IL' i (11l ' 11 :\ ..
I':l l::lr l': l l kllas ( ilra(.' l c n. ... d.-: "dt: la I, w :l rlf: '-Jldc ll cs .
I UII Itl r l n d o de.' \II ll\ ll: 1tHJ o () de d a"I.',
C'fI1PCe l j,),,; 1I1It ,do" 11l ;lt t' ll1 :i l i l' l" qlll: i nctl ..pora J i l \ : 1..'11 la d :l "t' "
CONTENIDO
X l .. k luuus.
,\ Il' tnuo Ji' q 1"
I "" \ ll ltu.: it i ll th v: dol'l...s dI..' un 1I\1.,;IO\ h l ,
!( .1 ,:\" ':':C:-:; O :1
de
:{ f d I1<.: 1I :h.: I I.l "':,
tk I IICIt"!q, ,
X;": ,\lIlhi{ \I
' l id:ltl
;-.: Ifl Hill iolCCi tll' ..1;1\:1,
Nc., ul/I ( 1/
r.:".,. It ' f O S,
Il n '/ ' I,' II /t,'5,
, Un m lodo es un mi niprog rruna dentro un programa. mtodos contienen varias sentencias b ajo un solo nombre,
. que UH p rogra.rn:t puede ul il i?ar l.ln<l o ms ve ces p ara e jecut<l r di c has se ntencias. Los m rodos ahorran espaci o .
.... reduciendo repp. ticones y ltaci t."! no ms fftcilla programacin;proporci onando un medo de divi dir un proyf!Clo
grande en mdulos pequeitos ms manejables. Este capitulo examina el papel (yol) de 10& mtodos en un programa
mt odos en Java s ie mpre han de ser Iniembros de una clase ; en otros lenguajes, como C++, pueden e xistir
modo autnomo O bien corno miembros de una clase. Como ya conoce, cada aplicacin o programa Java tiene al
wt metodo maio(); sin embargo, cada programa Java consta muchos mtodos de una o ms
en lugar el e un mtodo main () grnnele. La divisin del cdigo en clases y mtodos hace que las mismas se
e n su programa y en otros programas; De spus de que escriba n mtodo, prubelo y deprelo. se
i!i.zar nue vame nte 'una y ot m vez. Para reutilizar Wl m todo d entro de su programa slo se necesita ll a mar al
Por e l mecani s mo de la herencia; todo mtodo de una clase se podr reutilizar en Ja dage derivada.. Las
m todos mi emb ro se agrupan en paquetes c:te clases, d e tal forma que otros programas pueden reutilizar
y los m todos definidos en ellas, por esa raz6n se puede al\omu tiempo de desarrollo. Y dado que los
contienen clase. presumiblemente comprobadas, se incrementa la fiabilidad del programa completo. L.
de 'os prog ramadores no construyen paquetes de claSes, slno que, simplemente; las utiliza n. Es preciso
los paqueles que incorpof<l Java para \\ tlizN las claseS proporci onadaS yahorra:rse tiempo de aesarroilo.
ciaRes. los objetos y las piedras angul ares de la enJava, y .u.n b uen use
la8 basic;: s ya ,,:,.. aSl c omo de las propiedades avanzadas de l es le
porci0n.'l.I im UWl <J a 9 US ... . . i .... F'" i o::: \
re cur!:1 i'9idad !;() I\ prop ied \ d 85: c uyo cQJ1('II..:imien!o . : r Jt.l "11""':" :-f '' r: "
np!i cacione s .

f
244 Programacin en JAVA 2
8.1. MTODOS
La, cb ,e., con, l''' l lk princip:1\es: varia/Ies de instan" y mtodos. l 'n mu,do un
bl01jlle de cdi go que licne un nombre.. tipo lk ti po de rel orno y lllla de arg/lllle/llos Il
par,hnctros. Puede l eill."l (uuojn palaoras nsociaoas wJcs como s ta
l
' i r:: . r.act. y fi na].
Los rnlouos en Java :;C)U eyuil'a lenles a la, fuucion,;s de. las cl ases de C++. Con la excepcin de la<
sentencias dc declaracin de y vari ables. y los hinques de i"ic i:dizac in tocio en el
cdigo ejecutable cn Java $e si1a denlro de un m[QcI\>, U na uel'i niciu de un mtodo COU$ta de us
parl<?s: cahccera y cu. erpo.
Sintaxis
:. ipo n(":l!ut'ze ele
,1 / ('.EL mJr:.odo
..:
especiljc" el [' ipl.> de datos ,kvucllo pl'r el mtodo (cualql! ier tipo vlido incluyendo lipl
l
8
(lase que SI.! puel;w crear).
. (, el Ilt) mbre que identilka :lllllIOdo. El convenio suele f;;cr u(ili zar una lt':(f<\ para lo
primera lt ra del nombrc,
Si el, "lc)d no lkvuelve un vaJor. $Utipo de rel'Orno debe se r VQ i d . El II01pbre de l m.ll>do pll edt'
ser cualqui era disti r.t de ayue ll s ya ll lliz;\C los por /f('s el ementos dcn/)'(' de l mb il l) aCll1;] \ (no
ser igual a una palabr:1 lcscrvaua Java).
La /isla de {1cH'/IlC'l ros es una secuencia ele prcjas de y tipos de ,ep;ra(\os por
comas. Ll>, l'anin,etros son. [lI nd:lI ncntalmcnle. variabl es ' I"C reciben el valor ue 10$ pasadl'$
al mr.odo cU;1I1do ,'stc es ll amado, Si el mc'.do no liene parmdro5, en l.onces la lista de parmdros
V:lc.a.
I.os 1ntodllS l) UI" del' uclvcn a la rutina ll amadora un lipo de datos distinw ue ,!<.,j d deb<:: n ulilizar
uu" \:on la s.iguell lc
ro::!t '...u:n
';olor es una con el v:l lllr 41.11.": devuel Ve:! .
. '
'.j
- .-----_..._ - - -_.
1, "
Ejemplo
I
.
'.loi ':l saJ. udc.'1.ienver d.da {)
(
I
System .out. ,:rintl n (" i flola! ") ;
.peint. ("Ht odo llamado sal lldoBi enver:; o,,"); .
Sysl:.em.out.:c.:r.int.l n!" que contiene. r.res sent e u cias /'); "I
,}
- --_._--- - - - - - -
I
Un mloc!o se debe declarar siempre ucntro de una clase,

c. l ass
/1 otras de la e l. ase
void saludoBienvenidB()
(
;
Mtodos 245
.p::-1. ;1:::' / " todn i
C{ !.l A: t".res s":-:"i.:enci.:l s ");
FI 1l 1elou(l ha sido illscrladn ell 1Ii11\13dn Salud,) . Recordemos quc la clase ,e puede
lIl i l i zar para crear lit) obj eto 'f l os objeLos l c mJrn UIl mLOdo f! .
dcclarad" en la clase.
Ejelllplo
:';. l: P-':' ':::'d luc:o t ', ;
1 j ECC'. S:.3 lv,l'.\B ida ( ,1
ha <:re"do ll llul' ielo med iante cluso del operador "e de se pueda ut.il izar. All ora se
puede c rear un progn lllla complclo que llliJ iza el mtodo ( ; .
.- .. :)rog-::'::"ll1\
p ll bl i.r; (; }.::1::::; .:l-=:l l..!.d
. Gid
.. .. r :-. I. "J;
.. r :-.1. \ " ",'!.amCl'.!'.:" ..
;" 1'1 .' ) 1; : . 1. 1. . 1(" :]'..lE" :res
\ d,'11 i: "r::: i.i --< L'::-'.(f : ll ': l
llP\,,} '3,3. 1, ( )
'3::" ..) .. '. ; :
ESle progr::un:1 contiene dos declaracioll es de Illrouos. A continuacin de '?'aL'JdoBien,-,-=, n id3 ()
vienc un segll udo 11llOdo lI alllauo ma i.n () , mtodo es el primero que se ll ama cuall uo el programa
comienza a main () conl j ene las que crean y urjJizan un obj el o Saludo. Una vez.
que ,e ha creado 'y cuilado el prC'lgrama se Iw de cOll 1pi lar el programa: javac Sa l udo. jaa . A
contil ll1 ;u; in se cj ccula util izando la orden: 'jnva Si'l.luc:lo.
ESla oruen produce que el SiSlC1Ira Jal'a en tiempo de ejecucin busque el cdigo ejecut ahle de la
.
ela, e Sa l udo que es t( locali z.ado en el arclJivo Sal\1<1.o . class ya continuacin ejecute el mtodo i
mai 11 () lUe pe11enece a la cla,c dada.
Ln e jecucin de cualquier prngrama Java se inicia siempre ll amando a Ullll1todo mai n (), Si no se
cucueul;'a ningn mt()do mil i I\ () en la uada, el programa no se puede ejecut ar y se visuali za el
j
siguiente men,aje de error:
i
F. xcept.ion i n Lhread "mai n 11 java. lang. NoSuch!-1ethoc1Error: mai n
..... .'.
"
Nota
..;
,..
{.In en el iJiteriiir de m,todo puede sr ir. otro mtodo:'
/
-,
I
246 Programacin en JAVA 2
,
i
8.2. MTODO IvIAIN ( )
Tuuas las apiicun'o l1i'S Java Ct.\ lI\i cnzan al mtodo !ua '.:'1( ; que se en la clase cuyo
llOmbrc ha d;1dn a la Ol :quina vlctu:J 1.bva (.JVl\:I) pari. \ co me 11 7ar la ejeclIcic)1l del programa. No
hlda:) las da'\es nec('.;; itan un 1:',: 1, ' 1 () , c;; !pl.as que son t:"1 punt () de alTHlque dd progra ma.
El mld n :f1? in ! ; dedara ;:'. .:'1.::: ya es tlalltado por la Ill iqllina Java en tiempo de ejecucilI
de qu e cr ee cualquier objcro. I.. os que :-; e pasan "i mtodo ma.: 11 ( ) puede n ser
cllalqlllcra la lll C'-a de que se introduce cuando ejecuta d prograllla.
Sintaxis
;'; :'dl . L . .3,..
Ejen1plo. Lo dose ..... 1 t' o contiellc el /II aodo i :'}( ,:. .qC r:Ofl SfCI de lUlO lnr(l de cr/;go
puru d(/ .'- .\alicl{f {Jor pwlfalt...t u laJi"loe .,1:','1/ (, (J.' ell'erho " )11.11/0 a la codellu Oj de la
lnea de rdcn es.
.11:' 11.(.: . .: .) .'
. I .. ' : ,";:" J. :- ve i.. J :11 ,.1 j n t )
,::,l 11 .,.
dase y .... e g.LlanJa ..... llll el !Hlll1 b h:' dc P:"i j .,-,.-.' 1.lna vez Cl.. Hllpil ada (" 0 11 la t Jn k":1l
; ,_. 1 [ e': [ . l '''' ' '' ! !(\(:l'mpiL.lCi611 gellt' rac'l archi vo r .t. : .: ' i:.) . ... se ejccuta, La urdclI de
ejecuci n se reali za en Ulli.\ lillea, l/l/ ca de J ('11 L';l !'O 1;:<:i l que inll"oJu7,C<t una
...:- adl"[[(-\ l dicj(mal:
j 3"/ ,1 pas ear
la , ali<la pOI panl'lll ,,:
e s e l ve r bo
Los de las lneas de 6rdenes se cOll sideran argumc ntos <l el Illlodo rnain ().
.8.3. DEVOLUCiN DE VALORES DE UN MTODO
La sentencia r e t u .m utiliza rara salir dd mtodo actual y devol vcr el valor especificado por el ripd
de retorno del mtulio. Si el lipo de retomo del mlodo es voi d, la [Jubilra reservada return se Ul]IL1
sol o.
Sintaxis
re turn;
r e turn ob jeto;
Merados 247
Ejemplo
'":.: ' t
:'..u !:
:: l lr 2el:r.-3 cp su] t:-'.L:: .::: '':::1. r:, ': ::-: :: Szt:: ! '21r O
re t. J r r
------ ---_._ - _. ._-
Un llIt odo \e pu ede ulililar como si tuviera el 'alor devuelto en la ex prcsjllI <l c relorrw
,:i.,t :-c '"'< ':; _1:
En r, lc Caso se evala el valor devuell o por [:"'0'.1) , se IllUlliplica por y se asiglla el
resulladu a la \" ariahle ::.
EJEMPLO 8.1 . I:! mlOdu () de la elose RCcI{/ l1gl/lo se l/liliZ<1 pam dew, hu el
de 11 11 rCCfllglllo,
c l aEs ..)
!,"'ub l .i ,,-.-. ,,!r); -i
_: llI2\\" r-el: :_<..l' "'. ,;, :.:. l o ( 1 , U ,7 . (; ,
r? ,. +- !"" .
c l . .O:: ;: ...-.,,, I ,:'1
::: r:' .:7t: :"::' :, t.I;:;' :
'1 : P..ec\'. i,1rl!J'.I >,, ac I: l:'.! ,- r:-, :1C'.. h )
I.' j
>-_ \.2 "c.;l. :-:; 1:;

l 'etur tl base* a l t ura ;
Una vez compilado, la e.iecllciIl Ja lugar a esta salida:
El. ,h e" 2S 21 . O
,Regla
.' -"
rit Je a. ' ;'":,.. ' "
Un rnlo<lo declarado COI\lO:
v o t d marC0 ( ) ( ... )
[
248 Programacin en JAVA 2
es un mtodo que no devuel ve ningn valor. No es posible Lener va rialdes de lipo \'o id. El tipo s(l ln
Liene sc' llliuo asoc iac:o COllllllodm cil Io' que ',u, ,:I si .upleme. nte que Ull lllcwd,l no devolver;;
un
Nota
Los mlOclos se sobrecargaLDos mtodos cOll :diferenle's lisias 'je tener
el mjsmo nombre'. .
Nota
'10 ie1 es un tipo ele datos que no tiene ning.n "aloi.
3.3.1. Llamada a un mtodo
Los para rouer ser ejecuLaul". han el e ,el' lJ allladp, o inv"<':l c!os. Cualquier puede
Ulla Il all uda a UIl mt odo que rcdiri gir.i el (,Olurol del pn)grafll<l al m01pdo notnbradl),
:-;(lrttWllnClllC la ll;llllada a Un mtodo , e rcali 7.ar un ,nlodo e rJase. (ksde el
principal 1) , aunque Il;:lIU r alJ1!entc wmhi n podr:i :-: CI" UIl de la mi sma clasc-.
Nofa
Elmtod\l que ll ama J otm mtodo es el invocador yel 11llOdo c{l ntrolao se denomina invocado.
ll <l lnado recibe. t'i contro l d,'1 programa. se cjecula desde e11JL'illl.;ipin y nWlll.lo lermi na (se
Z!CJI1Z;) la ret i.tr: n I () llave de cierre (}) se omite reCl.lJ::l ) el coulro] del jJl'ogranla vuel ve;
v rdorna al. Illtodo llamador.
. La llamada a 1111 ml odo desde otro de la mi sma clase y para ellll is mu objeto se realiza csc biclldo
el nombre y enlre parntesis la lisra ue ,Irgulll cntos aClualeS. Por ejempl o, sea lo clase
c J. 0. SS
publl c v'J i.c1 list ado {int horas }
int dj.a:
(3ia t3iaSemana():
I .. '
ln t diaS9mana () ( . " )
Semana nueva =" ne1.' Semana () i
nuevu .1 i.st \do ;

La ejecucit.Jl riel mtodo .l i stado (1 supone la llamada al mtodo d j aSe"",,;> (l de la lllisma clas
y para ellllismo ohjeto.
.-;:.
'.
!\1erodos 249
La llamada a LIII mtodo desde un ubjr:: to se reali za con el nombre del objeto. e l selector pu ni D ( .
.' el Il ombre dellllt odo con 'u, argulllel1l0S actuales.
.) bJ <2'::',) - / 1 1s!:a :" ;.l Ct '. :a 1 es) ;
Los 1l1,slouoS 3 [' 2.,,; e de 1I1]U clase 11\ ) 'Oll Jll todos de los ohjetos de la e 1:lse, sino que son mtodos
(le la cl ase. Pllr esa rnn la llamada a 1I1lmtodo c" .r. i c se. h"cc con el nombre de la clase, el selectO\'
PUll to '. . l' v el Il OIIIbre delllltodo con sus argumenl os actuales.
'3 S e . :..otlo ( Z.7 .s t a de , e .s ar;t ,; i
Precaucion
No s'e puede defillir unwtodo dentro de Ant es de que apareica el cdigo de un debe
. aparecer la llave de cierre delllltoclo anterior. . .
__ .. _-- - -_._. _..- ...--------- - ------
EJEMPLO 8.2. : la e/ase ,\Ia/cJII se defille 1111 m(o"o que c"icl.Il" el fac/ orial de "" eII /em. Ell11LO'
do es sfo(' y por consiguiente Se nroca COII el nombre de t!SIll: ,'\.1llll'J"nIactorilll( J. La
c/ose princi)(.d llama Jara de la 5.
rJ-:: 1.: .-'1ll
a::" t i: rt. n )
L,-::: n-:r r .1.;
:: :;::::- " , ' j, :::: ,_: . :-ll ; i.I1 \
!'1 j ;
'I..U":
class
(
s t atic void maj.n (St.r i ng( J a)
final i.nt M J.5;
for I.i.nt n = :.; i <= .!; i++)
Sys t: e:n.out.pri ncl n( n.;. "! " +
8.4. ACCESO A MTODOS
Cada mtodu lielle un tipo asociado que se utili za para controlar el acceso al mtodo. El tipo de acceso
puede es/al' ausellle (no se especifica), publ ic, p rivate o p rotect ed.
o Un mtodo publ ic (pblico) se puede llamar por cualquier cdigo que tenga acceso a la clase.
El mLodo main () , por ejempl o, se declara lUbli c, ya que se ll ama por el sistema en tiempo
de ej ecuc..'j/l ll.
---r
!
MtorJos 251
250 Programacin en JAVA 2
'::l en mtodo PI;': ,.-, c. '> (pri \' odo) s (,I " se Plledc Ihll)'lar des de ,, '1'0 Illtodo de la d ase que se
ue Gue e1 l1l. t"do privado.
:::J L II mt odo (prolegido) s,' I!uedc ll a mar des de Olrt' m Lodo de la c l" se en que d
Illwuo eSl dd iui c!r.' y por olm mtodo de cl ases que hereu"ll de la clase en que esla
defi nido el 11I .[(>do. Tambin est di sponible en cual qui e r oL'j ero de las clases pel Leneeicnr cs al
mi s mo paqLl ele (fue la cl ase en que eSl deliniun e l m ll.luo.
U S i no se espec ifica niJi gllil tipo de acceso, se ujli za el acceso por defecLO. que si gnit e3 qU: e l
mtodo es accl!sible a lOUa$ las contenidas e ll el Ini s lll o paljue le, pero 110 es lI l' l' es ible 'un;1
de ese
..__.__._ -----_._-- - - - - - - - - -- ----_.
EJEMPLO 8.3. EH 1m !>a'iuelc se decl,,,wI vor ic.IJ chl.\'es. Il e/len ",,/oclos CO/l c!isl/lllos niveles de ({rO'.Ir>.
pacl:.sg e d 0 J.!I.: f - . i
j '.: (:: 1 .:\S5 1:"1',:. IH'.: '::' ,J
o vo i d
ic E: h OEl erc ()
t i ;
p!: o ce ,::c e d "/'J i,j ju:::.:es l.:e () (. .. 1
:;' :.. : t-:.g { ... }

:':l . t..:.. . i C
. . -,:, p :; n:\" ? l 'inlPJ: ";( l;
, l .:. ... '; 1:' . .!... ( i p [ '.i v a.:::)
.: ..t;: i / .' (:= 11 :r, isl r,.' )P:.:':!.Ie::. :,,:
f. :n P1{.t1:.:?L -?
i:fl.}",O!.'t d ol c.en .. ':'
pU;J' l i c c l as$ Pr l..! '?ba
P1l b.l. i c s t: at i c voi c1 Ellt i n (SLti ng C\f.' f j )
(
Segu.nda new 8egu:'1da () i / crefl u n ob'; e t. o
Pr imera p t: n(?i,v
i .'/ llamada POL' tener :lCCe50 pul)l ico
p t.home ro () ; // l l amada corrl:: c t a po r t ener l c ceso ph Li.co
p t . 1. e () ; / / e rt' o-r- t e l acceso es el paque t:e dolmen
8.5. PASO DE ARGUMENTOS A MTODOS
. Los argumentos Se. a los mtodos en Java por valor. Se hace UIl<\ eopia cI;llipo de elato primitivo
(l n r , f loa t ... ) o la refe re nCia al objeto de la c lase o anay y se pasa nlll1<!lodo. Los lenguaJes de
"'"]lO .lava pmporc iOlfalf un mecani ' lfll) de paso ti c par a pe rmilir uar a los
melodo$ val ores
nl odn, no neCesitan parmetros. <l UIKllIe s la may()r n. Los parlllelro:-; permitell que UIl
sea gcner: J ilado. decir. uu IlIet odD con parmetros ruedc operar sobre una gran ue
datl1s yio ser urili w do e n Uff l'ue n nmero de s ituac iones diferentcs. Un mlodo s irnrle que dcvuelve el
del 1ll1111c..' ! n
lll r:. 1,,' I )

ESle llI todo. <i bien devue lve el clculo prc\' i:; [o. en realidad no es liti l por 'u limitacin. Sin
elnb"rgll, s i se flludilic:J ue [\Iodo que ace pl,- un par;it lf et:ro c uyo valor sea e l nmero que se desea ele" lr
al clIllllrado. entoll ces r; udcl.'."do () slIck ser mucllo ms lil.
L!:.t
[e L 'J. :cn
A hora cua,dr ::tth." ) uC' yol ver el cuadrado de c..: u:tlqui er valor que se encuentra ellLre parnresi s.
Ejemplo
int
C l,:,":';\ .l1:,"'. k ' l. ,1,Ol :
1 0; x a
::'5\; l .i :
y
.';' :.:., e .:> 1. 'V" L') l 'ji
..__.__.._.. .. - --
Se :; uc1c den0f11ill ;lr par" lll t-.trO a la \' ''Iiabl e deli llida e n e l mtodo y que li e lle UIl valor clIall do se
(a \/cces t:llllbi n se le I..:UIIOce c nfllO l,orf lIl efro y orgl/11U!llt o (a veces tambi n
:;e k C(lJJ OCC como par,nlclro real ! es e l I'alor 4ue se pasa almlouo cuando invoca.
CU,\dC ; (j fl l
. Fasi'i ]]
com':1 <'11' ywuell t o
suadr arl0 (i nt n) n r e ci,'e el 23
LQS valo res de 1o1S panf1l e lrns no se limiran a lI meros, s ino quc pueden ser cualquier expres in (.tal
CQlllO un:! variable) que evalle el ti po ue valor a pasar.
1, Ejemplo. El mlOdo por .J ( J se puede l/alifar elt /lit bucle lIIi/l cwldo una variable para determiltar el
I'OIr>u /eI {larllfelro.
i n t c ontador = 1;
i nt r es ult a do = O,
:;: j.'

(con t.\ o:1or <100)


'" .o:
- ------
T
i
252 Programacin en 2
L'es l.l,t0do .,=
contaclcr I '.;
o inc luso unas Hu :;; (ajes como:
J , 1:'2:':U ,; :: .3,(10 ;
J . ::' ,=:, s'1 1:ac....) ( ":0l1t.:::I:J.' I, ) );
8.5.1 . Paso de parmetros por valor
['"SO IJOI' mlor (tambin lIalnado paso 1'01' copio) significa que cuando .lava compila el l\llodo y el
cdi go que ll ama allllslodt>. el mtodo rec:ihe Ull a cOI,ia de lllS valores de los par<lllelrO{;, Si se ca mbia
el va lor (lc Ull parluelro variable local. el camhio sl'do al'eela al Intodo y no ri ell e efeelo fuera del
111 t0uO, 1.;1 Figura 8. J muestra la accin de pasar un argumellto por valor. [.3 va riable reall direcciJI en
menlpria) .i no se peru e.t valor de J, h, pasa al mtouo recepfor.
En la tcni ca de paso de l'nr<l1l elro por "<llor. l mtodo rL'eepl.or no puede mo,Jifi c:H' la variable del
lIltotl" Ipar: nl Clro pa,; adol.
c -::. 1M. t od{)

i 6 ;

' ,')
6 6 t
c,c


','.:
wet ' ,yj::2 (i nl :
illt k =
n 1"0.. k ;
Figura B.l. Paso de la V() ri 8ble i por valor.
I'
< " ..r.._lo':' :

i
i..
V
'I-.."!
t "
'[

:"' ".001
. .
Mtodos 253
E.JEMPLO 8,4. El lisla,!o de /0 clase prill cipal. F' tni, -,!lor, III/"'Slm el J1/ccwsmn de {Jaso dp pw
1II (;'lrO,'i por J 0101: Se j)/(ede cll1l1har la varir.rble del eClrmefro !'I/ el mtodo. pelv su
llf1dUicaciJI no puede sal ir al exterior

s ' ..: rr.a l n(St: : i!lg[J a)
:o.
" [::';f.1?,r .:t rlc:nc.L'r::01. j) :; } ;
l_iew' 11 ',)C.:11 \;1);
::3/;-; t , : n; . .:)1..1!:.. 8 r:: la n n ), j'
s l:'At ic 'le:l
(
('h=:::noLcr:'il, liu ! or va.:'Ot'\ ;
:a. :'C'r :-;; 99lJ;
I/a lor' \ -,:110"2: 1;
i\ 1ejeeutar este se visualiza la salida:
,).,nt '2:'; -::e lliJ.I.....IJ.Y" 3, .. .... oC :'i.: j n = .LO
\ '0 le ;l,::; I'JL..o cal, "/t'., L :H 1tJ
,Je l , '/;:lor :.:
de 1 ;) :1 .:: .: r!
------_._----------- ----------
EJEMPLO 8.5. fllisac!" de 1<; dI/se 1'//cil ,,, I, 1oLnL,c", .; C', II//f es/I''' C0l/10 se {J(lS(/ la rcf;'
reneja de l /1l objeto creado y lIIodJ-icc/I"SC! S{(S IIlcmhros duto,
,1 u l i:=.n
f 0 ',-:: h:; i
int. !:'i eS;
Ju l'iclTl t)
= "Ol-Jan- )OO .''';
cEas = l,
vo i d rnost:c 2 r()
Syscem. ou t. pr5ntl.nl"l.'echa ac t ua l: + f echa + "\ t Di as " + di as ) i
1/
c l as6 PorVa l orCbj eto
(
public stat ic void main(Scring() e l
(
// crea objet') de la clase Jul ian
JuJ.i. a n jan = ne','1 Juli an(),
/.1 mU-8st,ra \.:tLor es a.<::: t'Ja l es
I
254 Programacin en JAV'\ 2 MlOdos 255
d l?1. 1. I?n c:-'?:,;1ci')n."} i 8.5.3. Modificadores de acceso
i ,;:1 :." ' . r':, ( ( ) ;
;',' 2'. Lr:trJ'o (.:,.lf'" mudi':: ' .:.'l 0() -jr:::t o
Dentn> uel dell'llI.odo el parmctJo n ilrgllmel1lo 'e utiliza co rno cualquier variable. dc modo que
i i. ,' .. ,3 ; i ;
si desea L/li el val or " la variable no Se C:lInbie er preci so que el'l la dcelal ac in de
s i ; e:n . V.Jl. . ;::::"':" ln. ( " prop j. .. ,2: 0 1.' j r.;>c o f. :GCl cl,J .
p:> rll1lctl'Qs ,11 nOlnbre del par:lllclro se al'ltceecl" cnn la palabra reSrV'lcta f i re.' } .
('
60IJblc ; -tl. :<)
void <) bJ'
i x*? S . ;
S t- ':' ce,n .t as obj

l . ,l j. ",1 s ; T.,1palabra rcs''''vaua ti 'VI'. hace que el valor de " no se pueda modi [J ear dC.)pu s que haya sido
il'liciaJi l.ada. Si i"",. 11 0 e"l: presellte en la decl:lracioll, enlollces el va lnr el el par:l1letro se puede
1I10diuca r dentro del ,:uerpo del mtodo. La eleccin del tipo cle parmetro debe se r rea li zada por el
progrulllador seg\1l el CDnle.xto ell que se ejecute el mluuo.
Al ejecutar este programd se visualiza la
l lo?: ,.J u j e t ,) :: .. l"'2ClCi C'!1.
8.6. MTODOS ABSTRACTOS
Ve .:Il,) l - .. ':' 1i::5
.:t-7:. .. ,,1L:j i: :' ()
1..", rntouo, abslraetos se utilizall en clases abstractas para imponer Ulla cierta fUllcion,lIidad a la:;
. leo) ' I : ]) -:"dS 2-'::
.\uklases el e las clases abstractas. Los mtodos abstrilctos se desjgnan por la palabra reservada
2l.bstrAr:: I-. ji lln tienef! cuerpo.
La implc111elllacilll de los mtodos ,,1),1 ractos se dej,' a las subcl.ases. Por e jemplo. en una clase
8.5.2. Lista de parmetros mltiples : ; _. I.lr ,"3. se !l en :l.bstractos -:- !. ':: L 1 2.:::/=:.1 ;::: 3 ( ) y :' P'. C: t r o (} que deruel vcn el rea y
el perlllclro e1 el (': \=r ll ra. Las I--::ir cl.llo:: y ?.o;Jl.! l o se pueden cletin))" COllll) sub
Un l1l tooo pucde lcncr cualquier Ill IfIC ro d 1':Ir:'llllcITO.I. v se pucue declarar una lista de paninletros eJl clases de Ya que el .ire:l (I Ull y de 1111 crculo se calcula uliliLalldo fnl1ubs mate
lg,lr un rinieo parmetro. En este caso la lista de l'ar<lllltrOs es si IIIJ'krllclllc Ulla secuencia de ellos <..Iifcn...'lHcS. r]:,es y (:irr: 'llo sus de
[J1)L" Cllll1as . CO\1 mndifica0ol" f si se qu e nin glin lllodifique SI! valor. los '::-;'1:'.:1.: 1.?I:",!\::ea.(.1 y
,in clll\odilicaclor el! caso cOlltr:lIio.
Definicin de los
mtodos abstractos

r;a l c l!lr.! ':""J\ r e :l (;
Ejemplo
per i 11:.t: i- ( I
.------'
.lL,ubl iJx.l r (i..:.. a. L Jol.lh1e .3., i. dcuble b ) l
/

i
Implementacin de lOS
mtodos abstraclos
(" Circulo )
calcularl\rea ()
"------
perimetro ()
"-. -""""---'
EJEMPLO 8.6. /J programa Pr-uebaF'i gura calcula el rea.1' el permerro de las Jlgl<J'as geonz
Irir:as C. cu.i e y Re,-"catJgul o. La ill1plementacic5/l de las clases)' mtodos abs
l
rrocte's de lajerorquIa CII-"O slll'erclose es pj.gUL'el se encue/ltra en el paqlletejigllras.
[,"
i..mport. f i. 9 1.\1"2.15. /(;
1::
I
public class FruebaPi. qlJra
Todos los parmetros deben de tener un tipo determinado, de modo que ha de existir una corres
i
pondencia <::n nmero y tipo de oa(Qs de los parmctros formales (panlo ll<::u'os o argumentos) con el [ "
publi c statl c void mainlStrinq ar[J)
nmero y tipo de los parmetros reales existentes en la llamada al mtodo.
.1.
(
k
Re ct.angulo r = """ Rectarlg u lo(7. 0 ,9.0J; 11 obj eto Rec tangu l o
; llamada correcta a grI Ci.r c u lo e = ne" II objet o Circul o

.
g rl (5 , G,O . 25 J; l/anU/da //0 vlida a gi-l Arpa del rect.ngul o es" +

256 Programacin en JAVA 2
r . ('I.ll.J.L\ l c.; ,-:-,. r )
JI. ,:,:. f:"<. Lisn0
;
' ; (leL es
1- . ' ,1. J t j
I ." :' rr p- e ,:' ) l l1'=: t !. 11 I
e () ) ;
8.7. SOBRECARGA DE MTODOS
Ln Java es posible deli,, ;r dos o ms mlod"s deil lnl <.le la misma que companan el llIismo nomhre
v las decl araciones de sus parmelros sean di krcnles. Ell este caso se dice que los mlodos :st(n
.. i1dos v el fCnlTlt' lt o se conuce C01ll0 de mtodos. La so brecarga es uno de los
procedin; iell lo,' l11cdial1le el cuul .laya impl ementa
En las U,rlllad;rs a lus rn10dus el cOlll [J il auor dclclllIil1a cul cs cl lll tUJO il1 vocado
basndu':il" en el nmero o tipo de argumt!nlos [J8sndos. P\) r COl\ sigll iell Le, tos mtodos sohrecargads
deben di Ccrir en c.l nrncP) o..tipo de sus p;.1nmetros. Cuando Java e nl: UClltri.l lln8. lI amada :l un mtodo
ej ecuta la ve rsin eJ eJ mtodo cuyoo; pnrlllClfns (Illmc ro y tipo) coinciden COII los
1IIilizac!c' s en la
Regla .
,Una ilamada a uumlodo sobrecargado no debeser ambi gu de ,iroOo q ue el rueda
deci di r inequvocamente eul es el mmtlo . . . .
.. . - - - ---_.._-- - - -
EJEMPLO 8.7. Se 11110 clase ["011e/lalro /Jlti /odos so/lrecarQlldos, pruel!ll( l. dil cncilld(ls('
UILO de o/ro flor el /llJII O'o/ tiflv de los En el JlJtodo J/1l1 i/l () se llama ({
cada 1II1O de Ius lIllVdos. .
El mlodo pruel"l '.) se lla sobrecargado cuatro veces. La primera vn;in no liene parmetro>: la
segLlnda tiene un panlll lro enlero: la tercera tiene dos parmetros l'nt eros y la cuarta tres de
lipo cl ou.ble. ..
c: J ass Scbr ec ;u 'g;.,
publi c vOl d p rueba ()
(
System.ouL . print l n(" sin ") ;
11 Sobrecarga de pruebal) c on un pa,met ro tipo
publ ic vold pruebali nt x l
(
Sys tem . out .pr int(tr coro 1 argumen t o . ");
Sys tem. out .pri c t l n{JI x " + x );
T
Mtodos 257
p ub li c vo id plT:eb.?\ (ill t x, int y)
(
System out. print (" (il t.odo con 2 argument os. ");
:( = " + x "; y = " y);
1/ Sobrecarga de prueb?c \) con tres parmetros
puhlic ",.oj el prup. ba (do'.lb l e :-:, double y , z}
(
out. print M todo con 3 arg u.men t 0 s. ");
S":f Gtem . out.println (\\ :: ,;- :( +
"; y = " ... y + "; Z ': " + z) i
j clage el m todo nta i n()
class DemcSobrecar ga
p1lblic st.'!l cic voirl. ma i nl St :r.. i ng (J a r)
l
Sc)breca rga objeto = new Sobrecalga ();
/ / l lamada a 1:>5 sobrecargaci.o s
r. bje t o.po:-ueb.:r() ;
ob j eto frueba(2 91;
obj e t0.pr ueba I2 1 , 1 9) ;
objeto, pnreb<'l .S, l O. U, 5 .l);
._ _._-_._-- - -
U ll a vez C01l1 p i [;1(/0 ! j a ".;"3C j la t'.t'e u c.: i 6 1l ( j ava SobreCl .rga) d(\ l ugar a
c,ta sal ida:
Mt odo s i r} ay gume:t0s
f-1 t.odo cC'n 1 argum.?n to. ;.: .:
con argulll eJJtos. x 21; y 19
Np.t.odo con ar.gumentos. x -;: - :2 . 5 i
Y = 10 .0; 5 . 1
8.7.1 . Sobrecarga de COll5tructores
La clase describe a UII conj uut o de objelos con las mi smas propi edades y cOlll portami ento. El objelo
cuando es creado se inicializa COH unos valores por defecto, o bien con UII OS valores transmiti dos en el
momento de la instanciacin. El mtudo qut' reali za la inicial izacin del objelo es el constnrclor. ste
tiene el mi smo noi rr hre que la clase y no licne tipo de relomo.
I\ dems dc la sobrecarga de nrlodos norma les, se plleuen sobrecargar los constructores.
NonnJ llllente CII la mayora de las clases que se crean en programas se sobrecargan los constructores,
aunque 110 es una regla obli gatoria. Incluso -{lil a cl ase puede definirse sin cons tructor y entonces
illlplfci tulll ente queda definiuo nn construclOr sin argumentos.
'j
!
"
",.
: . L .
[ '
EJEMPLO 8.B. Se deJille la clase Raciol/al COI/ tres constructores sobrecargados: lIIlO sil/ argllmentos.
Ol IO eOIl dos argumeJ1 tos )' un lercelV con w argumento que es "'J Racional.
Los mirneros racionales se carac terizan por tener UII numerador y un denomi nauor de tipo entero, El
eOllstruclor sin argumentos ini ciali za e l objeto a l nmero racional 0/1. El constructor con dos
11 Sol,recarga de prueba 1) con dos parmecro c.ipo int
:1,:,
",q"'-I"';;",;

T
258 Pro!}'a1nacin en .lAVA 2
:..trgumcnL<.X; t',":; para ini ciali zar d numerador y dC. IH1l11ilwdor respecti vamen te. El terce r
CO)hrucl c r iniciali l.a el l)bjcto :d
r: la f.' s Raciona l
p!" j vate dencminadu.r- ;
pllbl.ic Raci o nal( )
!
l
O;
1;
\. n I: de::"lOminad01 \
p ublic nume rador,
(
:hi s. !": fllilneradOt':
tl is . d EnonL'_nador =: denornlna d r;
p',Jb:L 1C PQ.::iOD:-'ll ( Raci ona.1 1:)
: nlmer acl0 !' n umerador i
c1p,nOm"1 q;;'\ CD!: r. ellc>mina. d o : i
publi c Rac i on.al sumar: (?2'l.ciona 1 r o'::)
(
ne\' Rfl Ci o ne>;]. ( nurne.':".?ldor: .. 1.:). !.l w ner3 dnr,
f.":lC i 0 1Hll
de nominado r + r:::':. d,::'l tlomi na c!',:: r i ;
r etu:rn ;:ama ;
/'! mr- I:: -:: :10S para opera,l' ,:- 0i1 nrne t o;;i }:3(;j Qtldles
O'.lbli c \ ' C) .j ( /
-(
+ \\/ " dencminador );
1\1 crear l)bjetos R8.ci ,l tl al se puede hacer uso de un construclor II otro. segn como se desee
inicia lizar. En esle progr"llI<1 se (-,bj elos y se muestran por pallwlla.
c laS9 DemoRacional
publ i c s t a tic void main lStr ing 1] a)
(
Racional r' l, r2. r3 ;
// crea nmero r aciona l 0/1
rl ne'" Rac ional () ;
// crea nmero racional 1/ 5
r2 new Racional {l,5);
// crea r ac ional .i gual que r2
rl !leW Raci onal (r 2) ;
r3 r2.sumar l rl);
Systetn. out . print ("r l = "); rl. mostrar () ;
system .out.print("r2 = "); r 2.mos trar( );
system.out.print("rl+r 2 = "); r3.most r a r( );
Mtodos 259
i
8.8. MBITO (ALCANCE)
E.I Ctmbito o nJcance de una "adable dcrerminu cules S l)(] los mtodos 'lue reconocen ciert<1s variables.
Si Ull 1I, rndo reC(.)(IO,'e una \ari abk. la q riablc es "i,ible en ese mtodo. El mbilo es la li UII
en el que es vis ible LllJa v.uiab\e. E n J::l. \'3 c;e pueden tres tipos de imbitos: tic clase. .
rllt c do y hloque:, Se puede designar ulla vnriable para que es[ asociaua a uno de estos llllJitos. "('ti
variable es invisible fuera de su mbilo y slo se puc::de accecler a dla en su mbito. NOnllJllIlente 1;,
f1 us icin de la dcc l'lra " la variabl e en el progra ma cJ etem"" el ;lmbito.
8.8.1. mbito de la clase
L,,, ,ari,,\ll es instau,' ia cn uua dase [i"nen mbilo el e lodos los mtodos el e tadase. Pueden
el' refe' l' cuciadas pur cualquier mt'dn en la clase conrplelil: tal es varial)l es se pueden cLl usidcra('
"ariable; glnbak' " la clase.
Ejemplo
c:lass J(adi o
int llLllTlSin tonL,!f:; i
i nt potenci a ;
double p.,ec.i.o;
SI" l: i.:1g rr..?,rca;
p ub l i c vc j.d n11.l eSCl-,J,
I
i
" T '_ 'ut ' P?'" In {"S i n t-:::.ni3.s !!umSi ni.:o:,;,s'
. ,f ..
i,l
'tildos l(l s mtod(ls de la c1'bc Radio pueuen hacer uso libremente ue las variables ue la cl ase.
independientemente clelluga,. (denlro de la clase) ell que apare7.ca la sentencia de declaraci 6o. De otreJ
modo, el ,)ml1 ilo de las va riables instancia de una clase va desde la llave de apertura ( {) a la llave de
cierre (}) . .
Las variables inslancia o variables de clase son auromti calOente inicializadas por el cOJllpilador.
l.as "ariables de cla.'.e de tipo numrico Ii n t, fl oa t, double ) se ini ci ali zan a cero, las variables de
tipo boo lean a .r:als e. LoS cuyo tipo es una clase, las varia bles array,' yen general las
referellcias a objetos. se inicializan a nu ll.
, : ,-- . ' ;,,.' /' ' ,' .,' t ';
I
. . .:.;1&f'1:';i:. ..... .
-.; Las,Van) bies instancIace uoadaseseiiliClalizatt

260 Programacin en JAVA 2
I
I
8.8. 2. mbito de mtodo I
I

Una variahle que tiene ,unbil n de llJwclo se puede rdcreuciar desde cualqui er parte elel mtodo. Las
'.ariable, declaral!;" deurro cuerpo del 1l1doJo se dice 4ue sou locales al mtodo. Las variables i
locales nll se pueden utilizar fuera Jel mbiru del 11I (oc!0 LJue es t, n detinidas.
!
Las variable, lkclmadas enlre la lIa'c de apertura ({ ) y la llave de ci erre (}) elel cuerpo del mtodo
riCllen e l cmbilo delllltodo. Ta\llbiu los identificadores de los parrnctrLls ronlll\les iencn comu rnbilo
ell\\todo en su\otalidad.
Ejemplo
double prodll CI:o Idoub le
{
int k
double p = 1.0;
for (k o; kc n;
(
P *= Y[k);
1: 2 ;
r" ttll-n p;
v [], int ni
-------_. --- -
En producto () las va riables le y P c,t" dedarad,!s en el cuerpo del mtodo y por tamo se pueden
en cLlalquier de ste. Los pnrllletlos" (referencia de llll 'ar't'ay) y n tienen talnhill
COlTl.tJ :ll11Ui LP el mtouo.
Al cst,l r detil1idc's los lIlwoos dentrp de las clases pued.E' pcurrir vari:'lbles inStil llcla t.Ie la clase
coillL"idan con d nombre de Ullll \rarlabk definida dentll) del mc?louo. eu ell\' t) caso la v(friable i:'H el
Jllhito t/('llJuJ,ot!o ()('ftlw (7 lo \'o/";uh/p ill .\llIlIcitltle lo c/use.
Ejemplo
Pl! bl ic c l ass Mixto
(
prj. 'la te int TI;
public doubl e yalor()
{
fl oat 11 12.0f; 1I oculta a la var iable int n de Ambito
/ Il a clase
//
En la clase n es IIna vari able de lipo int que licne como lll bito la clase; todos los mlodos
de Mixto pueden acceder a n . En el mtodo valor I I se ha defillido la var.iable 11 de (ipo float; en
valor () es la n de tipo float la que prevalece tiente a n de tipo int por estar definida en su m!JiIO.
Ejemplo
void calcul o()
{
double radio;
..
l
System.out.print("radio
/ l...
Mtodos 261
." + i / / error de co mpilacin
8.8.3. Alllbito de bloque
Un bloque es una agrup;JCin de sentenci <ts delil\\ilauas por una llave de apertura I i) y otra llave de
cierre (}) ; dentro de un bloque se pueue declmar cualqu ier tipo de variable. el mbito de dicha va riable
qucda circunscrito al bloque)' puede ser rcferenciada cn cualquier parte del bloque, dcsde el punto en
que est hasta el Ilnal del bloque. En el siguiente ejemplo. t es un<l vari able de tipo double
que lielle COIllO ",[Jito el hloquc dennido en la selllC ll cia if.
- --_._._-- ._. _-
Ejemplo
String reCOJ:l'e ()
{
i nt i
1/
if
(
(i '0 II i -10 )
'.."! t;
t n Halh. s qr t (29.0);
/ 1
System. out .prillt( " t
" tl; /1 error, t s6lo es visible en
II el bloque donde se define
{Jna variable decbrada dcutro de nn bloque s!t, puede ser rcferenciada dentro del bl oque, fuera uo
es rcconocida y el compilador gellera un cnOf del tipo ideufificador 110 declorado.
Pura evitar los errores que se generan al defillif variables con el mismo nombre. Javn 110 permite
que llll idcmificador definido en un bloque pucda volverse a definir dentro de un bloque anidado. As,
en el eje.ll\plo siguicnte hay dos bloques anidados que definen variablcs con el mismo nombre, e l
compilador Java generar un etTOr.
. Ejemplo
void repetirCh(int k,
(
int i;
//
int eh)
ir li >0 1I i < -10)
( l/bloque e!1 el se def i.ne la variable sw
262 Prograrnacicn en .JAVA 2
bOQl ean
8\'/ = trile ;
,,hile (i >O:
{ / i bloque a nida do
St r ing S l" /i identificador ya definido
i. - = 2;
------ --------,_ ._--- - -
. . . . .
Los definidos dentro de .un bloque deben ser distintos de los
definidos' en ei bloque. que lo contiene. . ,
El nombre de uoa'variilble illstancio. de 'clase y el nombre de.una vmiable definida en un bloque
de. un mtodo de la C'o[lc'idii, eil ctiyo cas la variable queda PC/I{Il1 dentro
del bloqu. . . .
.,....
Ejemplo
c lass Oculta
{
privat e int net .
public void p intarCar()
{
double net; / / ocu1 ta a la ,:ariable instancia. net
Nota .
El' mbito 'di: m'topo el mbi'to de bl oque esrealme'nte un solo que es' el mbito de
bloque, dbido'u"qlie l ml:Jitode mtodo se refiere al bloque deiemunado por la llave de apeitura
y la llave dcHittdb: . ' .. " . . ' . .. . . , .
8.8,4. Variables locales
Las variables definidas en llO mtodo () cn un bloque variables l\lcales ni mtodo () al bloque.
Adems de tener Ul1 mbilo restIingido, locales SOIl por olra razn: existen en
memoria slo cuando el mtodo est activo (es decir, mientras se ejecutan las sentencias del mtodo).
Cuando el mtodo 110 se est ejecutando, sus variables locales no ocupan espacio en memoria. ya que
!lO ex.isten. Algunas reglas que siguen las variables locales son:
En el interior de un mtodo, a que explcitaluente cambie UII valor de una variable. no se
pucde cambiar esa \'uriable por ninguna sentencia cx lcrna al mtodo.
Lns nombres las variabl es locales no son nicos. Dos o ms mtodos pueden definir la misma
variable test. Cada variable es dislinta y pertenece a su mtodo especfico.
Las variables locales de Jos mtodos no existen en memoria hasla que se ejecute el mtodo. por
es ra razn, mltipk s mtodos pueden cOlllparrir la mi sma mcmoria para sus variables locales
(pero no al mismo tiempo).
T Mt odos 263
I
Las variabk" que sc dcntro de lIi1/Illodo se dice que S(!r1 signirlcando que
se les as ig na cspaci,) ell menw ria aull'/lIticamcnte a la entrada del mtodo y se les libera el
es pacio prOll1't> Se' sale de die hn mtodo.
!
!
8.9. RECURSIVIDAD
Un Inlodo l'ecur.,il'O llil que se llama a mi smo directa o inclireclamenle. La recursividad
o reclIFsin {i/'feta es el pnlL'Cso por el que. UIi mtodo se lJ ' lIlla a s mismo descle cl propio cuerpo del
mh)J(l . La recllrsil"idad o I'ccursi ll indirecta jmpli ca ms de lIn mtodo.
La rcellfs.ivilb d indirecla impli ca. r"l' la e,\istcncia de dos mtodos: uno () y dos () .
Suponga deslk main () llama a uno () , ya cOIHilluacirSn uno () lIallla a dos () . En alguna pane
dcl proceso. dos ( ) llama a uno ( ) - -lll/3 segunda JJamnda a uno ( ) - . Esta accin es recul'siun
illwrecla. pero cs recursil'a. Ya que uno () ha sido )Jamado dos vcees, sin retornar nunca a su llamadora.
Es inlpn/Tallte que un p/ oceso recursi\'(l uebe tcner una cOnclici n de tenninacin, ya que si no puedc
continuar inuetillidatlllHc hasta que se prod\17.c'11ln agO/al1liel/l(! de la memoria ocupada..
Un algori tll\o lpico lJue l'o/uluce ,1 una illlrlcllIcllIadn recurs iva es el l'icul o del factorial de UIl
nl/lnero. El i'uclorial de 12 (ll !) .
n ! n * (n-J.) * (n - 2) .... * 3 * 2 ;- 1
En COll scc\l encia, el de '1 es igua l a '1* 3 ' 2 *1 , el ractorial de 3 es igual a 3 *2 *1. As. pues.
el I'acmrial ele , e.': igual a { vcces cl r:lclorial de 3. La Figura X.2 la scc\l encia de sucesil 'as
al factorial,
EJEMPLO 8.9. Rcul!mr" u{goriril/" ,lelll/r!rod".!<I('/nr;lIl.
fa c corial(SI 12 0
S*4"
1r
3*2* 1 .......1
t
!l :::.:: 5 ret orno n * f actorial (1) ;
4*3 ..... 2*1
t t
TI == re t orno n * f a c t o rial (]) ;
3* 2 "" 1
t t
n == re torno n +: factorial (2) ;
t
2* 1
t
n ;:= .2 ret orno n * factoriall l) ;
t t
n == retorno 1
+
Figura 8.2. Llamadas recursivas para .factorial (5) .
La impl elllentacin del rntodo recursivo f act orial 1) es:
.'
. '
.
10llg fact oriallint numero)
{

T
264 Programacin en JAVA 2 I
i
I
f (n umer ::- 1)
I
return * factoria l. (nume !."C -l};
I 1;
EJEMPLO 8.10. SUll ldJ' los 11 Fu/ores 'r' ff/l (Fray de wl meros reales. C OI1 /{/)' dI? !I1odo }"eCUJ'siFV.
La suma pedida se scnc' illamcnte con un bucle desde el el emen to inirial. (), hasta el LHLillll)
(n -l) Sin elnhargo. a ltulo dc e-jempJo. Se renliza rOIl rntodos rc: clI rsivQs s uma ] ( ) y su.mA2 (l .
El examina el padmel ro n, si es 1lI::yor que t'l ndice u la suma es igual a suma2 () +v (n-ll ;
el mlodo suma? (" lo nico que hace es ucvo!lcr surn.:<l (1 con n dCCrel11Clltetdo. Es[o hace que dc
lluevo sumal () eX<ll11ine 11, ::ls que n se a 1; en ese 1.t10lnento ln rt:cursi o termina uevol viend()
COIllO suma v [ OI (IJay que recorebr que los arrays se indexan de o a Il 1) .
d cubl e sumal fdcub le 'J [] r i nt n)
if (n,1)
:r.- et urn s '.lma2(v,n).. v [ n-l1 i
else
ret u rn OJ i
cl.ouble suma2 (double v [] , :. nt n)
{
rer. urn suriml (-,t , --11) ;
La Figura 8.3 11lueSlr;1 ja secllencia de Ila1O:1(l a.'\ y eklll C'll tos deYlIc!\'c cua ndo :->I! rcsucJvl' h\
llamada.
Gumal(v,4) -<'l
i v[ OI +v[1) t
Ir v [2]+v l3 ]
n retorno
dOJ+v [ 1.]+
't
v[2]
t
n =::::::: retorno suma2(v,n)+v[2]
n

t
v [ OJ +v [lJ
2 retorno suma2(v,n)+v[1 ]
n == retorno 1'[ 0 1;
.'
t
I
t
l. " .1

Figura 8.3, llamadas recursivas para sumal ('1,4) .

Mrodos 265
8.10. SIBLlOTEC.(\ DE CLASES JAVA
.l ava incorpora una '11t1!,1 ia bihlioteca de clases e i n[crr"ccs denorninaeb )al'{/ APl. clases se puedcn
utili z.a r para ronll;lr nue":!s clases, crear objetos . ulili za r "IS mtodos. en biblilJlcca dc clases esr<
('''ganizada por IXlqueles !F'uckagesi.cnda paquete conliene Ulla colecc in de clases; para hacer lloO de
"'as clases sin lelle,. que hacerlas precc,dcr del del paqucte se util iza la ,,, ntencia import..
Los Il(lrnbres cle los paqueles:
java.apple t java. awt
j a va.!:') java.lang
java .net
El fJaquc' tc iiWi'l .1aEC es el paquel" 1I1's illlpolf;lnte. Se cOll sidern el paquete estndar y por ello
todos los lo importan autolll:icamemc. Contiene a las l'Iases !]tIC ellcopsulall :l los tipos de
liMOS primitivo:-- : .oo uble, Fl o!:t t, Lo ng... La da.')es Str in3 y StringBu E fe!" pnrtt de
cadenas lalllhin se eneUCllIran ell es te paquele. l.a clase r1a th eon las rUllci olles matern;ttiL"as ms
importalltes se. cllcuenrra el1 este paquc!e. Pero las clases ms importanr es que enl.;Uetllrall son
0bj ect t Sys tem, Thread j' Tlu"ol.\iab J":! .
El pa'lude java. Iltil define UIl (l>njllnlO ele clases tiles para distintos cometidos. \sr. la cla,e
Date para Jc fcchas en dis(ju((lS fonnatns. J.n c]nse. Ralldom para generar olimero$ aleatorios.
paquete es lleCt:::sarjo impon;lrlo si se tltilj z:l alguna clase o interfaz de l.
itnpo rt i2. .... .. * 1'(1/0 !"I/(t!(/lIicr c!u.h.'
i mport j t:lS;\ _ uti l . Date i FalO .n/o lel Date
8,10,1. Clnse Object
J.:1 eI"sc 0bj"-: t es la base de todas las ddiJlid'lS en 3:"a; lOda clase dclilliua el! Jet,,:!
hereda de la c..:la:-;c D bj ecl:, E n Java. \'arii.1blc re!"erencia a IIlIa e/,ase COllvierlC <lwolll,-l(il.: alllt'rJLe
a11i])0 de 1<1 claSe b:,,<.:.c y por lamo es :lsignaci)n a l/na de lipo Ob'i ect.
Objec t: q ;
Stl' ing c:d 1lew Parra");
Illt"ger y Ilew Illt eger(72); // inicial izada a 72
< cd; '1 9 refer enc ia al mi smo ob jet o qtle cd
9 y; // 9 a hora refere ncia a un objeto Integer
La clase Obj e-::t tiene dos mtodos illlportantes: equa l s () y toString () Gencr;[lncnte estos
lIltodos se redellllcn en la, clases para especializarll)S.
Mtodo equa/s(}
Comparn el objcto qUe hace la llamada con el objeto que se pasa COtllO argumento, devuelve true si .son
igual es.
boo l ean equals(ObjRct k);
En el siguiellle ejemplo se comparan dos objetos, la coniparaein cs true si contienen la misllla
cadena. .
String a r ; new St ring ("Iglesi a romnica") ;
Str ing a "Vida s;::I.n.a" i
ir (al'.equalsla)) 1/ " ,no se cumple, devuel ve false
T
266 Programacin en JAVA 2
Mtodo toStringl!
[sre IIItl)t!O L'Ullslruyc ulla cadena (Stl.-l::lgl que eS la dd objero, devuelve l:1 cJdena .
Normalmente se reuelle las c!Jses para as ciar explcitos de los objetos de 1:1 clase.

len c'.klllplo un oiJJClCJ Joubl e al mtodo taS I: ri ng () \' "signa la cadena a una va riable.
;Jo: . b le r -:: Double l2 . 5) i
LP
r p r.toStri !1q(l;
8.10.2. Clase Sys tern
ESlH clase se lI t.i1.i :.w con frecl.It:llcia. ya que e.o,; L11l de objetos aSuciduOS con la entrada y sal ida
,,,,, nclar, y de nllod'lS tiles. No se pueden crear ohjelos de la cla.se Syst'?m; los mi emhros de la clase
que se ulilizan eS1n clcliJlidos como sta 1: l e, por lo "ue para haccr rderencia a ellos se 'lllt cpone el
' nom brc dc la clase: Sy"cem.
System. in. Este (lbjew eS1, dcl'inido: ,; talie f1,e l InputSlream in. NOI'IIl"lmcllte Se
corresponde COil la por [eclado y se utiliza C(lrllO par:'l el que crea un
"hieto de cIHraua con bu[fer: ..
'::ntrs. .ia UufferedPeader(
l\''='!l i
Syste.m.out.
llormalllleme. COn la salida 1'01' l'all

lal
st a t'ic
la. Es Ilabilllal la 11
final
"""ld;1 a los Illtu
cut
dos


'!
Sys out. prl :'1t ln ()
para salida de datos. previamente convertidos cadena. por pa111'll1a. ; segundo se dil'crencia cid
primero en que ulla veloInundada la cadena a la pantalla salt" a la lnea siguieme.
Entre Ill.lodos de [" clase se encucntr'lll exi t () y ge (). El J,lrilllero termina la ejecucilI de
una aplicacin, est <.1.,:c1ar<tdo: st atic 'loid exi t (int st:at usl. El cugu mento status
ac()!' tulllbra a que sea cero si la terminacin es s in y un vaior diSlinto de cero para indicar el
cdigo de una anomala. .
El mtodo gc ( ) (Rarbage collector) est declarado: stati e VO'ld ge (l. Uua llamada a eslc
mtodo (Sys tem . ge ( I I hace que se act ive la Iibcraci()[l ck objetos creados pero no referenciados por
IUllguna variable.
8,10.3. Clase Math
Nil t h Contiene constantes matemticas y funciones matemticas, no se instancian dc esta clase.
Puede ser considerada como 11// depsito, una agrupucin de constantes y mtodos (fullciones
Estas constantes y 'ntodos est'lU declarados con el modificador stat.ie y se hace
referencia a elJ os con su nombre precediuo de

:-1

Mtodos 267
Las lklS const,-1I1tcs m<.s i'ilath.3 y jJ!ath.FI, 8.mbas dc lipo double. La primera.
11ath . E, rcprcsenla el lllmcro e, base de los logaritmos notur:rles: su valor es 2.71828 J.8284S9045. La
CI.lll>l3nte Iath. PI ellllilllero pi, .su I'alor
l.us nlt'lodo., los podeml" clnsijic;w
Flfnciones de cOJ/\'(;'i"sill
publ ie s t ..;,oic int abs (int xl; del'llelve el va lor "bsolulO de x. Est
sourecl rgaL!l.' para tipo float y dcuble {float abs ( f loa t x) y
dou.ble ': ) ).
':'lllb lic:: st."!.t ic i 11 1". ce il (double x) i deVllCi\'e el valor del encero ms prximo y
[lO llH.' l[Ue : ;. Por ejemplo:
SystP.fU.o'-lt.pri llt. ln( " ct'!i l (ll.J) ::: " + tl at h .ceil(11.3i );
SystemJmt.plintlu (" c,oil. (-lJ.. 31
cn patl1alb s,d,,:
c.? i. l. (l.l. ]) " .12
cei l(- ll ..l) -},l
publ i c stltic int floor (double x) i
pn)x illlo y !ll.) 1l1ayor x . Por ejcmplo:
Systell" "ut. o rintl n (" r: l. uor (11.3 I
Syst.em .out.prii17.:: 1n ( "
e'tI lJellllalb "ale:
f Ioar( l ! .3 : 11
floor( l l.JI -12
Ftllfc.:ioll e.r; dp. m.ril/lo y de luil1lo
p-uhl ic st,:'\.tic int rnin(lnt :-:, int y) i
publi c static int max(int x, ir:.t y: i
= " +
devuel ve el valor del entero ms
= " ... f' la tI1. floor 1.11. J ) : ;
== " r:i;:th.f lr.)()r-( -ll,J}} .j.
devuclve el mellor de los argumentos.
devueil'e el mayor de los argumentos.
Anlbos ticll en tatllbin la sobrecarga (la versiln) para tipo float y double.
FUllcOI/CS po/'([ clculo de races, logaritmo)' porerIC;({S
publie stat ic double sqrt (doubl e xl; devuelve la raz cuadmda de X.
public stat ic doubl" pow (doubl e x, double y); devuelve x elevado a y.
publ 'le slatic doub l e exp (double x) ; funcin exponencial. e".
publie static double l og (double xl; 10garitll1o neperiano o natural dcx.
A estas funciones se las puede llamar con un argumento de tipo entero o floal, ya que auto
mticamenle hay ulla promocin al tipo dOllble.
FUllciones Irigol/omtricas
publie static doubl", sin (double xl; calcula seno(x), x ngulo en radianes.
public sta tic douhle oos Cdouble x) i calcula cosellll(x), X en radianes.
268 Programacin en JA VY-\ 2
calcula tallgente(x). x Gn rad IHn"s.
public stat,ic d"uole tan( double x ) ;
publi.c stati.c doub l e '.Isin(double x);
calcul a arco.seno(x).
publ i c s t. atic doub!.e 3. COS (dC1uble ;:i i
ca lClda arcocoseno(x) .
calcula arCl\ tangenteL'().
public st a tic double a t an (dc uble x);
-9 Flfi/l:hi }1 puro generar nll/leros ale%rios
El mtodo 'tath . r a ndom() genera 1111 nLmero aleatorio comprendido 0.0 y l.O:
0.0 MRth.rsndom{)cl . 0
La dec laracin del Jl.c- touo: publ i c s'. a t ic doubl .. randcm () ;. As, ulla Ilomada allllwdo:
doul)le x
En las apli cad olles en que se necesilen generar nl neros akat oril)s nonnal ll lcnte se requiere que
estn enu"e un rango de valores. Por ejemplo, slI p() nga!ie que se qui ere generar
minr cros ateatorios en el nJlIgo de l O.O (i ndusiw):l lOUll.O:
f i nal doubJ.e linllnferior 10.0;
f inaJ. dOl!bl e limSup"S!:r ior
\ 0,)0.0;
ciouble X.i
x::: (lirnSuperi or -l i mInf eri or)*Nat h.-candom( ) + limTnferi o r
Si nmeros. aIC<.lll)rios han de ser llLmerps enten..'s hay y'ue hacer url Cflsr par;) cotl venirJi po
dOll ble a i:1t.. En el Ejemplo S. l ] '-e genera una st.::'t.'ue tll.:l;t de ntilllcros en el rang0 de
lO a I(JO { un ill clus ivcJ.
. - _..- - - --_ ._ --- ---_._- - - ------
8. 11. Se quiere N("I (eror /lna.\t'ololcia ele CrJ(('IYJ.\' afea/{lri(ls eH el rongo de JO
,1 Ion. CalcHlar f:.'11I/,;XflO yc111l7"illlo de lo sec/{(' I/n'a gf. ll eldda.
Para generar 1<1 s,'cue;ci a ,e mult.iplka randolll ( ) i".Jr el illt ervalo de. ,'alores lOO-lO) \' se sllIna d
valor iniL' i::li ( 10 ), el resultado SI! conviene a int . Los v,llores mximo y mnimo iJl vcaml1J
a tl arh .lllax() y Na!:h.mi;-l() re speclival'l ente.
class Interv a l
publ.lc stat.i c void main(String [ ] a r s)
(
fi na l int Cotatnf = 10;
final int Co taSup = 100;
final int Rango = CctaSup - Cc ca Inf;
i nt m.'X, mn
II Se inicializa mx Y mn al minimo y mximo respectivament e
m.'<. = Cotalnf ;
mn = Co taSup;
sys t em.out.println(" \ tSecuel1c ia de 20 nmeros aleatorios.");
for (i nt k = 1, k <= 20, k++)
( ,
int x,
x = (:ent ) (Rango* Math.r a ndom() + CotaInf) ;
mx = 11at h.max(m;<, x) ;
:r
mn = 11at h .min (mn, x);
Sy st eln .out.print(\\ " + x) i
tf.
Mtodos 269
S ys t e m. out nmero " 01 mx);
Sysl:em.0t.!.t .printl:1{ "\ tt:l.nimo nmero + 11m );
La cjccll ci()1) del progralll\ repetidalll Cll ce pone de que cada vez se ge nera una
, distinta. Ulla 11<1 dado estos rC.'i llltados:
Secueuc i a de 20 nme.ro aleatorias.
44 40 66 96 4 3 92 69 12 1 6 88 1 8 13 32 21 4 8 95 85 50 33 96
Mx i mo nm':'l'o gp. /l p.rado: 96
tlin imo nmero generado: 13
" .. ' ,
. Nota . . . , . " ,
El utilontiene.la Clase Random (l , deja que se crear objetos pru-a
. generar nweros aieat oris. Tiene detinidos mtodos para obtener. sigui ente nmero de la.
secuerda: tiextrnt O, (i, nextbm.lble ()... . . . . ' ,
" RESUMEN
Los mtodos yJa$ son la bnsc de la consollcein
, de programas n ,Javn. Se utilizan ' intodos pura
subdividi r problemas gr:mdeS en rrcls peguens.
, El ellcapsl amieuto de las e'n
Imee los programas ms ({jes de ,,,,uiieller. El so de
:. mtodQs ayuda alprcignlnadr.a cedllc.it-l lamnio de'
su programa,. ya que se pue,de Iirunarri>!' tidri meote y
reutilizar el cdigo detr6 de lIl .
.. :' . . . . . ,... . . '.: . "-" ," ' .
, En estc capt,ulo habr.
.0 .