Sunteți pe pagina 1din 114

Parte 1

Empezando
En esta parte . . .

si Conozca
todo sobreJava. Descubre
si desea (o no)qué
usaresJava.
JavaSi ha escuchado cosas sobre
Java y no está seguro de lo que significan, el material de esta parte puede
ayudarlo. Si está mirando su computadora, preguntándose cómo va a ejecutar
un programa Java, esta parte tiene la información que necesita. Tal vez le haya
dicho a la gente que es un experto en Java, y ahora necesita hacer un farol
serio. Si es así, esta parte del libro es su curso intensivo en Java. (Por
supuesto, si la palabra farolear lo describe con precisión, es posible que también
desee recoger una copia de

Ética para tontos.)


Capítulo 1

Todo sobre Java


En este capítulo
▶ ▶ Que es java

▶ ▶ De dónde vino Java

▶ ▶ ¿Por qué Java es tan genial?

▶ ▶ Cómo orientarse a la programación orientada a objetos

S son
ay lobuenos por solo
que quieres doscomputadoras.
de las razones simples:
Por lo que a mí respecta, las computadoras

✓ Cuando las computadoras funcionan, no sienten resistencia, estrés ni aburrimiento.


dom, y sin fatiga. Las computadoras son nuestros esclavos electrónicos. Tengo mi computadora
trabajando 24/7 haciendo cálculos para SETI @ home : la búsqueda de inteligencia extraterrestre.
¿Siento pena por mi computadora porque está trabajando muy duro? ¿Se queja la computadora? ¿Me
informará la computadora a la Junta Nacional de Relaciones Laborales? No. Puedo hacer demandas,
dar órdenes a la computadora y romper el látigo. ¿Me siento (o debería) sentirme un poco culpable?
De ningún modo.

✓ Las computadoras mueven ideas, no papel. No hace mucho, cuando querías


enviar un mensaje a alguien, contrataste a un mensajero. El mensajero se subió a su caballo y
entregó su mensaje personalmente. El mensaje estaba en papel, pergamino, una tableta de
arcilla o cualquier medio físico disponible en ese momento.

Todo este proceso parece un desperdicio ahora, pero eso es solo porque usted y yo estamos sentados
cómodamente en la era electrónica. Los mensajes son ideas, y las cosas físicas como la tinta, el papel y
los caballos tienen poco o nada que ver con ideas reales; son solo portadores temporales de ideas (a
pesar de que las personas los usaron para transportar ideas durante varios siglos). Sin embargo, las
ideas en sí mismas son sin papel, sin caballo y sin mensajería. Lo bueno de las computadoras es que
transmiten ideas de manera eficiente. No llevan nada más que las ideas, un par de fotones y un poco de
energía eléctrica. Lo hacen sin complicaciones, sin problemas y sin equipaje físico adicional.
12 Parte I: Comenzando
Cuando comienzas a lidiar eficientemente con ideas, sucede algo muy agradable. De repente, todos los
gastos generales se han ido. En lugar de empujar papel y árboles, estás empujando números y conceptos. Sin
los gastos generales, puede hacer las cosas mucho más rápido y hacer cosas que son mucho más complejas
que nunca.

Qué puedes hacer con Java


Sería muy bueno si toda esta complejidad fuera gratuita, pero desafortunadamente no lo es. Alguien tiene que pensar
mucho y decidir exactamente qué pedirle a la computadora que haga. Después de ese pensamiento, alguien tiene que
escribir un conjunto de instrucciones para que la computadora las siga.

Dado el estado actual de las cosas, no puede escribir estas instrucciones en inglés o en cualquier otro
idioma que la gente hable. La ciencia ficción está llena de historias sobre personas que dicen cosas simples
a los robots y obtienen resultados desastrosos e inesperados. El inglés y otros idiomas similares no son
adecuados para la comunicación con las computadoras por varias razones:

✓ Una oración en inglés puede malinterpretarse. "Mastica una tableta tres


veces al día hasta que termine ".

✓ Es difícil tejer un comando muy complicado en inglés. "Unirse


brida A a la protuberancia B, asegurándose de conectar solo el labio más externo de la brida A al
extremo más grande de la protuberancia B, mientras une los labios medio e interno de la brida A a
la arandela C. "

✓ Una oración en inglés tiene mucho equipaje extra. "La oración tiene
palabras innecesarias ".

✓ El inglés es difícil de interpretar. "Como parte de este Acuerdo de publicación


entre John Wiley & Sons, Inc. ('Wiley') y el autor ('Barry Burd'), Wiley pagará la suma de mil
doscientos cincuenta y siete dólares y sesenta y tres centavos ($ 1,257.63) a El autor para la
presentación parcial de
Java para tontos, 5ª Edición ('la obra') ".

Para decirle a una computadora qué hacer, debe hablar un idioma especial y escribir instrucciones breves
e inequívocas en ese idioma. Un lenguaje especial de este tipo se llama lenguaje de programación
informática Un conjunto de instrucciones escritas en dicho lenguaje se denomina programa. Cuando se
mira como una gran gota, estas instrucciones se llaman software o código. Así es como se ve el código
cuando está escrito en Java:
Capítulo 1: Todo sobre Java 13

clase PayBarry {
public static void main (String args []) {

double checkAmount = 1257.63; System.out.print ("Pagar a la orden


de"); System.out.print ("Dr. Barry Burd"); System.out.print ("$");
System.out.println (checkAmount); }}

Por qué deberías usar Java


¡Es tiempo de celebrar! Acabas de recoger una copia de Java para tontos,
5ta Edición, y estás leyendo el Capítulo 1. A este ritmo, serás un experto programador de Java en
muy poco tiempo, así que regocíjate en tu éxito eventual organizando una gran fiesta.

Para prepararme para la fiesta, hornearé un pastel. Soy flojo, así que usaré una mezcla de pastel lista para
hornear. Déjame ver . . . agregue agua a la mezcla y luego agregue mantequilla y huevos. . . ¡Hey, espera! Acabo
de mirar la lista de ingredientes. ¿Qué es el MSG? ¿Y qué hay del propilenglicol? Eso se usa en anticongelante,
¿no?

Cambiaré planes y haré el pastel desde cero. Claro, es un poco más difícil. Pero de esa manera, obtengo
exactamente lo que quiero.

Los programas de computadora funcionan de la misma manera. Puedes usar el programa de otra persona
o escribir el tuyo propio. Si usas el programa de otra persona, usas lo que obtienes. Cuando escribe su
propio programa, puede adaptar el programa especialmente para sus necesidades.

Escribir código de computadora es una gran industria mundial. Las empresas lo hacen, los profesionales
independientes lo hacen, los aficionados lo hacen; Todo tipo de personas lo hacen. Una gran empresa típica tiene
equipos, departamentos y divisiones que escriben programas para la empresa. Pero puede escribir programas para
usted u otra persona, para ganarse la vida o para divertirse. En una estimación reciente, el número de líneas de código
escritas cada día por los programadores en los Estados Unidos solo excede el número de moléculas de metano en el
planeta Júpiter. * Tome casi cualquier cosa que pueda hacerse con una computadora. Con la cantidad de tiempo
adecuada, puede escribir su propio programa para hacerlo. (Por supuesto, la "cantidad de tiempo correcta" puede ser
muy larga, pero ese no es el punto. Muchos programas interesantes y útiles se pueden escribir en horas o incluso
minutos).

** Me inventé este hecho solo.


14 Parte I: Comenzando

Obteniendo perspectiva: dónde encaja Java


Aquí hay una breve historia de la programación moderna de computadoras:

✓ 1954–1957: se desarrolla FORTRAN.

FORTRAN fue el primer lenguaje moderno de programación de computadoras. Para la programación


científica, FORTRAN es un verdadero caballo de carreras. Año tras año, FORTRAN es un lenguaje líder
entre los programadores de computadoras en todo el mundo.

✓ 1959: se crea COBOL.

La carta si en COBOL significa Negocio, y el negocio es exactamente de lo que se trata COBOL.


La característica principal del lenguaje es el procesamiento de un registro tras otro, un cliente tras
otro o un empleado tras otro.

Pocos años después de su desarrollo inicial, COBOL se convirtió en el lenguaje más utilizado para el
procesamiento de datos comerciales. Incluso hoy, COBOL representa una gran parte de la industria de
programación de computadoras.

✓ 1972: Dennis Ritchie en AT&T Bell Labs desarrolla la programación C


idioma.

La "apariencia" que ves en los ejemplos de este libro proviene del lenguaje de programación
C. El código escrito en C usa llaves, Si
declaraciones, para declaraciones, y así sucesivamente.

En términos de potencia, puede usar C para resolver los mismos problemas que puede resolver
usando FORTRAN, Java o cualquier otro lenguaje de programación moderno. (Puede escribir un
programa de calculadora científica en COBOL, pero hacer ese tipo de cosas sería realmente
extraño). La diferencia entre un lenguaje de programación y otro no es poder. La diferencia es la
facilidad y la idoneidad de uso. Ahí es donde sobresale el lenguaje Java.

✓ 1986: Bjarne Stroustrup (nuevamente en AT&T Bell Labs) desarrolla C ++.

A diferencia de su ancestro en lenguaje C, el lenguaje C ++ admite programación orientada a


objetos. Esto representa un gran paso adelante. (Consulte la siguiente sección de este
capítulo).

✓ 23 de mayo de 1995: Sun Microsystems lanza su primera versión oficial de


Lenguaje de programación Java.

Java mejora los conceptos en C ++. La filosofía de Java "Escribir una vez, ejecutar en cualquier
lugar" hace que el lenguaje sea ideal para distribuir código a través de Internet.
Capítulo 1: Todo sobre Java 15
Además, Java es un gran lenguaje de programación de propósito general. Con Java, puede escribir
aplicaciones con ventana, construir y explorar bases de datos, controlar dispositivos portátiles y más.
En cinco años, el lenguaje de programación Java tuvo 2.5 millones de desarrolladores en todo el
mundo. (Lo sé. Tengo una camiseta conmemorativa para demostrarlo).

✓ Noviembre de 2000: el College Board anuncia que, comenzando en el


año 2003, los exámenes de Colocación Avanzada en Informática se basarán en Java.

¿Quieres saber qué está aprendiendo ese chico de nariz mocosa que vive en la calle en la escuela
secundaria? Lo has adivinado: Java.

✓ 2002: Microsoft presenta un nuevo lenguaje llamado C #.

Muchas de las características del lenguaje C # provienen directamente de las características de Java.

✓ Junio ​de 2004: Sys-Con Media * informa que la demanda del programa Java
mers supera la demanda de programadores de C ++ en un 50 por ciento.

¡Y hay más! La demanda de programadores de Java supera la demanda combinada de programadores


de C ++ y C # en un 8 por ciento. Los programadores de Java son más empleables que los
programadores de VB (Visual Basic) en un asombroso 190 por ciento.

✓ Enero de 2010: Oracle Corporation compra Sun Microsystems, trayendo


Tecnología Java en la familia de productos Oracle.

✓ Junio ​de 2010: eWeek clasifica a Java en primer lugar entre sus “10 principales programas de programación

Idiomas para mantenerlo empleado ". **

✓ Mayo de 2011: Java se ejecuta en más de 1.100 millones de computadoras de escritorio. ***

Java se ejecuta en 3 mil millones de teléfonos móviles. **** La tecnología Java proporciona
capacidades interactivas para todos los dispositivos Blu-ray. Java es el lenguaje de programación más
popular en el TIOBE Programming Community Index *****. Bueno, estoy impresionado.

** Fuente: java.sys-con.com/node/48507

* ** * Fuente: www.eweek.com/c/a/Application-Development/Top-10-Programming-
Languages-to-Keep-You-Employed-719257 /

* ** ** * Fuente: java.com/en/about/

* ** ** ** * Fuente: java.com/en/about/

* ** ** ** ** * Fuente: www.tiobe.com/index.php/content/paperinfo/tpci/
dieciséis Parte I: Comenzando

Programación Orientada a Objetos (OOP)


Son las tres de la mañana. Estoy soñando con el curso de historia que reprobé en la escuela secundaria.
La maestra me grita: “Tienes dos días para estudiar para el examen final, pero no te acordarás de estudiar.
Te olvidarás y te sentirás culpable, culpable, culpable.

De repente suena el teléfono. Me despierto abruptamente de mi sueño profundo. (Claro, no me gustaba


soñar con el curso de historia, pero me gusta que me despierten aún menos). Al principio, dejo caer el
teléfono en el suelo. Después de tratar de recogerlo, emití un gruñón, "Hola, ¿quién es este?" Una voz
responde: "Soy un reportero de
Los New York Times. Estoy escribiendo un artículo sobre Java y necesito saber todo sobre el lenguaje de
programación en cinco palabras o menos. ¿Puedes explicarlo?"

Mi mente es muy nebulosa. No puedo pensar Así que digo todo lo que se me viene a la mente y luego vuelvo
a dormir.

Cuando llega la mañana, apenas recuerdo la conversación con el periodista. De hecho, no recuerdo cómo
respondí la pregunta. ¿Le dije al periodista dónde podía poner su artículo sobre Java?

Me puse la bata y corrí al frente de la entrada de mi casa. Mientras recojo el periódico de la mañana,
miro la portada y veo el titular de dos pulgadas:

Burd llama a Java "Un gran lenguaje orientado a objetos"

Lenguajes orientados a objetos


Java está orientado a objetos. Qué significa eso? A diferencia de los lenguajes, como FORTRAN, que se centran en
dar a la computadora los imperativos comandos "Hacer esto / Hacer aquello", los lenguajes orientados a objetos se
centran en los datos. Por supuesto, los programas orientados a objetos todavía le dicen a la computadora qué
hacer. Sin embargo, comienzan organizando los datos, y los comandos vienen después.

Los lenguajes orientados a objetos son mejores que los lenguajes “Haz esto / Haz eso” porque organizan los
datos de una manera que ayuda a las personas a hacer todo tipo de cosas con ellos. Para modificar los datos,
puede construir sobre lo que ya tiene, en lugar de desechar todo lo que ha hecho y comenzar de nuevo cada
vez que necesite hacer algo nuevo. Aunque los programadores de computadoras generalmente son personas
inteligentes, se tomaron un tiempo para resolver esto. Para ver la lección de historia completa, vea la barra
lateral "El sinuoso camino de FORTRAN a Java" (pero no lo haré sentir culpable si no lo lee).
Capítulo 1: Todo sobre Java 17

El sinuoso camino de FORTRAN a Java


A mediados de la década de 1950, un equipo de personas creó un los artículos de la revista de aficionados a la informática. Mientras
lenguaje de programación llamado FORTRAN. Era un buen tanto, los idiomas basados ​en el antiguo modelo FORTRAN se
lenguaje, pero se basaba en la idea de que debía emitir comandos multiplicaban como conejos. Entonces, en 1986, un compañero
directos e imperativos a la computadora. “Haz esto, computadora. llamado Bjarne Stroustrup creó un lenguaje llamado C ++. El
Entonces haz eso, computadora. (Por supuesto, los comandos en lenguaje C ++ se hizo muy popular porque mezcló la antigua
un programa FORTRAN real fueron mucho más precisos que terminología del lenguaje C con la estructura orientada a objetos
"Hacer esto" o "Hacer aquello"). En los años siguientes, los equipos mejorada. Muchas compañías dieron la espalda al viejo estilo de
desarrollaron muchos nuevos lenguajes de computadora, y muchos programación FORTRAN / C y adoptaron C ++ como estándar. Pero
de los idiomas copiaron el FORTRAN Modelo "Hacer esto / Hacer C ++ tenía un defecto. Con C ++, puede omitir todas las funciones
aquello". Uno de los idiomas más populares de "Haz esto / Haz eso"
orientadas a objetos y escribir un programa utilizando el antiguo
se hizo con el nombre de una letra C.
estilo de programación FORTRAN / C. Cuando comenzaste a

escribir un programa de contabilidad C ++, podías tomar cualquier

bifurcación en el camino:
Por supuesto, el campamento "Haz esto / Haz eso" tenía
algunos renegados. En lenguajes llamados SIMULA y
Smalltalk, los programadores trasladaron los imperativos
comandos "Hacer esto" a un segundo plano y se concentraron ✓ Podrías comenzar emitiendo directamente "Haz esto"

en las descripciones de los datos. En estos idiomas, no salió y comandos a la computadora, diciendo el equivalente
dijo: "Imprima una lista de cuentas morosas". En cambio, matemático de "Imprima una lista de cuentas
comenzaste diciendo: “Esto es lo que significa ser una cuenta. morosas y hágala rápida".
Una cuenta tiene un nombre y un saldo ". Luego dijiste: "Así es
✓ Podrías tomar el objeto orientado
como le preguntas a una cuenta si es morosa". De repente, los enfoque y comience describiendo lo que significa ser una
datos se convirtieron en rey. Una cuenta era algo que tenía un
cuenta. Algunas personas dijeron que C ++ ofrecía lo mejor de
nombre, un saldo y una forma de decirle si era morosa. Los
ambos mundos, pero otras argumentaron que el primer mundo
idiomas que se centran primero en los datos se llaman orientado
(el mundo de FORTRAN y C) no debería ser parte de la
a objetos lenguajes de programación. Estos lenguajes
programación moderna. Si le dio a un programador la
orientados a objetos hacen excelentes herramientas de
oportunidad de escribir código de cualquier manera, el
programación. Este es el por qué:
programador con demasiada frecuencia optaría por escribir el
código de manera incorrecta. Entonces, en 1995, James Gosling
de Sun Microsystems creó el lenguaje llamado Java. Al crear
Java, Gosling tomó prestada la apariencia de C ++. Pero Gosling
✓ Pensar primero en los datos te convierte en un tomó la mayoría de las viejas características de "Hacer esto /
buen programador de computadoras. Hacer aquello" de C ++ y las tiró a la basura. Luego agregó
características que hicieron que el desarrollo de objetos fuera
✓ Puede ampliar y reutilizar las descripciones.
más fácil y sencillo. Con todo, Gosling creó un lenguaje cuya
de datos una y otra vez. Sin embargo, cuando intenta
filosofía orientada a objetos es pura y limpia. Cuando programa
enseñar a los viejos programas FORTRAN nuevos trucos, los
en Java, no tiene más remedio que trabajar con objetos. Esa es
viejos programas muestran cuán frágiles son. Se rompen. En
la manera que debe ser.
la década de 1970, los lenguajes orientados a objetos, como
SIMULA y Smalltalk, fueron enterrados en
18 años Parte I: Comenzando

Objetos y sus clases


En un lenguaje orientado a objetos, usa objetos y clases para organizar sus datos.

Imagine que está escribiendo un programa de computadora para realizar un seguimiento de las casas en un
nuevo desarrollo de condominios (aún en construcción). Las casas difieren solo ligeramente entre sí. Cada
casa tiene un color de revestimiento distintivo, un color de pintura interior, un estilo de gabinete de cocina,
etc. En su programa de computadora orientado a objetos, cada casa es un objeto.

Pero los objetos no son toda la historia. Aunque las casas difieren ligeramente entre sí, todas comparten la
misma lista de características. Por ejemplo, cada casa tiene una característica conocida como revestimiento de
color. Cada casa tiene otra característica conocida como Gabinete de cocina estilo. En su programa orientado a
objetos, necesita una lista maestra que contenga todas las características que puede poseer un objeto
doméstico. Esta lista maestra de características se denomina clase.

Entonces ahí lo tienes. La programación orientada a objetos está mal nombrada. Realmente debería
llamarse "programación con clases y objetos".

Ahora note que puse la palabra clases primero. ¿Cómo me atrevo a hacer esto? Bueno, tal vez no estoy tan
loco. Piense nuevamente en un desarrollo de viviendas que está en construcción. En algún lugar del lote, en un
desvencijado remolque estacionado sobre tierra desnuda, hay una lista maestra de características conocidas
como planos. El plano de un arquitecto es como la clase de un programador orientado a objetos. Un
anteproyecto es una lista de características que tendrá cada casa. El plano dice, "revestimiento". El objeto real
de la casa tiene revestimiento gris. El plano dice: "mueble de cocina". El objeto real de la casa tiene gabinetes
de cocina Louis XIV.

La analogía no termina con listas de características. Existe otro paralelismo importante entre los
planos y las clases. Un año después de crear el plano, lo usa para construir diez casas. Es lo mismo
con las clases y los objetos. Primero, el programador escribe código para describir una clase. Luego,
cuando se ejecuta el programa, la computadora crea objetos de la clase (blueprint).

Esa es la verdadera relación entre clases y objetos. El programador define una clase, y desde la
definición de la clase, la computadora crea objetos individuales.

¿Qué tiene de bueno un lenguaje


orientado a objetos?
Basado en la historia de la sección anterior sobre la construcción de viviendas, imagine que ya ha escrito un
programa de computadora para realizar un seguimiento del edificio

www.allitebooks.com
Capítulo 1: Todo sobre Java 19
instrucciones para casas en un nuevo desarrollo. Luego, el gran jefe decide un plan modificado: un
plan en el que la mitad de las casas tienen tres dormitorios y la otra mitad tiene cuatro.

Si utiliza el viejo estilo FORTRAN / C de programación de computadoras, sus instrucciones se verán así:

Cava una zanja para el sótano. Coloque hormigón alrededor de los lados de la zanja. Ponga dos por
cuatro a lo largo de los lados para el marco del sótano.

. . .

Esto sería como un arquitecto creando una larga lista de instrucciones en lugar de un plano. Para
modificar el plan, debe ordenar la lista para encontrar las instrucciones para construir dormitorios. Para
empeorar las cosas, las instrucciones podrían estar dispersas entre las páginas 234, 394–410, 739, 10 y
2. Si el constructor tuviera que descifrar las complicadas instrucciones de otras personas, la tarea sería
diez veces más difícil.

Empezar con una clase, sin embargo, es como comenzar con un plano. Si decide tener casas de tres y
cuatro dormitorios, puede comenzar con un plan llamado casa plano que tiene una planta baja y un
segundo piso, pero no tiene paredes interiores dibujadas en el segundo piso. Luego, haces dos planos
más del segundo piso, uno para la casa de tres habitaciones y otro para la casa de cuatro habitaciones.
(Nombra estos nuevos planos casa de tres habitaciones plano y el casa de cuatro dormitorios Plano.)

Sus colegas constructores están asombrados con su sentido de lógica y organización, pero tienen
preocupaciones. Ellos plantean una pregunta. “Usted llamó a uno de los planos el plano de la 'casa de
tres habitaciones'. ¿Cómo puedes hacer esto si es un plano para un segundo piso y no para una casa
entera?

Sonríe a sabiendas y responde: "El plano de la casa de tres dormitorios puede decir: 'Para obtener
información sobre los pisos inferiores, vea el plano original de la casa'. De esa manera, el plano de la casa
de tres dormitorios describe una casa entera. El plano de la casa de cuatro dormitorios puede decir lo
mismo. Con esta configuración, podemos aprovechar todo el trabajo que ya hicimos para crear el plano
original de la casa y ahorrar mucho dinero ”.

En el lenguaje de la programación orientada a objetos, las clases de casa de tres y cuatro dormitorios son heredando
Las características de la clase original de la casa. También puede decir que las clases de casa de tres y
cuatro dormitorios son extensión La casa original de clase. (Ver Figura 1-1.)

La clase de casa original se llama superclase de las clases de casas de tres y cuatro dormitorios. En ese
sentido, las clases de casa de tres y cuatro dormitorios son
subclases de la clase original de la casa. Dicho de otra manera, la clase de casa original se llama clase
de padres de clases de casas de tres y cuatro dormitorios. los
20 Parte I: Comenzando
clases de casa de tres y cuatro dormitorios son clases infantiles de la clase original de la casa. (Ver Figura
1-1.)

No hace falta decir que sus colegas constructores están celosos. Una multitud de constructores de
viviendas está acosando a su alrededor para escuchar sus grandes ideas. Entonces, en ese momento,
lanzas una bomba más: “Al crear una clase con subclases, podemos reutilizar el plan en el futuro. Si alguien
viene y quiere una casa de cinco habitaciones, podemos extender nuestro plano original de la casa
haciendo un plano de la casa de cinco habitaciones. Nunca más tendremos que gastar dinero en un plano
original de la casa ”.

“Pero”, dice un colega en la fila de atrás, “¿qué pasa si alguien quiere un diseño diferente en el primer
piso? ¿Basuramos el plano original de la casa o comenzamos a garabatear todo el plano original? Eso
costará mucho dinero, ¿no?

En un tono confiado, usted responde: “No tenemos que meternos con el plano original de la casa. Si alguien
quiere un jacuzzi en su sala de estar, podemos hacer un pequeño plano nuevo que describa solo la nueva
sala de estar y llamar a esto el Jacuzzis en la sala de estar Plano. Entonces, este nuevo plano puede referirse
al plano original de la casa para obtener información sobre el resto de la casa (la parte que no está en la sala
de estar) ". En el lenguaje de la programación orientada a objetos, el plano de la casa Jacuzzi en la sala de
estar todavía se extiende El plano original de la casa. El modelo de Jacuzzi sigue siendo una subclase del
modelo original de la casa. De hecho, toda la terminología sobre superclase, clase principal y clase
secundaria todavía se aplica. Lo único que es nuevo es que el plano de Jacuzzi anula Las características de la
sala de estar en el plano original de la casa.

La clase de la casa es
Padre de la superclase
el superclase de la clase de la casa de tres dormitorios, el clase de padres de

clase de la casa la clase de la casa de tres dormitorios, el superclase de la clase de la casa de


cuatro dormitorios, el clase de padres de la clase de la casa de cuatro
dormitorios.

Subclase Infantil Subclase niño

clase de casa de tres clase de casa de

dormitorios cuatro dormitorios

Figura 1-1:
La clase de la casa de tres dormitorios. La clase de la casa de cuatro dormitorios.
Terminología
se extiende la clase de la casa se extiende la clase de la casa
en
hereda Las características de la clase de la casa, es un subclase hereda Las características de la clase de la casa, es un subclase
programación
de la clase de la casa, es un niño clase de la casa clase. de la clase de la casa, es un niño clase de la casa clase.
orientada a objetos.
Capítulo 1: Todo sobre Java 21
En los días previos a los lenguajes orientados a objetos, el mundo de la programación experimentó una crisis en
el desarrollo de software. Los programadores escribieron código, luego descubrieron nuevas necesidades, y
luego tuvieron que tirar su código a la basura y comenzar desde cero. Esto sucedió una y otra vez porque el
código que escribían los programadores no podía reutilizarse. La programación orientada a objetos cambió todo
esto para mejor (y, como dijo Burd, Java es "un gran lenguaje orientado a objetos").

Refinando su comprensión de
clases y objetos
Cuando programa en Java, trabaja constantemente con clases y objetos. Estas dos ideas son
realmente importantes. Por eso, en este capítulo, te golpeé en la cabeza con una analogía tras otra
sobre las clases y los objetos.

Cierra los ojos por un minuto y piensa en lo que significa que algo sea una silla. . . .

Una silla tiene un asiento, un respaldo y patas. Cada asiento tiene una forma, un color, un grado de
suavidad, etc. Estas son las propiedades que posee una silla. Lo que describo es presidencia - la noción
de que algo es una silla. En terminología orientada a objetos, estoy describiendo el Silla clase.

Ahora mire por encima del margen de este libro y tómese un minuto para mirar alrededor de su habitación. (Si
no estás sentado en una habitación en este momento, finge).

Hay varias sillas en la sala, y cada silla es un objeto. Cada uno de estos objetos es un ejemplo de esa
cosa etérea llamada Silla clase. Así es como funciona: la clase es la idea de presidencia, y cada silla
individual es un objeto.

Una clase no es una colección de cosas. En cambio, una clase es la idea detrás de cierto tipo de
cosas. Cuando hablo de la clase de sillas en su habitación, estoy hablando del hecho de que cada silla
tiene patas, un asiento, un color, etc. Los colores pueden ser diferentes para diferentes sillas en la
sala, pero eso no importa. Cuando hablas de una clase de cosas, te estás enfocando en las
propiedades que posee cada una de las cosas.

Tiene sentido pensar que un objeto es una instancia concreta de una clase. De hecho, la terminología
oficial es consistente con este pensamiento. Si escribe un programa Java en el que define un Silla clase,
cada silla real (la silla en la que estás sentado, la silla vacía a tu lado, etc.) se llama ejemplo del Silla clase.
22 Parte I: Comenzando
Aquí hay otra forma de pensar en una clase. Imagine una tabla que muestra las tres cuentas bancarias.
(Ver Tabla 1-1.)

Cuadro 1-1 Una tabla de cuentas

Número de cuenta Tipo Equilibrar

16-13154-22864-7 Comprobación 174,87

1011 1234 2122 0000 Crédito - 471,03

16-17238-13344-7 Ahorros 247,38

Piense en los encabezados de columna de la tabla como una clase y piense en cada fila de la tabla como un
objeto. Los encabezados de columna de la tabla describen el Cuenta clase.

Según los encabezados de las columnas de la tabla, cada cuenta tiene un número de cuenta, un
tipo y un saldo. Reformulado en la terminología de la programación orientada a objetos, cada
objeto en el Cuenta clase (es decir, cada instancia de la Cuenta clase) tiene un número de cuenta,
un tipo y un saldo. Entonces, la fila inferior de la tabla es un objeto con número de cuenta

16-17238-13344-7. Este mismo objeto tiene tipo Ahorros y un balance de


247.38. Si abriera una nueva cuenta, tendría otro objeto y la tabla crecería una fila adicional. El
nuevo objeto sería una instancia del mismo. Cuenta clase.

¿Que sigue?
Este capítulo está lleno de descripciones generales de las cosas. Una descripción general es buena cuando
recién estás comenzando, pero realmente no entiendes las cosas hasta que conoces algunos detalles. Es
por eso que los siguientes capítulos abordan detalles específicos.

Entonces, por favor, pasa la página. El próximo capítulo no puede esperar a que lo leas.
Capitulo 2

Todo sobre el software


En este capítulo
▶ ▶ Comprender los roles de las herramientas de desarrollo de software

▶ ▶ Seleccionar la versión de Java adecuada para usted

▶ ▶ Prepararse para escribir y ejecutar programas Java

T Java, estámanera
La mejor escribiendo, probando
de conocer Java yesejecutando
hacer Java.sus propios
Cuando programas
estas haciendoJava. Este capítulo lo
prepara para hacer Java al describir el general configuración de software: el software que debe tener en
su computadora, ya sea que ejecute Windows, Mac, Linux o el sistema operativo privado de Joe. Este
capítulo
no lo hace describa las instrucciones de configuración específicas para Windows, Mac o cualquier otro
sistema.

Para obtener instrucciones de configuración específicas de su sistema, visite el sitio web de este libro.

Instrucciones de inicio rápido


Si es un veterano experimentado en informática y computación (lo que sea que eso signifique), y si está
demasiado nervioso para obtener instrucciones detalladas del sitio web de este libro, puede intentar instalar el
software requerido siguiendo las instrucciones generales de esta sección. Las instrucciones funcionan para
muchas computadoras, pero no para todas las computadoras. Y esta sección no proporciona pasos detallados,
no hay alternativas de si-esto-entonces-hacer-eso, y no hay consejos de esto-funciona-pero-es-mejor-hacer-otra
cosa.

Para preparar su computadora para escribir programas Java, siga estos pasos:
24 Parte I: Comenzando
✓ Visita Java.com.

Siga las instrucciones en http://java.com/en para descargar e instalar Java.

✓ Opcionalmente, visita java.sun.com/javase/downloads/.

Siga las instrucciones en ese sitio web para descargar e instalar la documentación de Java
SE (también conocida como Páginas Javadoc o el
Documentos Java SE API).

✓ Visita Eclipse.org.

Siga las instrucciones en http://eclipse.org/downloads/


para descargar e instalar Eclipse.

La página de descarga de Eclipse ofrece varios paquetes diferentes, incluidos Eclipse Classic,
Eclipse para Java EE, Eclipse para JavaScript y otros. Para ejecutar los ejemplos de este libro,
necesita un paquete Eclipse relativamente pequeño: el IDE Eclipse para desarrolladores de Java.

✓ Prueba tu software instalado.

• Lanzamiento de Eclipse.

• En Eclipse, cree un nuevo proyecto Java.

• Dentro del proyecto Java, cree una nueva clase Java llamada Visualizador.

• Edite el nuevo Displayer.java archivo escribiendo el código del Listado 3-1 (el primer listado de
código en el Capítulo 3). Escriba el código en el panel del editor de Eclipse.

• Correr Displayer.java y verifique para asegurarse de que la salida de la lectura de


lectura ¡Te encantará Java!

¡Eso es! Pero recuerde, no todos (geek de la computadora o no) pueden seguir estas instrucciones
esqueléticas sin problemas. Entonces tienes varias alternativas:

✓ Visita el sitio web de este libro.

No pase "ir". No intente las instrucciones de inicio rápido de esta sección. Siga las instrucciones
más detalladas que encuentre en www.allmycode.com/ JavaForDummies.

✓ Pruebe las instrucciones de inicio rápido de esta sección.

No puedes lastimar nada al intentarlo. Si accidentalmente instala el software incorrecto,


probablemente pueda dejar el software incorrecto en su computadora. (No tiene que
desinstalarlo). Si no está seguro de si ha instalado el software correctamente, siempre puede
recurrir a las instrucciones detalladas de mi sitio web.

✓ Envíeme sus preguntas por correo electrónico a JavaForDummies@allmycode.com.

Me gusta recibir correos electrónicos de los lectores.


Capítulo 2: Todo sobre el software 25

Lo que instala en su computadora


Una vez conocí una herramienta y un fabricante de matrices. Usó herramientas para hacer herramientas (y muere). Me
alegró conocerlo porque sabía que, algún día, haría una analogía entre los programadores de computadoras y los
fabricantes de herramientas y matrices.

Un programador de computadoras usa programas existentes como herramientas para crear nuevos programas. Los
programas existentes y los nuevos programas pueden realizar diferentes tipos de tareas. Por ejemplo, un programa
Java (un programa que usted crea) podría realizar un seguimiento de los clientes de una empresa. Para crear ese
programa de seguimiento de clientes, puede usar un programa existente que busque errores en su código Java. Este
programa de búsqueda de errores de propósito general puede encontrar errores en cualquier tipo de código Java:
código de seguimiento del cliente, código de predicción del clima, código de juego o el código de una aplicación en su
teléfono móvil.

Entonces, ¿cuántas herramientas necesitas para crear programas Java? Como novato, necesitas tres
herramientas.

✓ Tu necesitas un compilador.

Un compilador toma el código Java que usted escribe y convierte ese código en algo que puede
ejecutarse en su computadora.

✓ Tu necesitas un Máquina virtual de Java ( JVM).

Una máquina virtual Java ejecuta su código (y el código Java de otras personas) en su
computadora.

✓ Necesitas un entorno de desarrollo integrado ( IDE).

Un entorno de desarrollo integrado lo ayuda a administrar su código Java y le brinda formas


convenientes para escribir, compilar y ejecutar su código.

La World Wide Web tiene versiones gratuitas y descargables de cada una de estas herramientas. Por
ejemplo, las instrucciones de inicio rápido cerca del comienzo de este capítulo le recomiendan visitar
Java.com y Eclipse.org. Al hacer clic en un botón en un Java. com, instala una máquina virtual Java en
su computadora. En Eclipse org, descarga el entorno de desarrollo integrado Eclipse, que viene con su
propio compilador Java incorporado. (Obtienes dos de las tres herramientas en una descarga. ¡No está
mal!)

El resto de este capítulo describe compiladores, JVM e IDE.

El resto de este capítulo proporciona información general sobre el software que necesita en su computadora.
Pero el capítulo no contiene absolutamente ninguna instrucción detallada para ayudarlo a instalar el software.
Para obtener instrucciones detalladas, visite el sitio web de este libro.
26 Parte I: Comenzando

¿Qué es un compilador?
"Un compilador toma el código Java que escribes y convierte ese código en algo que puede
ejecutarse en tu computadora".

- Barry Burd Java para tontos, 5ta edición

Eres un ser humano (Claro, cada regla tiene excepciones. Pero si está leyendo este libro, probablemente sea
humano). De todos modos, los humanos pueden escribir y comprender el código en el Listado 2-1.

Listado 2-1: Buscando una habitación vacante

// Esto es parte de un programa Java // (no es un


programa Java completo). roomNum = 1;

while (roomNum <100) {


if (invitados [roomNum] == 0) {
out.println ("Habitación" + habitaciónNum
+ " está disponible.");
salida (0); }
más {
roomNum ++; }

} out.println ("Sin vacante");

El código Java en el Listado 2-1 busca vacantes en un hotel pequeño (un hotel con números de habitación
del 1 al 99). No puede ejecutar el código en el Listado 2-1 sin agregar varias líneas adicionales. Pero aquí en
el Capítulo 2, esas líneas adicionales no son importantes. Lo importante es que, al mirar el código,
entrecerrar los ojos un poco y mirar más allá de la extraña puntuación del código, puede ver lo que el código
está tratando de hacer:

Establezca el número de habitación en 1.


Mientras el número de habitación sea inferior a 100,
Verifique el número de invitados en la habitación. Si el número de invitados en la
habitación es 0, entonces
informar que la habitación está disponible y detenerse. De
otra manera,

prepárese para verificar la siguiente habitación agregando 1 al número de


habitación. Si llegas a la habitación inexistente número 100, entonces

informar que no hay vacantes.

Si no ve las similitudes entre el Listado 2-1 y su equivalente en inglés, no se preocupe. Estas leyendo Java
para tontos, 5ta Edición, y como la mayoría
Capítulo 2: Todo sobre el software 27
seres humanos, puede aprender a leer y escribir el código en el Listado 2-1. El código en el Listado 2-1 se
llama Código fuente de Java.

Así que aquí está el truco: las computadoras no son seres humanos. Las computadoras normalmente no siguen
instrucciones como las del Listado 2-1. Es decir, las computadoras no siguen las instrucciones del código fuente
de Java. En cambio, las computadoras siguen instrucciones crípticas como las del Listado 2-2:

Listado 2-2: Las instrucciones del Listado 2-1 traducidas al código de bytes de Java

aload_0
iconst_1
Putfield Hotel / habitaciónNum I goto
32 aload_0

Hotel getfield / invitados [I aload_0

getfield Hotel / roomNum I iaload


ifne 26

getstatic java / lang / System / out Ljava / io / PrintStream; nuevo java /


lang / StringBuilder dup ldc "Room"

invokespecial java / lang / StringBuilder / <init> (Ljava / lang / String;) V aload_0

getfield Hotel / habitaciónNum I


invokevirtual java / lang / StringBuilder / append (I) Ljava / lang / StringBuilder; ldc "está disponible".
invokevirtual

java / lang / StringBuilder / append (Ljava / lang / String;) Ljava / lang / StringBuilder; invokevirtual java / lang
/ StringBuilder / toString () Ljava / lang / String; invokevirtual java / io / PrintStream / println (Ljava / lang /
String;) V iconst_0

invokestatic java / lang / System / exit (I) V goto 32


aload_0 dup

getfield Hotel / roomNum I iconst_1


iadd

Putfield Hotel / habitaciónNum I


aload_0
getfield Hotel / roomNum I bipush
100 if_icmplt 5

getstatic java / lang / System / out Ljava / io / PrintStream; ldc "Sin


vacantes"
invokevirtual java / io / PrintStream / println (Ljava / lang / String;) V return
28 Parte I: Comenzando
Las instrucciones en el Listado 2-2 no son instrucciones de código fuente Java. Ellos son
Código de bytes de Java instrucciones. Cuando escribe un programa Java, escribe instrucciones de código
fuente (como las instrucciones en el Listado 2-1). Después de escribir el código fuente, ejecuta un programa
(es decir, aplica una herramienta) a su código fuente. El programa es un compilador. El compilador traduce sus
instrucciones de código fuente en instrucciones de bytecode de Java. En otras palabras, el compilador toma
código que puede escribir y comprender (como el código en el Listado 2-1) y traduce su código en código que
una computadora puede ejecutar (como el código en el Listado 2-2).

Puede poner su código fuente en un archivo llamado Hotel.java. Si es así, el compilador probablemente coloca
el código de bytes de Java en otro archivo llamado Hotel.clase.
Normalmente, no te molestas en mirar el código de bytes en el Hotel.clase expediente. De hecho, el
compilador no codifica el Hotel.clase archivo como texto ordinario, por lo que no puede examinar el código
de bytes con un editor ordinario. Si intentas abrir
Hotel.clase con el Bloc de notas, TextEdit, KWrite o incluso Microsoft Word, no verá nada más que puntos,
garabatos y otros tragos. Para crear el Listado 2-2, tuve que aplicar otra herramienta más a mi Hotel.clase expediente.
Esa herramienta muestra una versión de texto de un archivo de bytecode de Java. Usé el editor de bytecode
Java de Ando Saabas ( www.cs.ioc.ee/~ando/jbe).

Nadie (excepto algunos desarrolladores locos en algunos laboratorios aislados en lugares lejanos) escribe el
código de bytes de Java. Ejecutas software (un compilador) para crear un código de bytes Java. La única razón
para mirar el Listado 2-2 es entender qué tan trabajador es su computadora.

¿Qué es una máquina virtual Java?


"Una máquina virtual Java ejecuta su código (y el código Java de otras personas) en su
computadora".

- Barry Burd Java para tontos, 5ta edición

En el anterior "¿Qué es un compilador?" En la sección, hago un gran alboroto sobre las computadoras siguiendo
instrucciones como las del Listado 2-2. A medida que van los alborotos, es un alboroto muy agradable. Pero si no lee
cada palabra quisquillosa, puede estar equivocado. La redacción exacta es ". . . las computadoras siguen instrucciones
crípticas me gusta los del Listado 2-2 ". Las instrucciones en el Listado 2-2 son muy parecidas a las instrucciones que
una computadora puede ejecutar, pero en general, las computadoras no ejecutan instrucciones de código de bytes
Java. En cambio, cada tipo de procesador de computadora tiene su propio conjunto de instrucciones ejecutables, y
cada sistema operativo usa las instrucciones del procesador de una manera ligeramente diferente.

www.allitebooks.com
Capítulo 2: Todo sobre el software 29
Aquí hay una situación hipotética: imagine que ejecuta el sistema operativo Linux en una computadora que
tiene un antiguo procesador Pentium. Su amigo ejecuta Linux en una computadora con un tipo diferente de
procesador: un procesador PowerPC. (En la década de 1990, Intel Corporation fabricó procesadores Pentium
e IBM fabricó procesadores PowerPC).

El Listado 2-3 contiene un conjunto de instrucciones para mostrar ¡Hola Mundo! en la pantalla de la
computadora. * Las instrucciones funcionan en un procesador Pentium que ejecuta el sistema operativo Linux.

Listado 2-3: Un programa simple para un procesador Pentium

. datos

mensaje:
. ascii "Hola, mundo! \ n" len =. - msg

. texto

. inicio global

_comienzo:

movl $ len,% edx


movl $ msg,% ecx
movl $ 1,% ebx
movl $ 4,% eax
int $ 0x80

movl $ 0,% ebx


movl $ 1,% eax
int $ 0x80

El Listado 2-4 contiene otro conjunto de instrucciones para mostrar ¡Hola Mundo! en la pantalla. ** Las
instrucciones en el Listado 2-4 funcionan en un procesador PowerPC con Linux.

** Parafraseo estas instrucciones de Intel del COMO de Ensamblaje Linux de Konstantin Boldyshev
(tldp.org/HOWTO/Assembly-HOWTO/hello.html).

* ** * Parafraseo el código PowerPC de la página de montaje de PowerPC de Hollis Blanchard


(www.ibm.com/developerworks/library/l-ppc). Hollis también revisó y criticó este "¿Qué es una máquina virtual
Java?" sección para mi. Gracias Hollis
30 Parte I: Comenzando
Listado 2-4: Un programa simple para un procesador PowerPC

. datos

mensaje:
. cadena "Hola, mundo! \ n" len =. - msg

. texto

. inicio global
_comienzo:

li 0,4
li 3,1

lis 4, msg @ ha
addi 4,4, msg @ l
li 5, len
Carolina del Sur

li 0,1
li 3,1
Carolina del Sur

Las instrucciones en el Listado 2-3 se ejecutan sin problemas en un procesador Pentium. Pero estas instrucciones no
significan nada para un procesador PowerPC. Del mismo modo, las instrucciones en el Listado 2-4 se ejecutan bien en un
PowerPC, pero estas mismas instrucciones son un completo truco para una computadora con un procesador Pentium. Por
lo tanto, el software PowerPC de su amigo podría no estar disponible en su computadora. Y el software de su
computadora Intel podría no ejecutarse en absoluto en la computadora de su amigo.

Ahora ve a la casa de tu primo. La computadora de su primo tiene un procesador Pentium (como el suyo),
pero la computadora de su primo ejecuta Windows en lugar de Linux. ¿Qué hace la computadora de tu
primo cuando le das el código Pentium en el Listado 2-3? Grita: "No es una aplicación Win32 válida" o
"Windows no puede abrir este archivo". ¡Que desastre!

El código de bytes de Java crea orden a partir de todo este caos. El código de bytes de Java es algo así como el
código en los listados 2-3 y 2-4, pero el código de bytes de Java no es específico para un tipo de procesador o un
sistema operativo. En cambio, se ejecuta un conjunto de instrucciones de bytecode de Java en cualquier computadora.
Si escribe un programa Java y compila ese programa Java en bytecode, entonces su computadora puede ejecutar el
bytecode, la computadora de su amigo puede ejecutar el bytecode, el superordenador de su abuela puede ejecutar el
bytecode, y con suerte, su pequeño, pequeño El teléfono celular puede ejecutar el código de bytes.
Capítulo 2: Todo sobre el software 31
Para ver algunos códigos de bytes de Java, consulte el Listado 2-2. Pero recuerde, nunca tiene que escribir o
descifrar el bytecode de Java. Escribir bytecode es el trabajo del compilador. Descifrar bytecode es el trabajo
de la máquina virtual Java.

Con Java, puede tomar un archivo de código de bytes que creó con una computadora Windows, copiar el código
de bytes a quién sabe qué tipo de computadora y luego ejecutar el código de bytes sin ningún problema. Esa es
una de las muchas razones por las cuales Java se ha vuelto tan popular. Esta característica sobresaliente, que le
brinda la capacidad de ejecutar código en muchos tipos diferentes de computadoras, se llama portabilidad.

¿Qué hace que el bytecode de Java sea tan versátil? Esta fantástica universalidad que disfrutan los programas
de bytecode de Java proviene de la máquina virtual Java. La máquina virtual Java es una de esas tres
herramientas que debe tener en su computadora.

Imagine que es el representante de Windows en el Consejo de Seguridad de las Naciones Unidas.


(Consulte la Figura 2-1.) El representante de Macintosh está sentado a su derecha y el representante de
Linux está a su izquierda. (Naturalmente, no te llevas bien con ninguna de estas personas. Siempre eres
cordial el uno con el otro, pero nunca eres sincero. ¿Qué esperas? ¡Es política!) El distinguido
representante de Java está en el podio. El representante de Java está hablando en código de bytes, y ni
usted ni sus colegas embajadores (Mac y Linux) entienden una palabra de código de bytes de Java.

Máquinas
virtuales Java

ac
M
Código de
compilador d igo
fuente de Có
Java

s
ow
Figura 2-1: ind
W
Una de
o
dig
reunión Có
bytecode
imaginaria del

Consejo de

Seguridad de
x
inu
la ONU. eL
od
dig

32 Parte I: Comenzando

¿Qué demonios es Java 2?


Si hurgas en la web buscando herramientas Java, En 2004, Sun vuelve a "JDK" y abandona parcialmente el
encontrarás cosas con todo tipo de nombres extraños. tonto esquema de numeración 1.x. Digo "parcialmente"
Encontrará el Kit de desarrollo de Java, el Kit de desarrollo porque, además de ser "Java 2", el JDK tiene dos
de software, el entorno de ejecución de Java y otros nombres números de versión. los número de versión del producto es
confusos. 5.0, y el
número de versión del desarrollador es 1.5.0. Por lo tanto,
✓ Los nombres Kit de desarrollo de Java ( JDK) y
cuando se refiere al JDK, puede llamarlo “versión 5.0” o
Kit de desarrollo de software ( SDK) significa diferentes versiones
“versión 1.5.0” dependiendo del tipo de personas que quiera
del mismo conjunto de herramientas: un conjunto de herramientas
impresionar.
cuyo componente clave es un compilador de Java.

✓ Java 6 JDK (2006)

✓ El nombre Java Runtime Environment ( JRE) En 2006, Sun elimina el innecesario "2" y también elimina el
significa un conjunto de herramientas cuyo componente clave es ".0". Por supuesto, la antigua numeración de la versión del
una máquina virtual Java. desarrollador nunca muere. Además de ser "Java 6." esta
versión también tiene el nombre "Java 1.6.0".
No es malo tener el JRE en su computadora, pero
para escribir nuevos programas Java, necesita algo
más poderoso que el JRE. Necesitas el JDK. ✓ Java 6 Actualización 1 (2007)

Sun continúa con las actualizaciones 2, 3, 4, etc. A principios


La numeración de las versiones de Java también es confusa. En de 2010, Oracle Corporation compra Sun Microsystems.
lugar de "Java 1", "Java 2" y "Java 3", la numeración de las Oracle lanza actualizaciones 19, 20, 21 (y así sucesivamente)
versiones de Java pasa por una carrera de obstáculos. Así es hasta. . .
como funciona:
✓ Java 7 (2011)
✓ Java JDK 1.0 (1996)
Sin lugar a dudas, las actualizaciones 1, 2, 3 y otras siguen
✓ Java JDK 1.1 (1997) la versión inicial de Java 7. La mayoría de los programas en este
libro se ejecutan solo con Java 5.0 o posterior. No se ejecutan
✓ Java 2 SDK, 1.2 (1998)
con ninguna versión anterior a Java 5.0. En particular, no se
En 1998, Sun Microsystems agrega un "2" adicional y ejecutan con Java 1.4 o Java 1.4.2. Algunos de los ejemplos de
cambia "JDK" (Kit de desarrollo de Java) a "SDK" (Kit de este libro no se ejecutan con Java 6 o inferior. Pero no se
desarrollo de software)
preocupe demasiado por los números de versión de Java. Java

✓ Java 2 SDK, 1.3 (2000) 5.0 o 6 es mejor que ningún Java. Puede aprender mucho sobre
Java sin tener la última versión de Java.
✓ Java 2 SDK, 1.4 (2002)

✓ Java 2 JDK, 5.0 (2004)

Pero cada uno de ustedes tiene un intérprete. Su intérprete traduce el código de bytes a Windows
mientras habla el representante de Java. Otro intérprete traduce de bytecode a Macintosh-ese. Y un
tercer intérprete traduce bytecode a Linux-speak.
Capítulo 2: Todo sobre el software 33
Piense en su intérprete como un embajador virtual. El intérprete realmente no representa a su país, pero
el intérprete realiza una de las tareas importantes que realiza un verdadero embajador. El intérprete
escucha el código de byte en su nombre. El intérprete hace lo que haría si su idioma nativo fuera el
código de bytes de Java. El intérprete pretende ser el embajador de Windows, y se sienta a través del
aburrido discurso de código de bytes, asimilando cada palabra y procesando cada palabra de una forma
u otra.

Tienes un intérprete, un embajador virtual. Del mismo modo, una computadora con Windows ejecuta su propio
software de interpretación de código de bytes. Ese software es la máquina virtual Java.

Una máquina virtual Java es un proxy, un chico de los recados, un intermediario. La JVM sirve como intérprete
entre el código de bytes de ejecución en cualquier lugar de Java y el propio sistema de su computadora.
Mientras se ejecuta, la JVM guía su computadora a través de la ejecución de instrucciones de bytecode. La JVM
examina su código de bytes, poco a poco, y lleva a cabo las instrucciones descritas en el código de bytes. La
JVM interpreta el código de bytes para su sistema Windows, su Mac o su caja Linux, o para cualquier tipo de
computadora que esté utilizando. Eso es bueno. Es lo que hace que los programas Java sean más portátiles que
los programas en cualquier otro idioma.

Desarrollo de software
"Todo esto ha sucedido antes, y todo esto volverá a suceder".

- Battlestar Galactica, 2003-2009, NBC Universal

Cuando crea un programa Java, repite los mismos pasos una y otra vez. La figura 2-2 ilustra el ciclo.

Usted compila el
Tu escribes codigo
código

Figura 2-2:
Modificas el Ejecutas el
Desarrollando
código código
Un

programa Java.
34 Parte I: Comenzando
Primero, escribes un programa. Después de escribir el primer borrador, compila, ejecuta y modifica
repetidamente el programa. Con un poco de experiencia, los pasos de compilación y ejecución se vuelven muy
fáciles. En muchos casos, un clic del mouse inicia la compilación o la ejecución.

Sin embargo, escribir el primer borrador y modificar el código no son tareas de un solo clic. El desarrollo
del código requiere tiempo y concentración.

Nunca se desanime cuando el primer borrador de su código no funcione. Por lo demás, nunca se desanime
cuando el vigésimo quinto borrador de su código no funcione. Reescribir el código es una de las cosas más
importantes que puede hacer (además de garantizar la paz mundial).

Para obtener instrucciones detalladas sobre cómo compilar y ejecutar programas Java, visite el sitio web de este libro.

Cuando las personas hablan sobre escribir programas, usan la redacción de la Figura 2-2. Dicen:
"Compila el código" y "Ejecuta el código". Pero el "usted" no siempre es preciso, y el "código" difiere
ligeramente de una parte del ciclo a la siguiente. La Figura 2-3 describe el ciclo de la Figura 2-2 con un
poco más de detalle.

Para las necesidades de la mayoría de las personas, la Figura 2-3 contiene demasiada información. Si hago clic en el
ícono Ejecutar, no tengo que recordar que la computadora ejecuta el código en mi nombre. Y por lo que a mí me
importa, la computadora puede ejecutar mi código Java original o algún corte de bytecode de mi código Java original.
Los detalles en la Figura 2-3 no son importantes. El único uso para la Figura 2-3 es ayudarlo si las palabras sueltas en la
Figura 2-2 lo confunden. Si la Figura 2-2 no te confunde, ignora la Figura 2-3.

A su orden, la
Usted escribe el computadora compila
código fuente de Java el código fuente
(creando bytecode)

Figura 2-3:
Modifica el código Bajo su comando, la computadora
¿Quién hace fuente de Java ejecuta el código de bytes
qué con
cual
codigo
Capítulo 2: Todo sobre el software 35

¿Qué es un entorno de desarrollo


integrado?
"Un entorno de desarrollo integrado lo ayuda a administrar su código Java y le brinda formas
convenientes para escribir, compilar y ejecutar su código".

- Barry Burd Java para tontos, 5ta edición

En los viejos tiempos, escribir y ejecutar un programa Java implicaba abrir varias ventanas: una
ventana para escribir el programa, otra ventana para ejecutar el programa y tal vez una tercera
ventana para realizar un seguimiento de todo el código que ha escrito. (Ver Figura 2-4.)

Un entorno de desarrollo integrado combina a la perfección toda esta funcionalidad en una aplicación
bien organizada. (Ver Figura 2-5.)

Java tiene su parte de entornos de desarrollo integrados. Algunos de los productos más populares
incluyen Eclipse, IntelliJ IDEA y NetBeans. Algunos entornos sofisticados incluso tienen componentes
de arrastrar y soltar para que pueda diseñar su interfaz gráfica visualmente. (Ver Figura 2-6.)

Figura 2-4:
Desarrollando

código
sin un
entorno de
desarrollo
integrado.
36 Parte I: Comenzando

Figura 2-5:
Desarrollo de
código con el
entorno de
desarrollo
integrado
Eclipse.

Figura 2-6:
Uso del

generador de

GUI Swing de

arrastrar y soltar

en los
NetBeans
IDE.
Capítulo 2: Todo sobre el software 37
Para ejecutar un programa, puede hacer clic en un botón de la barra de herramientas o elegir Ejecutar en un menú.
Para compilar un programa, es posible que no tenga que hacer nada en absoluto. (Es posible que ni siquiera tenga
que emitir un comando. Algunos IDE compilan su código automáticamente mientras lo escribe).

Para obtener ayuda con la instalación y el uso de un entorno de desarrollo integrado, consulte el sitio web de este
libro.
38 Parte I: Comenzando

www.allitebooks.com
Capítulo 3

Usando los bloques de construcción básicos


En este capítulo
▶ ▶ Hablando el lenguaje Java: la API y la especificación del lenguaje

▶ ▶ Comprender las partes de un programa simple

▶ ▶ Documentando su código

" Все мысли, которые имеют огромные последствия всегда просты.


(Todas las grandes ideas son simples).

- Leo Tolstoy

T La cita se aplica
programación a todo tipo de cosas,
de computadoras. Es porcomo la vida,
eso que este el amor ytiene un enfoque multicapa. En este
capítulo
capítulo, obtendrá sus primeros detalles sobre la programación Java. Y al descubrir detalles, verá las
simplicidades.

Hablando el lenguaje Java


Si intentas imaginar en tu mente todo el idioma inglés, ¿qué ves? Tal vez ves palabras, palabras,
palabras. (Eso es lo que vio Hamlet.) Al mirar el idioma bajo un microscopio, se ve una palabra tras otra.
La imagen de un montón de palabras está bien, pero si retrocede un poco, puede ver otras dos cosas:

✓ La gramática del lenguaje

✓ Miles de expresiones, dichos, modismos y nombres históricos.

La primera categoría (la gramática) incluye reglas como, "El verbo está de acuerdo con el sustantivo en
número y persona". La segunda categoría (expresiones, dichos y otras cosas) incluye conocimientos como,
"Julio César fue un famoso emperador romano, así que no nombre a su hijo Julio César, a menos que
quiera que lo golpeen todos los días después de la escuela".
40 Parte I: Comenzando
El lenguaje de programación Java tiene todos los aspectos de un lenguaje hablado como el inglés. Java tiene
palabras, gramática, nombres de uso común, modismos estilísticos y otras cosas similares.

La gramática y los nombres comunes.


Las personas en Sun Microsystems que crearon Java pensaban que Java tenía dos partes. Del mismo
modo que el inglés tiene su gramática y sus nombres de uso común, el lenguaje de programación Java
tiene su especificación (su gramática) y su interfaz de programación de aplicaciones (sus nombres de
uso común). Cada vez que escribo programas Java, guardo dos documentos importantes, uno para
cada parte del lenguaje, en mi escritorio:

✓ La especificación del lenguaje Java: Esto incluye reglas como, "Poner siempre
un paréntesis abierto después de la palabra para" y "Use un asterisco para multiplicar dos números".

✓ La interfaz de programación de aplicaciones: Programación de aplicaciones de Java


La interfaz (API) contiene miles de herramientas que se agregaron a Java después de que se definió
la gramática del lenguaje. Estas herramientas van desde lo común a lo exótico. Por ejemplo, las
herramientas incluyen una rutina llamada
pow eso puede elevar 5 a la décima potencia para ti. Una herramienta más deslumbrante (llamada JFrame)
muestra una ventana en la pantalla de su computadora. Otras herramientas escuchan los clics de los botones del
usuario, consultan bases de datos y hacen todo tipo de cosas útiles.

Puede descargar la Especificación del idioma, los documentos de la API y toda la otra documentación de
Java (o ver los documentos en línea) hurgando en java.sun.com/javase/reference/api.jsp. Pero ten
cuidado! Esta página web es un objetivo móvil. Para cuando lea este libro, los enlaces en este párrafo
probablemente estarán desactualizados. Lo más seguro es comenzar en Java.Sun.com, y luego buscar
enlaces a cosas como "Java SE" (abreviatura de "Java Standard Edition") y "referencia" o
"documentación".

La primera parte de Java, la Especificación del lenguaje, es relativamente pequeña. Eso no significa que no
se tomará mucho tiempo para descubrir cómo usar las reglas en la Especificación de idioma. Sin embargo,
otros lenguajes de programación tienen el doble, el triple o diez veces el número de reglas.

La segunda parte de Java, la API, puede ser intimidante porque es muy grande. La API contiene casi
4.000 herramientas y sigue creciendo con cada nueva versión del lenguaje Java. Bastante aterrador,
¿eh? Bueno, la buena noticia es que no tienes que memorizar nada en la API. Nada. Nada de eso.
Puede buscar las cosas que necesita usar en la documentación e ignorar las cosas que no necesita. Lo
que usas a menudo, lo recordarás. Lo que no usas con frecuencia, lo olvidarás (como cualquier otro
programador).
Capítulo 3: Uso de los bloques de construcción básicos 41
Nadie sabe todo lo que hay que saber sobre la API de Java. Si eres un programador de Java que escribe
programas que abren nuevas ventanas con frecuencia, sabes cómo usar la API JFrame clase. Si rara vez
escribe programas que abran ventanas, las primeras veces que necesite crear una ventana, puede
buscar el
JFrame clase en la documentación de la API. Supongo que si tomas un programador típico de Java y
evitas que ese programador busque algo en la documentación de la API, el programador podría usar
menos del 2 por ciento de todas las herramientas en la API de Java.

Puedes amar el Para Dummies estilo, pero desafortunadamente, la documentación oficial de la API de Java no está
escrita de esa manera. La documentación de la API es concisa y precisa. Para obtener ayuda para descifrar el idioma
y el estilo de la documentación de la API, consulte el sitio web de este libro.

En cierto modo, nada sobre la API de Java es especial. Cada vez que escribe un programa Java, incluso
el programa Java más pequeño y simple, crea una clase que está a la par con cualquiera de las clases
definidas en la API oficial de Java. La API es solo un conjunto de clases y otras herramientas que fueron
creadas por programadores comunes que participaron en el proceso oficial de la comunidad Java (JCP) y
en el proyecto OpenJDK. A diferencia de las herramientas que crea, las herramientas en la API se
distribuyen con cada versión de Java. (Asumo que usted, el lector, no participa en el Proceso de la
Comunidad Java o el Proyecto OpenJDK. Pero, con un buen libro como Java para tontos, 5ta Edición, uno
nunca sabe.)

Si está interesado en las actividades del JCP, visite www.jcp.org. Si está interesado en el Proyecto
OpenJDK, visite openjdk.java.net.

La gente del JCP no mantiene en secreto los programas Java en la API oficial de Java. Si lo desea,
puede ver todos estos programas. Cuando instala Java en su computadora, la instalación coloca un
archivo llamado src.zip en tu disco duro. Tu puedes abrir src.zip con tu programa de descompresión
favorito. Allí, ante tus ojos, está todo el código API de Java.

Las palabras en un programa Java


Un Javateer duro dirá que el lenguaje de programación Java tiene dos tipos diferentes de palabras:
palabras clave e identificadores. Esto es verdad. Pero la pura verdad, sin otra explicación, a veces es
engañosa. Por lo tanto, recomiendo disfrazar un poco la verdad y pensar en términos de tres tipos de
palabras: palabras clave, identificadores que los programadores comunes como usted y yo creamos, e
identificadores de la API.

Las diferencias entre estos tres tipos de palabras son similares a las diferencias entre las palabras en
el idioma inglés. En la oración "Sam es una persona", la palabra persona Es como una palabra clave
de Java. No importa quien use la palabra persona, la palabra siempre significa aproximadamente lo
mismo. (Claro, puedes pensar en extrañas excepciones en el uso del inglés, pero no lo hagas).
42 Parte I: Comenzando
La palabra Sam es como un identificador de Java porque Sam es un nombre para una persona en particular.
Palabras como Sam, Dinswald, y McGillimaroo no están preempaquetados con significado en el idioma inglés. Estas
palabras se aplican a diferentes personas según el contexto y se convierten en nombres cuando los padres eligen
una para su hijo recién nacido.

Ahora considere la oración "Julio César es una persona". Si pronuncia esta oración, probablemente esté
hablando del tipo que gobernó Roma hasta los idus de marzo. Aunque el nombre Julio César no está
conectado al idioma inglés, casi todos usan el nombre para referirse a la misma persona. Si el inglés
fuera un lenguaje de programación, el nombre Julio César Sería un identificador API.

Así es como yo, en mi mente, divido las palabras en un programa Java en categorías:

✓ Palabras clave: UNA palabra clave es una palabra que tiene su propio significado especial en el
Lenguaje de programación Java, y ese significado no cambia de un programa a otro. Los
ejemplos de palabras clave en Java incluyen si si no
y hacer.

Los miembros del comité JCP, que tienen la última palabra sobre lo que constituye un programa Java,
han elegido todas las palabras clave Java. Si piensa en las dos partes de Java, que discutí
anteriormente en la sección "La gramática y los nombres comunes", las palabras clave de Java
pertenecen sólidamente a la Especificación del lenguaje.

✓ Identificadores: Un identificador Es un nombre para algo. La media del identificador


ing puede cambiar de un programa a otro, pero los significados de algunos identificadores
tienden a cambiar más.

• Identificadores creados por usted y por mí: Como programador de Java (sí, incluso como
programador de Java novato), crea nuevos nombres para las clases y otras cosas que
describe en sus programas. Por supuesto, puedes nombrar algo Principal, y el tipo que
escribe el código dos cubículos por el pasillo puede nombrar algo más Principal.

Eso está bien porque Java no tiene un significado predeterminado para Principal. En su
programa, puede hacer principal representan la tasa preferencial de la Reserva Federal. Y
el chico del pasillo puede hacer
principal significa "pan, panecillos, conservas y costillas". No surge un conflicto, porque
usted y su compañero de trabajo están escribiendo dos programas Java diferentes.

• Identificadores de la API: Los miembros de JCP han creado nombres para muchas cosas y han
arrojado casi 40,000 de estos nombres a la API de Java. La API viene con cada versión de
Java, por lo que estos nombres están disponibles para cualquier persona que escriba un
programa Java. Ejemplos de tales nombres son Cadena, Entero, JWindow, JButton, JTextField, y
Expediente.
Capítulo 3: Uso de los bloques de construcción básicos 43
Estrictamente hablando, los significados de los identificadores en la API de Java no están escritos en piedra.
Aunque puedes inventar tus propios significados para JButton o
JWindow, Esta no es una buena idea. Si lo hiciera, confundiría los dickens de otros programadores, que
están acostumbrados a los significados API estándar para estos nombres de identificadores familiares.
Pero aún peor, cuando su código asigna un nuevo significado a un identificador como JButton, pierde
cualquier poder computacional que se creó para el identificador en el código API. Los programadores de
Sun Microsystems, el Proceso de la Comunidad Java y el Proyecto OpenJDK hicieron todo el trabajo
escribiendo código Java para manejar botones. Si asigna su propio significado a JButton, le das la espalda a
todo el progreso realizado en la creación de la API.

Para ver la lista de palabras clave de Java, visite el sitio web de este libro.

Extraer código Java por


primera vez
La primera vez que mira el programa Java de otra persona, tiende a sentirse un poco mareado. Darse
cuenta de que no comprende algo (o muchas cosas) en el código puede ponerlo nervioso. He escrito
cientos (quizás miles) de programas Java, pero aún me siento inseguro cuando empiezo a leer el
código de otra persona.

La verdad es que conocer un programa Java es una experiencia de arranque. Primero, te maravillas del
programa. Luego ejecuta el programa para ver qué hace. Luego mira el programa por un tiempo o lee la
explicación de alguien sobre el programa y sus partes. Luego miras un poco más y ejecutas el programa
nuevamente. Eventualmente, aceptas el programa. (No le crea a los sabios que dicen que nunca siguen
estos pasos. Incluso los programadores experimentados abordan un nuevo proyecto lenta y
cuidadosamente).

En el Listado 3-1, obtienes una explosión de código Java. (Como todos los programadores novatos, se espera
que mires con humildad el código.) Oculto en el código, he colocado algunas ideas importantes, que explicaré
en detalle en la siguiente sección. Estas ideas incluyen el uso de clases, métodos y declaraciones Java.

Listado 3-1: El programa Java más simple

clase Displayer {

public static void main (String args []) {


System.out.println ("¡Te encantará Java!"); }}
44 Parte I: Comenzando
Cuando ejecuta el programa del Listado 3-1, la computadora muestra ¡Te encantará Java! ( La Figura 3-1
muestra la salida del Visualizador programa cuando usa el IDE de Eclipse.) Ahora, admito que escribir y
ejecutar un programa Java es mucho trabajo solo para obtener ¡Te encantará Java! aparecer en la
pantalla de la computadora de alguien, pero cada esfuerzo tiene que comenzar en alguna parte.

Figura 3-1:
Yo uso Eclipse

para ejecutar el

programa en el

Listado 3-1.

Para aprender cómo ejecutar el código en el Listado 3-1, visite el sitio web de este libro.

En la siguiente sección, haces más que solo admirar la salida del programa. Después de leer la siguiente
sección, realmente comprende lo que hace que el programa en el Listado 3-1 funcione.

Comprender un programa Java simple


Esta sección presenta, explica, analiza, disecciona y desmitifica el programa Java que se muestra
anteriormente en el Listado 3-1.

La clase de Java
Como Java es un lenguaje de programación orientado a objetos, su objetivo principal es describir clases
y objetos. (Si no está convencido de esto, lea las secciones sobre programación orientada a objetos en el
Capítulo 1).

En esos días especiales cuando me siento sentimental, le digo a la gente que Java es más puro en su
orientación a objetos que la mayoría de los otros llamados lenguajes orientados a objetos. Digo esto
porque, en Java, no puedes hacer nada hasta que creas una clase de algún tipo. Es como estar en ¡Peligro!
escuchar a Alex Trebek decir: "Vamos a un comercial" y luego interrumpirlo diciendo: "Lo siento, Alex. No
puede emitir una instrucción sin poner su instrucción dentro de una clase ".

En Java, todo el programa es una clase. Escribí el programa, así que puedo inventar un nombre para mi nueva
clase. Elegí el nombre Visualizador porque el programa muestra una línea de texto en la pantalla de la
computadora. Es por eso que el código en el Listado 3-1 comienza con Exhibidor de clase. ( Ver Figura 3-2.)
Capítulo 3: Uso de los bloques de construcción básicos 45

Todo el programa

clase Displayer {
public static void main (String args []) {
System.out.println ("¡Te encantará Java!"); }}

Figura 3-2:
Un

programa Java es
El exhibidor de clase
una clase.

La primera palabra en el Listado 3-1, clase, es una palabra clave de Java (Consulte la sección "Las palabras en un
programa Java", anteriormente en este capítulo). No importa quién escriba un programa Java, clase siempre se
usa de la misma manera. Por otra parte,
Visualizador en el Listado 3-1 hay un identificador. Invente la palabra Visualizador
mientras escribía este capítulo Visualizador es el nombre de una clase en particular, la clase que
estoy creando escribiendo este programa.

EL LENGUAJE DE PROGRAMACIÓN DE JAVA ES DE SEGURIDAD. SI CAMBIA UNA LETRA EN MINÚSCULAS


EN UNA PALABRA A UNA LETRA MAYÚSCULAS, CAMBIA EL SIGNIFICADO DE LA PALABRA. CAMBIAR EL
CASO PUEDE HACER QUE TODA LA PALABRA PASE DE SER SIGNIFICATIVO A SER SIGNIFICATIVO. EN LA
PRIMERA LÍNEA DE LA LISTA 3-1, NO PUEDE REEMPLAZAR clase CON Clase. SI LO HACE, TODO EL
PROGRAMA DEJA DE FUNCIONAR. Lo mismo es cierto, en cierta medida, para el nombre de un archivo que
contiene una clase particular. Por ejemplo, el nombre de la clase en el Listado 3-1 es Visualizador, comenzando con
una letra mayúscula D. Así que es una buena idea guardar el código del Listado 3-1 en un archivo llamado Displayer.java,

comenzando con una letra mayúscula D.

Normalmente, si define una clase llamada Perro y poni, el código Java de la clase va en un archivo llamado DogAndPony.java,
deletreado y en mayúscula exactamente de la misma manera que el nombre de la clase se deletrea y escribe en
mayúscula. De hecho, esta convención de nomenclatura de archivos es obligatoria para muchos ejemplos en este libro,
comenzando con algunos de los ejemplos en el Capítulo 7.

El método de Java
Estás trabajando como mecánico de automóviles en un garaje exclusivo. Su jefe, que siempre tiene prisa
y tiene la costumbre de pronunciar palabras juntas, dice: "arregle el Alternador en ese junkyOldFord".
Mentalmente, ejecuta una lista de tareas.
46 Parte I: Comenzando
"Conduzca el automóvil hacia la bahía, levante el capó, saque una llave inglesa, afloje el cinturón del alternador", y así
sucesivamente. Aquí están pasando tres cosas:

✓ Tienes un nombre para lo que se supone que debes hacer. El nombre es


fixTheAlternator.

✓ En su mente, tiene una lista de tareas asociadas con el nombre


fixTheAlternator. La lista incluye "Conduzca el automóvil hacia la bahía, levante el capó, obtenga una llave
inglesa, afloje el cinturón del alternador", y así sucesivamente.

✓ Tienes un jefe gruñón que te dice que hagas todo este trabajo. Tu
el jefe lo pone a trabajar diciéndole "arregle el alternativa". En otras palabras, tu jefe te hace
trabajar diciendo el nombre de lo que se supone que debes hacer.

En este escenario, usando la palabra método No sería un gran tramo. Tienes un método para hacer algo
con un alternador. Su jefe llama a ese método a la acción, y usted responde haciendo todas las cosas en
la lista de instrucciones que asocia con el método.

Si crees todo eso (y espero que lo hagas), entonces estás listo para leer sobre los métodos de Java. En
Java, un método es una lista de cosas que hacer. Cada método tiene un nombre, y usted le dice a la
computadora que haga las cosas en la lista usando el nombre del método en su programa.

Nunca he escrito un programa para que un robot repare un alternador. Pero, si lo hiciera, el programa
podría incluir un fixTheAlternator método. La lista de instrucciones en mi fixTheAlternator El método se
parecería al texto del Listado 3-2.

No analice los listados 3-2 y 3-3 con demasiado cuidado. ¡Todo el código en los listados 3-2 y 3-3 es falso!
Creé este código para que se parezca mucho al código Java real, pero no es real. Lo que es más
importante, el código en los listados 3-2 y 3-3 no pretende ilustrar todas las reglas sobre Java. Por lo tanto,
si tiene un grano de sal a mano, tómelo con los listados 3-2 y 3-3.

Listado 3-2: Una declaración de método

void fixTheAlternator () {
driveInto (coche, bahía); ascensor
(capó); obtener (llave inglesa); aflojar
(alternadorBelt);

. . .
}
Capítulo 3: Uso de los bloques de construcción básicos 47
En otro lugar de mi código Java (en algún lugar fuera del Listado 3-2), necesito una instrucción para
llamar a mi fixTheAlternator método en acción. La instrucción de llamar al fixTheAlternator El método en
acción puede parecerse a la línea del Listado 3-3.

Listado 3-3: Una llamada al método

fixTheAlternator (junkyOldFord);

Ahora que tiene una comprensión básica de qué es un método y cómo funciona, puede profundizar
un poco más en alguna terminología útil:

✓ Si soy flojo, me refiero al código en el Listado 3-2 como método. Si no soy


siendo perezoso, me refiero a este código como declaración de método

✓ La declaración del método en el Listado 3-2 tiene dos partes. La primera línea (la
parte con fixTheAlternator en él, hasta pero sin incluir la llave abierta) es un cabecera del
método El resto del Listado 3-2 (la parte rodeada por llaves) es un cuerpo del método

✓ El termino declaración de método distingue la lista de instrucciones en


Listado 3-2 de la instrucción en el Listado 3-3, que se conoce como
llamada al método

UNA declaración del método le dice a la computadora qué sucede si llama al método en acción. UNA llamada al
método ( un código separado) le dice a la computadora que realmente llame al método a la acción. La
declaración de un método y la llamada del método tienden a estar en diferentes partes del programa Java.

El método principal en un programa.


La Figura 3-3 tiene una copia del código del Listado 3-1. La mayor parte del código contiene la declaración
de un método llamado principal. ( Solo busca la palabra principal
en el encabezado del método del código). Por ahora, no se preocupe por las otras palabras en el
encabezado del método: público, estático, vacío, cadena, y args. Explico estas palabras en los próximos
capítulos.
48 Parte I: Comenzando

los principal encabezado del método

clase Displayer {

public static void main (String args []) {

System.out.println ("¡Te encantará Java!"); }

}
Figura 3-3: los principal método (también los principal

los principal conocido como el principal cuerpo del método

método. declaración del método)

Como cualquier método Java, el principal El método es una receta.

Cómo hacer galletas:


Calienta el horno. Envuelve la masa.
Hornee la masa enrollada.

Cómo seguir las instrucciones principales para un visualizador:


Imprimir "¡Te encantará Java!" en la pantalla.

La palabra principal juega un papel especial en Java. En particular, nunca escribes código que
explícitamente llama a un principal método en acción. La palabra principal es el nombre del método que
se activa automáticamente cuando el programa comienza a ejecutarse.

Así que mire hacia atrás en la Figura 3-1. Cuando el Visualizador el programa se ejecuta, la computadora encuentra
automáticamente el programa principal método y ejecuta cualquier instrucción dentro del cuerpo del método. En el Visualizador
programa, el principal El cuerpo del método tiene una sola instrucción. Esa instrucción le dice a la computadora que
imprima
¡Te encantará Java! en la pantalla. Entonces en la Figura 3-1, ¡Te encantará Java!
aparece en la pantalla de la computadora.

Ninguna de las instrucciones en un método se ejecuta hasta que el método se activa. Pero si le das
el nombre a un método principal, ese método se activa automáticamente.

www.allitebooks.com
Capítulo 3: Uso de los bloques de construcción básicos 49
Casi todos los lenguajes de programación de computadoras tienen algo similar a los métodos de Java.
Si ha trabajado con otros idiomas, puede recordar cosas como subprogramas, procedimientos,
funciones, subrutinas, subprocedimientos o
REALIZAR declaraciones. Como sea que lo llame en su idioma de programación favorito, un método es un
montón de instrucciones recopiladas y con un nuevo nombre.

Cómo finalmente le dices a la computadora que


haga algo
Enterrado en el corazón del Listado 3-1 está la línea única que en realidad emite una instrucción directa a
la computadora. La línea, que se resalta en la Figura 3-4, le dice a la computadora que muestre ¡Te
encantará Java! Esta linea es un declaración.
En Java, una instrucción es una instrucción directa que le dice a la computadora que haga algo (por ejemplo,
mostrar este texto, poner 7 en esa ubicación de memoria, hacer que aparezca una ventana).

clase Displayer {
public static void main (String args []) {
System.out.println ("¡Te encantará Java!"); }}

Figura 3-4:
Una Una declaración (una llamada al
System.out.println método)
declaración de Java.

Por supuesto, Java tiene diferentes tipos de declaraciones. Una llamada al método, que presento en la
sección anterior "El método Java", es uno de los muchos tipos de declaraciones Java. El Listado 3-3
muestra cómo se ve una llamada a método, y la Figura 3-4 también contiene una llamada a método que se
ve así:

System.out.println ("¡Te encantará Java!");

Cuando la computadora ejecuta esta declaración, llama a un método llamado System.out.println en


acción. (Sí, en Java, un nombre puede tener puntos. Los puntos significan algo).

Para conocer el significado detrás de los puntos en los nombres de Java, consulte el Capítulo 9.
50 Parte I: Comenzando
La figura 3-5 ilustra el System.out.println situación. En realidad, dos métodos juegan un papel activo en
el funcionamiento del Visualizador programa. Así es como funcionan:

✓ Hay una declaración para un principal método. Yo escribi el principal método


yo mismo. Esta principal El método se llama automáticamente cada vez que ejecuto el
Visualizador programa.

✓ Hay una llamada al System.out.println método. La llamada al método


Para el System.out.println El método es la única declaración en el cuerpo del principal método. En
otras palabras, llamando al System.out.println
método es lo único en el principal Lista de tareas pendientes del método. La declaración para el System.out.println
El método está enterrado dentro de la API oficial de Java. Para una actualización de la API de Java,
consulte las secciones, "La gramática y los nombres comunes" y "Las palabras en un programa Java",
anteriormente en este capítulo.

101010000111000 ...

La computadora llama a tu principal


método automáticamente, entonces ...

clase Displayer {
vacío público estático principal( Args de cadena []) {
System.out. println (" ¡Te encantará Java! ");}}

.. . una declaración en su principal el método llama


al System.out.println método.

vacío público println ( Cadena s) {

En algún lugar sureOpen (); textOut.write (s);


Figura 3-5:
dentro de textOut.flushBuffer ();
Llamando al
JavaAPI ...
Sistema.
. . .
fuera.
}
println
método.
Capítulo 3: Uso de los bloques de construcción básicos 51
Cuando digo cosas como " System.out.println está enterrado dentro de la API ", no estoy haciendo justicia
a la API. Es cierto que puede ignorar todo el código esencial de Java dentro de la API. Todo lo que
necesitas recordar es que System.out.println se define en algún lugar dentro de ese código. Pero no soy
justo cuando hago que el código API suene como algo mágico. La API es solo otro montón de código
Java. Las declaraciones en la API que le dicen a la computadora lo que significa realizar una llamada a System.out.println
se parece mucho al código Java en el Listado 3-1.

En Java, cada declaración (como la línea en recuadro en la Figura 3-4) termina con un punto y coma. Otras
líneas en la Figura 3-4 no terminan con punto y coma, porque las otras líneas en la Figura 3-4 no son
declaraciones. Por ejemplo, el encabezado del método (la línea con la palabra principal en él) no le dice
directamente a la computadora que haga nada. El encabezado del método anuncia: "En caso de que alguna vez
quieras hacer
principal, las siguientes líneas de código te dicen cómo hacerlo ".

Cada declaración completa de Java termina con un punto y coma.

Llaves
Hace mucho tiempo, o tal vez no hace mucho, sus maestros de escuela le dijeron lo útiles que son los esquemas. Con
un esquema, puede organizar pensamientos e ideas, ayudar a las personas a ver bosques en lugar de árboles y, en
general, demostrar que es miembro del Tidy persons Club. Bueno, un programa Java es como un esquema. El
programa en el Listado 3-1 comienza con una gran línea de encabezado que dice: "Aquí viene una clase llamada Visualizador.
"Después de ese primer encabezado grande, un subencabezado anuncia:" Aquí viene un método llamado principal. "

Ahora, si un programa Java es como un esquema, ¿por qué un programa no se parece a un esquema?
¿Qué ocupa el lugar de los números romanos, mayúsculas y otras cosas? La respuesta es doble:

✓ En un programa Java, las llaves encierran unidades de código significativas.

✓ Usted, el programador, puede (y debe) sangrar líneas para que otros


los programadores pueden ver el esquema de su código de un vistazo.

En resumen, todo está subordinado al elemento en número romano I. En un programa Java, todo
está subordinado a la línea superior, la línea con
clase en eso. Para indicar que todo lo demás en el código está subordinado a esto clase línea, usas llaves.
Todo lo demás en el código va dentro de estas llaves. (Ver Listado 3-4.)
52 Parte I: Comenzando
Listado 3-4: llaves para una clase Java

clase Displayer {

public static void main (String args []) {


System.out.println ("¡Te encantará Java!"); }

En resumen, algunas cosas están subordinadas a una letra mayúscula. En un programa Java, algunas
líneas están subordinadas al encabezado del método. Para indicar que algo está subordinado a un
encabezado de método, utiliza llaves. (Ver Listado 3-5.)

Listado 3-5: llaves para un método Java


clase Displayer {

public static void main (String args []) {


System.out.println ("¡Te encantará Java!");
}
}

En resumen, algunos artículos se encuentran en la parte inferior de la cadena alimentaria. En el


Visualizador clase, la línea correspondiente es la línea que comienza con
System.out.println. En consecuencia, esto System.out.println la línea va dentro de todas las demás
llaves y se sangra más que cualquier otra línea.

Nunca pierda de vista el hecho de que un programa Java es, ante todo, un esquema.

Si coloca llaves en los lugares equivocados u omite llaves donde deberían estar, su programa
probablemente no funcionará en absoluto. Si su programa funciona, probablemente funcionará
incorrectamente.

Si no aplica sangría a las líneas de código de manera informativa, su programa seguirá funcionando
correctamente, pero ni usted ni ningún otro programador podrán descubrir qué estaba pensando cuando
escribió el código.

Si eres un pensador visual, puedes imaginar esquemas de programas Java en tu cabeza. Un amigo
mío visualiza un esquema numerado real transformándose en un programa Java. (Ver Figura 3-6.)
Otra persona, que permanecerá sin nombre, usa imágenes más extrañas. (Ver Figura 3-7.)

Agradezco una buena excusa tanto como el próximo tipo, pero no sangrar su código Java es inexcusable. De hecho,
muchos IDE de Java tienen herramientas para sangrar su código automáticamente. Visite el sitio web de este libro
para obtener más información.
Capítulo 3: Uso de los bloques de construcción básicos 53

I. El Despachador clase

A. El principal método

1. Imprima "¡Te encantará Java!"

I. exhibidor de clase

A. public static void main (String args [])


1. System.out.println ("¡Te encantará Java!");

clase Displayer {

Figura 3-6: public static void main (String args []) {


Un esquema se System.out.println ("¡Te encantará Java!"); }}
convierte en

Un

programa Java.

Figura 3-7:
Visualizador de clase { vacío público estático principal
Una clase es
(Args de cadena []) {}
System.out.println ("¡Te
más grande que }
encantará Java!");
un método; Un

método es más

grande que una

declaración.

Y ahora, algunos comentarios


La gente se reúne alrededor de fogatas para escuchar la vieja leyenda sobre un programador cuya pereza la metió
en problemas. Para mantener el anonimato de este programador,
54 Parte I: Comenzando
La llamo Jane Pro. Jane trabajó muchos meses para crear el santo grial de la informática, un programa que
piensa por sí solo. Si se completa, este programa podría funcionar de forma independiente, aprendiendo cosas
nuevas sin intervención humana. Día tras día, noche tras noche, trabajó para darle al programa esa chispa de
pensamiento creativo e independiente.

Un día, cuando casi había terminado el proyecto, recibió un inquietante correo de su compañía de seguros de
salud. No, el correo no era sobre una enfermedad grave. Se trataba de una visita de rutina a la oficina. El
formulario de reclamo de la compañía de seguros tenía un lugar para su fecha de nacimiento, como si su
fecha de nacimiento hubiera cambiado desde la última vez que envió un reclamo. Ella había garabateado
distraídamente 2009 como su año de nacimiento, por lo que la compañía de seguros se negó a pagar la
factura.

Jane marcó el número de teléfono de la compañía de seguros. En 20 minutos, ella estaba hablando con
una persona viva. "Lo siento", dijo la persona viva. "Para resolver este problema, debe marcar un número
diferente". Bueno, puedes adivinar lo que pasó después. "Lo siento. El otro operador te dio el número
equivocado. Y luego, "lo siento. Debe devolver la llamada al número de teléfono original ".

Cinco meses después, a Jane le dolía el oído, pero después de 800 horas por teléfono, finalmente había
recibido una promesa tentativa de que la compañía de seguros eventualmente reprocesaría el reclamo.
Eufórica como estaba, estaba ansiosa por volver a su proyecto de programación. ¿Podría recordar lo
que todas esas líneas de código debían estar haciendo?

No, ella no pudo. Miró y miró su propio trabajo y, como un sueño que no tiene sentido a la mañana
siguiente, el código ahora no tenía sentido para ella. Había escrito un millón de líneas de código y
ninguna de ellas estaba acompañada de un comentario informativo explicativo. No había dejado pistas
para ayudarla a comprender lo que había estado pensando, así que, frustrada, abandonó todo el
proyecto.

Agregar comentarios a su código


El Listado 3-6 tiene una versión mejorada del programa de ejemplo de este capítulo. Además de todas las
palabras clave, identificadores y signos de puntuación, el Listado 3-6 tiene texto destinado a ser leído por los
seres humanos.
Capítulo 3: Uso de los bloques de construcción básicos 55
Listado 3-6: Tres tipos de comentarios

/ * * * Listado 3-6 en "Java For Dummies, 5th Edition"

**
** Copyright 2009 Wiley Publishing, Inc.
** Todos los derechos reservados.
*/

/ **
** La clase del visualizador muestra texto
** en la pantalla de la computadora.
**
** @autor Barry Burd
** @version 1.0 24/10/09
** @ver java.lang.System
*/
clase Displayer {

/ **
** El método principal es donde
** comienza la ejecución del código.
**
** @param args (Ver Capítulo 11.)
*/
public static void main (String args []) {
System.out.println ("¡Amo Java!"); //¿YO? ¿Tú? }}

UNA comentario es una sección especial de texto dentro de un programa cuyo propósito es ayudar a las
personas a entender el programa. Un comentario es parte de la documentación de un buen programa.

El lenguaje de programación Java tiene tres tipos de comentarios:

✓ Comentarios tradicionales: Las primeras cinco líneas del Listado 3-6 forman una tradicional
comentario. El comentario comienza con / * y termina con * /. Todo entre la apertura / * y el
cierre * / es solo para ojos humanos. No hay información sobre "Java para tontos, 5ª edición" o Wiley
Publishing, Inc. es traducido por el compilador. Para leer sobre compiladores, vea el Capítulo 2.
56 Parte I: Comenzando
Las líneas segunda, tercera, cuarta y quinta en el Listado 3-6 tienen asteriscos adicionales (*). Los llamo
extra porque estos asteriscos no son necesarios cuando creas un comentario. Simplemente hacen que el
comentario se vea bonito. Los incluyo en el Listado 3-6 porque, por alguna razón que no entiendo
completamente, la mayoría de los programadores de Java agregan estos asteriscos adicionales.

✓ Comentarios de fin de línea: El texto // ¿YO? ¿Tú? en el Listado 3-6 es un final de-
línea comentario. Un comentario de fin de línea comienza con dos barras inclinadas y va al final de
una línea de tipo. Una vez más, el compilador no traduce el texto dentro del comentario de fin de
línea.

✓ Comentarios de Javadoc: UNA javadoc el comentario comienza con una barra y dos
asteriscos (/ **). El listado 3-6 tiene dos comentarios javadoc, uno con el texto La clase del
visualizador. . . y otro con el texto El método principal es dónde. . . .

Un comentario de javadoc es un tipo especial de comentario tradicional. Un comentario de javadoc está


destinado a ser leído por personas que ni siquiera miran el código Java. Pero eso no tiene sentido.
¿Cómo puede ver los comentarios de javadoc en el Listado 3-6 si nunca mira el Listado 3-6? Bueno,
cierto programa llamado javadoc ( ¿Qué más?) puede encontrar todos los comentarios de javadoc en el
Listado 3-6 y convertir estos comentarios en una página web atractiva. La Figura 3-8 muestra la página.

Los comentarios de Javadoc son geniales. Aquí hay varias cosas buenas sobre ellos:

✓ La única persona que tiene que mirar un fragmento de código Java es el programa.
Mer quien escribe el código. Otras personas que usan el código pueden averiguar qué hace el
código al ver la página web generada automáticamente.

✓ Debido a que otras personas no miran el código Java, otras personas no


hacer cambios al código Java. (En otras palabras, otras personas no introducen errores en
el código Java existente).

✓ Debido a que otras personas no miran el código Java, otras personas no


Hay que descifrar el funcionamiento interno del código Java. Todo lo que estas personas necesitan
saber sobre el código es lo que leen en la página web del código.

✓ El programador no crea dos cosas separadas: algún código Java


por aquí y alguna documentación sobre el código por allá. En cambio, el programador crea una
pieza de código Java e incrusta la documentación (en forma de comentarios de javadoc)
directamente dentro del código.

✓ Lo mejor de todo es que la generación de páginas web a partir de los comentarios de javadoc es automática.

matic Entonces, la documentación de todos tiene el mismo formato. Independientemente del código Java que
utilice, puede obtener información sobre ese código leyendo una página como la de la Figura 3-8. Eso es
bueno porque el formato en la Figura 3-8 es familiar para cualquiera que use Java.
Capítulo 3: Uso de los bloques de construcción básicos 57
Puede generar sus propias páginas web a partir de los comentarios de javadoc que incluye en su código. Para
descubrir cómo, visite el sitio web de este libro.

Figura 3-8:
El javadoc
página

generada a

partir del

código en el

Listado 3-6.
58 Parte I: Comenzando

¿Cuál es la excusa de Barry?


Durante años, les he estado diciendo a mis alumnos que pongan comentarios en su código, y durante años, he
estado creando código de muestra (como el código en el Listado 3-1) sin comentarios. ¿Por qué?

Tres pequeñas palabras: "Conoce a tu audiencia". Cuando escribe un código complicado de la vida real, su
audiencia son otros programadores, gerentes de tecnología de la información y personas que necesitan ayuda
para descifrar lo que ha hecho. Cuando escribo ejemplos simples de código para este libro, mi audiencia es
usted, el programador novato de Java. En lugar de leer mis comentarios, su mejor estrategia es mirar mis
declaraciones de Java, las declaraciones que el compilador de Java descifra. Es por eso que pongo tan pocos
comentarios en las listas de este libro.

Además, soy un poco vago.

Usando comentarios para experimentar con


tu código
Es posible que escuche a los programadores hablar sobre comentando ciertas partes de su código.
Cuando está escribiendo un programa y algo no funciona correctamente, a menudo ayuda intentar
eliminar parte del código. Por lo menos, descubres lo que sucede cuando se elimina ese código
sospechoso. Por supuesto, es posible que no le guste lo que sucede cuando se elimina el código, por lo
que no desea eliminarlo por completo. En cambio, convierte sus declaraciones Java ordinarias en
comentarios. Por ejemplo, gira la declaración

System.out.println ("¡Amo Java!");

en el comentario

// System.out.println ("¡Amo Java!");

Esto evita que el compilador de Java vea el código mientras intenta averiguar qué está mal con su
programa.

Los comentarios tradicionales no son muy útiles para comentar el código. El gran problema es que no
puedes poner un comentario tradicional dentro de otro. Por ejemplo, suponga que desea comentar las
siguientes declaraciones:
Capítulo 3: Uso de los bloques de construcción básicos 59

System.out.println ("Padres"); System.out.println ("elige tu"); / * * Se muestra

intencionalmente en cuatro líneas separadas

*/
System.out.println ("batallas"); System.out.println
("¡cuidado!");

Si intenta convertir este código en un comentario tradicional, obtendrá el siguiente desastre:

/ * System.out.println ("Padres");

System.out.println ("elige tu"); / * * Se muestra intencionalmente en cuatro líneas

separadas
*/
System.out.println ("batallas"); System.out.println
("¡cuidado!");
*/

El primero * / (después Muestra intencionalmente) termina el comentario tradicional prematuramente.


Entonces el batallas y cuidadosamente las declaraciones no están comentadas, y el último * / bloquea el
compilador. No se pueden anidar comentarios tradicionales entre sí. Debido a esto, recomiendo
comentarios de fin de línea como herramientas para experimentar con su código.

La mayoría de los IDE pueden comentar secciones de su código automáticamente. Para más detalles, visite el
sitio web de este libro.
60 60 Parte I: Comenzando
Parte II

Escribir sus propios


programas Java
En esta parte . . .

yo programas y descubrir
En esta cómoy se
parte, cavas siente realmente
te ensucias Java.
escribiendo Algunas de las
algo
cosas en esta parte son específicas de Java, pero gran parte del material es
simplemente un programa informático genérico y antiguo. Aquí te concentras en
los detalles: detalles sobre los datos, la lógica y el flujo del programa. Después
de leer esta parte y practicar algunas de las técnicas, puede escribir todo tipo
de programas Java interesantes.
Capítulo 4

Aprovechando al máximo las variables


y sus valores
En este capítulo
▶ ▶ Asignando valores a las cosas

▶ ▶ Hacer que las cosas almacenen ciertos tipos de valores

▶ ▶ Aplicando operadores para obtener nuevos valores

T él después
tuvo lugar: de la conversación entre el Sr. Van Doren y el Sr. Barasch nunca

Charles: Un chorro de mar se come su cerebro, convirtiéndose de un animal en una planta.

Jack: ¿Esa es tu respuesta final, Charles?

Charles: Sí lo es.

Jack: ¿Cuánto dinero tienes en tu cuenta hoy, Charles?

Charles: Tengo cincuenta dólares y veintidós centavos en mi cuenta corriente.

Jack: Bueno, es mejor que llame al IRS, porque su respuesta de chorro de mar es correcta. Acaba de
ganar un millón de dólares para agregar a su cuenta corriente. ¿Qué opinas de eso, Charles?

Charles: Se lo debo todo a la honestidad, la diligencia y el trabajo duro, Jack.

Algunos aspectos de este diálogo pueden representarse en Java mediante unas pocas líneas de código.

Variando una variable


No importa cómo adquiera su millón de dólares, puede usar una variable para contar su riqueza. El
listado 4-1 muestra el código.
64 Parte II: Escribir tus propios programas Java

Listado 4-1: Uso de una variable

cantidadInCuenta = 50.22;
cantidadInCuenta = cantidadInCuenta + 1000000.00;

El código en el Listado 4-1 hace uso de amountInAccount variable. UNA variable Es un marcador de
posición. Puede pegar un número como 50.22 en una variable. Después de colocar un número en la
variable, puede cambiar de opinión y poner un número diferente en la variable. (Eso es lo que varía en
una variable). Por supuesto, cuando coloca un nuevo número en una variable, el número anterior ya no
está allí. Si no guardó el número anterior en otro lugar, el número anterior se ha ido.

La Figura 4-1 ofrece una imagen del código antes y después en el Listado 4-1. Después de ejecutar la
primera instrucción en el Listado 4-1, la variable amountInAccount tiene el número 50.22 en el mismo. Luego,
después de ejecutar la segunda declaración del Listado 4-1, el amountInAccount La variable de repente tiene
1000050.22. Cuando piense en una variable, imagine un lugar en la memoria de la computadora donde los
cables y transistores almacenan 50.22, 1000050.22 o lo que sea. En el lado izquierdo de la Figura 4-1,
imagine que la caja con 50.22 está rodeada por millones de otras cajas similares.

Antes de ejecutar Después de ejecutar


amountInAccount = cantidadInCuenta =
amountInAccount + 1000000.00; amountInAccount + 1000000.00;

amountInAccount amountInAccount
Figura 4-1:
Una variable 50,22
50,22
(antes y 1000050.22

después).

Ahora necesitas algo de terminología. Lo almacenado en una variable es un valor. El valor de una variable puede
cambiar durante la ejecución de un programa (cuando Jack le da un millón de dólares, por ejemplo). El valor
almacenado en una variable no es necesariamente un número. (Por ejemplo, puede crear una variable que
siempre almacene una letra). El tipo de valor que se almacena en una variable es el de una variable tipo.

Puede leer más sobre los tipos en la sección "Comprender los tipos de valores que pueden tener las
variables", más adelante en este capítulo.

Existe una diferencia sutil, casi imperceptible, entre una variable y una variable nombre. Incluso en la
escritura formal, a menudo uso la palabra variable cuando quiero decir
nombre de la variable. Estrictamente hablando amountInAccount es un nombre variable y
Capítulo 4: Aprovechar al máximo las variables y sus valores sesenta y cinco

todo el almacenamiento de memoria asociado con amountInAccount ( incluyendo el tipo que amountInAccount
tiene y cualquier valor amountInAccount
actualmente representa) es la variable misma. Si crees que esta distinción entre
variable y nombre de la variable es demasiado sutil para que te preocupes, únete al club.

Cada nombre de variable es un identificador, un nombre que puede inventar en su propio código. Al
preparar el Listado 4-1, inventé el nombre amountInAccount.

Para obtener más información sobre los tipos de nombres en un programa Java, consulte el Capítulo 3.

Antes de que se ponga el sol en el Listado 4-1, debe notar una parte más del listado. El listado tiene 50,22
y 1000000.00 en eso. Cualquiera en su sano juicio llamaría a estas cosas números, pero en un
programa Java ayuda a llamar a estas cosas literales

¿Y qué tiene de literal? 50,22 y 1000000.00? Bueno, piensa en la variable amountInAccount en el


Listado 4-1. La variable amountInAccount
representa 50.22 parte del tiempo, pero representa 1000050.22 el resto del tiempo. Podrías usar la
palabra número para hablar de amountInAccount. Pero realmente, que amountInAccount representa
depende de la moda del momento. Por otra parte, 50,22 literalmente representa el valor 50 22 ⁄ 100

El valor de una variable cambia; el valor de un literal no lo hace.

Comenzando con Java 7, puede agregar guiones bajos a sus literales numéricos. En lugar de usar el viejo y
llano 1000000.00 en el Listado 4-1, puede escribir cantidadInCuenta = cantidadInCuenta + 1_000_000.00. Desafortunadamente,
no puedes hacer fácilmente lo que estás más tentado a hacer. No puedes escribir 1,000,000.00 ( como lo haría
en los Estados Unidos), ni puede escribir 1.000.000,00 ( como lo harías en Alemania). Si quieres escribir 1,000,000.00
tienes que usar algunos trucos de formateo elegantes. Para obtener más información sobre el formato,
consulte los Capítulos 10 y 11.

Declaraciones de asignación
Las declaraciones como las del Listado 4-1 se llaman declaraciones de asignación. En una declaración
de asignación, asigna un valor a algo. En muchos casos, este algo es una variable.

Recomiendo acostumbrarse a leer las declaraciones de asignación de derecha a izquierda. La Figura


4-2 ilustra la acción de la primera línea en el Listado 4-1.

La segunda línea en el Listado 4-1 es un poco más complicada. La Figura 4-3 ilustra la acción
de la segunda línea en el Listado 4-1.
66 Parte II: Escribir tus propios programas Java

Figura 4-2:
La acción del
primero
línea en

el Listado 4-1.

Figura 4-3:
La acción de la
segunda línea
en el Listado
4-1.
Capítulo 4: Aprovechar al máximo las variables y sus valores 67
En una declaración de asignación, lo que se le asigna un valor siempre está en el lado izquierdo del signo
igual.

Comprender los tipos de valores que pueden


tener las variables
¿Has visto los comerciales de televisión que te hacen pensar que estás volando entre los circuitos dentro de una
computadora? Bastante bien, ¿eh? Estos comerciales muestran 0s (ceros) y 1s navegando porque los 0s y 1s
son las únicas cosas con las que las computadoras realmente pueden lidiar. Cuando crees que una
computadora está almacenando la carta J la computadora realmente está almacenando 01001010. Todo dentro
del equipo es una secuencia de 0s y 1s. Como todo geek de la computadora sabe, un 0 o 1 se llama poco.

Como resultado, la secuencia 01001010, que representa la letra J


también puede representar el número 74. La misma secuencia también puede representar
1.0369608636003646 × 10 –43. De hecho, si los bits se interpretan como píxeles de pantalla, se puede usar la
misma secuencia para representar los puntos que se muestran en la Figura 4-4. El significado de 01001010
depende de la forma en que el software interpreta esta secuencia de 0s y 1s.

Figura 4-4:
Un primer plano
extremo de ocho
en blanco y
negro
píxeles de

la pantalla

Entonces, ¿cómo le dices a la computadora lo que significa 01001010? La respuesta está en el


concepto de tipo. El tipo de una variable es el rango de valores que la variable puede almacenar.

Copié las líneas del Listado 4-1 y las puse en un programa Java completo. El programa se encuentra en el
Listado 4-2. Cuando ejecuto el programa en el Listado 4-2, obtengo el resultado que se muestra en la Figura
4-5.
68 Parte II: Escribir tus propios programas Java

Listado 4-2: Un programa usa la cantidadInAccount

millonario de clase {
public static void main (String args []) {
doble cantidad en cuenta;

cantidadInCuenta = 50.22;
cantidadInCuenta = cantidadInCuenta + 1000000.00;

System.out.print ("Tienes $"); System.out.print (amountInAccount);


System.out.println ("en su cuenta"); }}

Figura 4-5:
Ejecutando el

programa en el

Listado 4-2.

En el Listado 4-2, mire la primera línea en el cuerpo del principal método.

doble cantidad en cuenta;

Esta línea se llama declaración variable Poner esta línea en su programa es como decir: "Estoy
declarando mi intención de tener una variable llamada cantidad en cuenta en mi programa ". Esta línea
se reserva el nombre. amountInAccount para su uso en el programa.

En esta declaración variable, la palabra doble es una palabra clave de Java Esta palabra
doble le dice a la computadora qué tipo de valores tiene la intención de almacenar cantidad en cuenta. En
particular, la palabra doble significa números entre –1.8 ×
10 308 y 1.8 × 10 308. ( Estos son números enormes con 308 ceros antes del punto decimal. Solo las
personas más ricas del mundo emiten cheques con 308 ceros en ellos. El segundo de estos números
es un punto ocho gazazzo-zillion-kaskillion. El número 1.8 × 10 308, Una constante definida por la Oficina
Internacional de Pesos y Medidas, es el número de programadores informáticos excéntricos entre
Sunnyvale, California, y la Galaxia de Andrómeda M31.

Más importante que la enorme gama de doble los números de palabras clave es el hecho de que un doble
El valor puede tener dígitos más allá del punto decimal. Después de declarar amountInAccount ser de
tipo doble, puedes almacenar todo tipo de números en amountInAccount. Puedes almacenar 50.22,

0.02398479, o –3.0. En el Listado 4-2, si no hubiera declarado amountInAccount ser de tipo doble, Es
posible que no haya podido almacenar 50.22. En cambio, habría tenido que almacenar los viejos 50
simples, sin ningún dígito más allá del punto decimal.
Capítulo 4: Aprovechar al máximo las variables y sus valores 69

Dígitos más allá del punto decimal


Java tiene dos tipos diferentes que tienen dígitos más allá Compare esto con el resultado de la Figura 4-5.
del punto decimal: tipo doble y escribe flotador. Entonces, Cuando cambio de tipo doble digitar
¿cuál es la diferencia? Cuando declaras que una variable es flotador, Charles tiene tres centavos adicionales en su
de tipo doble, cuenta. Al cambiar a 32 bits flotador tipo, he golpeado la
le está diciendo a la computadora que haga un seguimiento de 64 precisión en el cantidad en cuenta lugar de centésimas de
bits cuando almacena los valores de la variable. Cuando declaras variable. Eso es malo. Otra dificultad con flotador Los valores
que una variable es de tipo flotador, la computadora realiza un son puramente cosméticos. Mira de nuevo a los literales, 50,22
seguimiento de solo 32 bits. Puede cambiar el Listado 4-2 y declarar y

amountInAccount ser de tipo flotador. flotante 1000000.00, en el Listado 4-2. Las leyes de Java dicen que los
literales como estos ocupan 64 bits cada uno. Esto significa
cantidad en cuenta;
que si declaras cantidad en cuenta ser de tipo flotador, te vas a
Seguramente, 32 bits son suficientes para almacenar un número meter en problemas. Tendrá problemas para introducir esos
pequeño como 50.22, ¿verdad? Bueno, lo son y no lo son. Puede literales de 64 bits en su pequeño disco de 32 bits
almacenar fácilmente 50.00 con solo 32 bits. Diablos, podrías
almacenar 50.00 con solo 6 bits. El tamaño del número no importa. amountInAccount variable. Para compensar, puede
La precisión importa. En una variable doble de 64 bits, está cambiar de doble literales a
utilizando la mayoría de los bits para almacenar cosas más allá del flotador literales agregando un F a cada doble literal, pero un
punto decimal. Para almacenar la parte .22 de 50.22, necesita más número con un extra F Al final se ve gracioso.
que los miserables 32 bits que obtiene con el tipo flotador.

flotador cantidadInCuenta;
cantidadInCuenta = 50.22F;
¿Realmente crees lo que acabas de leer, que se necesitan más cantidadInCuenta =
de 32 bits para almacenar .22? Para ayudar a convencerlo, amountInAccount +
1000000.00F;
hice algunos cambios en el código en el Listado 4-2. hice amountInAccount
ser de tipo flotador, y la salida que obtuve fue Para experimentar con números, visite http: //
babbage.cs.qc.edu/IEEE-754/. La página toma cualquier
Tienes $ 1000050.25 en tu número que ingrese y le muestra cómo se representaría
cuenta. el número como 32 bits y como 64 bits.

Otro tipo - tipo flotador - también le permite tener números después del punto decimal, pero este tipo no es tan
preciso. (Consulte la barra lateral, "Dígitos más allá del punto decimal", para ver la historia completa). No se
preocupe por la elección entre flotador
y doble. Para la mayoría de los programas, solo use doble.

El gran premio mayor de un millón de dólares en el Listado 4-2 es impresionante. Pero el Listado 4-2 no ilustra la
mejor manera de lidiar con las cantidades en dólares. En un programa Java, la mejor manera de representar la
moneda es evitar doble y flotador tipos y optar por un tipo llamado BigDecimal. Para obtener más información,
consulte el sitio web de este libro.
70 Parte II: Escribir tus propios programas Java

Mostrar texto
Las últimas tres declaraciones en el Listado 4-2 usan un truco de formato ordenado. Desea mostrar
varias cosas diferentes en una sola línea en la pantalla. Pones estas cosas en declaraciones separadas.
Todas menos las últimas declaraciones son llamadas a System.out.print. ( La última declaración es un
llamado a System.out. println.) Llamadas a System.out.print mostrar texto en parte de una línea y luego
dejar el cursor al final de la línea actual. Después de ejecutar Sistema. out.print, el cursor todavía está al
final de la misma línea, entonces el siguiente

System.out. lo que sea puede continuar imprimiendo en esa misma línea. Con varias llamadas a
imprimir limitadas por una sola llamada a println, el resultado es solo una bonita línea de salida.
(Consulte la Figura 4-5.)

Una llamada a System.out.print escribe algunas cosas y deja el cursor sentado al final de la línea de
salida. Una llamada a System.out.println escribe cosas y luego termina el trabajo moviendo el cursor al
inicio de una nueva línea de salida.

Números sin puntos decimales


"En 1995, la familia promedio tenía 2.3 hijos".

En este punto, un hombre sabio siempre comenta que ninguna familia real tiene exactamente 2.3 hijos. Claramente, los
números enteros tienen un papel en este mundo. Por lo tanto, en Java, puede declarar una variable para almacenar
nada más que números enteros. El Listado 4-3 muestra un programa que usa variables de números enteros.

Listado 4-3: Usando el tipo int

clase ElevatorFitter {

public static void main (String args []) {


int weightOfAPerson; int
elevatorWeightLimit; int numberOfPeople;

weightOfAPerson = 150; elevatorWeightLimit =


1400; numberOfPeople =

elevatorWeightLimit / weightOfAPerson;

System.out.print ("Puede encajar"); System.out.print (numberOfPeople);


System.out.println ("personas en el ascensor"); }}
Capítulo 4: Aprovechar al máximo las variables y sus valores 71
La historia detrás del programa en el Listado 4-3 requiere algunas explicaciones difíciles. Entonces aquí va:

Tiene un elevador de hotel cuya capacidad de peso es de 1,400 libras. Un fin de semana, el hotel
organiza la reunión familiar de Brickenchicker. Cierta rama de la familia Brickenchicker ha sido bendecida
con dectillizos idénticos (diez hermanos, todos con las mismas características físicas). Normalmente,
cada una de las dectillitas Brickenchicker pesa exactamente 145 libras. Pero el sábado, la familia tiene
un gran almuerzo y, como el almuerzo incluía pastel de fresas, cada una de las dectillitas Brickenchicker
ahora pesa 150 libras. Inmediatamente después del almuerzo, los diez dectillizos de Brickenchicker
llegan al elevador exactamente al mismo tiempo. (¿Por qué no? Los diez piensan igual.) Entonces, la
pregunta es, ¿cuántos de los dectillizos pueden caber en el elevador?

Ahora recuerde, si coloca una onza más de 1,400 libras de peso en el elevador, el cable del
elevador se rompe, hundiendo todas las dectuplas en el elevador a sus muertes repentinas (y
costosas).

La respuesta al enigma de Brickenchicker (la salida del programa del Listado 4-3) se muestra en
la Figura 4-6.

Figura 4-6:
Save the
Bricken-
chickers,
Save the
World.

En el centro del problema del elevador Brickenchicker, tienes números enteros, números sin dígitos más
allá del punto decimal. Cuando divides 1,400 por 150, obtienes 9 1 ⁄ 3, pero no deberías tomar el 1 ⁄ 3 seriamente.
No importa cuánto lo intente, no puede exprimir un extra de 50 libras de dectuplet Brickenchicker en el
elevador. Este hecho se refleja muy bien en Java. En el Listado 4-3, las tres variables ( weightOfAPerson, ascensorPeso
Límite, y número de personas) son de tipo En t. Un En t El valor es un número entero. Cuando divides uno En
t valor por otro (como lo hace con la barra en el Listado 4-3), obtiene otro En t. Cuando divide 1.400 por
150, obtiene 9, no 9 1 ⁄ 3)

Ves esto en la Figura 4-6. En conjunto, las siguientes declaraciones muestran 9 en pantalla:

numberOfPeople =
elevatorWeightLimit / weightOfAPerson;

System.out.print (numberOfPeople);
72 Parte II: Escribir tus propios programas Java

Cuatro formas de almacenar números enteros


Java tiene cuatro tipos de números enteros. Los tipos byte. Para almacenar números mayores que 32767, no use corto.
son byte, corto, int, y largo.
A diferencia de la complicada historia sobre la precisión
La mayoría de las veces, usarás En t. Pero si necesita almacenar
de los tipos flotador y doble, Lo único que importa
números mayores que 2147483647, abandone En t a favor de largo. ( Un
cuando elige entre los tipos de números enteros es el
número largo puede ser tan grande como 9223372036854775807.)
tamaño del número que está tratando de almacenar. Si
Para toda la historia, consulte la Tabla 4-1.
desea usar números mayores que 127, no use

Combinando declaraciones e
inicializando variables
Mire hacia atrás en el Listado 4-3. En ese listado, verá tres declaraciones de variables, una para cada una
de las tres del programa. En t variables Podría haber hecho lo mismo con solo una declaración:

int weightOfAPerson, elevatorWeightLimit, numberOfPeople;

Si dos variables tienen tipos completamente diferentes, no puede crear ambas variables en la misma
declaración. Por ejemplo, para crear un En t variable denominada
weightOfFred y un doble variable denominada amountInFredsAccount, necesita dos declaraciones de
variables separadas.

Puede dar a las variables sus valores iniciales en una declaración. En el Listado 4-3, por ejemplo, una
declaración puede reemplazar varias líneas en el principal método (todos menos las llamadas a impresión y println).

int weightOfAPerson = 150, elevatorWeightLimit = 1400,


numberOfPeople = elevatorWeightLimit / weightOfAPerson;

Cuando haces esto, no dices que estás asignando valores a las variables. Las partes de las
declaraciones con signos iguales en ellas no se llaman realmente declaraciones de asignación. En
cambio, dices que eres inicializando Las variables. Lo creas o no, tener en cuenta esta distinción es útil.

Como todo lo demás en la vida, inicializar una variable tiene ventajas y desventajas:
Capítulo 4: Aprovechar al máximo las variables y sus valores 73
✓ Cuando combina seis líneas del Listado 4-3 en una sola declaración,
El código se vuelve más conciso. A veces, el código conciso es más fácil de leer. A veces no
lo es. Como programador, es tu decisión.

✓ Al inicializar una variable, puede evitar automáticamente ciertas


errores de programación Para un ejemplo, vea el Capítulo 7.

✓ En algunas situaciones, no tienes otra opción. La naturaleza de sus fuerzas de código


Usted puede inicializar o no inicializar. Para ver un ejemplo que no se presta a la inicialización de
variables, vea el programa de eliminación de evidencia en el Capítulo 6.

Los átomos: los tipos primitivos de Java


Las palabras En t y doble que describo en las secciones anteriores son ejemplos de tipos primitivos ( también
conocido como sencillo tipos) en Java. El lenguaje Java tiene exactamente ocho tipos primitivos. Como recién
llegado a Java, puede ignorar prácticamente todos menos cuatro de estos tipos. (A medida que avanzan los
lenguajes de programación, Java es agradable y compacto de esa manera). La Tabla 4-1 muestra la lista completa
de tipos primitivos.

Tabla 4-1 Tipos primitivos de Java

Escribe un nombre Cómo se ve un literal Rango de valores

Tipos de números enteros

byte (byte) 42 - 128 a 127

corto (corto) 42 - 32768 a 32767

En t 42 - 2147483648 a 2147483647

largo 42L - 9223372036854775808 a


9223372036854775807

Tipos de números decimales

flotador 42.0F - 3.4 × 10 38 a 3.4 × 10 38

doble 42,0 - 1,8 × 10 308 a 1.8 × 10 308

Tipo de caracter

carbonizarse 'UNA' Miles de caracteres, glifos y


símbolos.

Tipo lógico

booleano cierto verdadero Falso


74 Parte II: Escribir tus propios programas Java

Los tipos que no debes ignorar son int, doble, char, y booleano
Las secciones anteriores de este capítulo cubren En t y doble tipos. Entonces, esta sección cubre carbonizarse
y booleano tipos.

El tipo char
No hace mucho tiempo, la gente pensaba que las computadoras existían solo para hacer grandes cálculos de
números. Hoy en día, con los procesadores de texto, ya nadie piensa de esa manera. Entonces, si no ha estado
en una cámara de congelación criogénica durante los últimos 20 años, sabe que las computadoras almacenan
letras, signos de puntuación y otros caracteres.

El tipo de Java que se usa para almacenar caracteres se llama carbonizarse. El Listado 4-4 tiene un programa simple
que usa el carbonizarse tipo. La Figura 4-7 muestra el resultado del programa en el Listado 4-4.

Listado 4-4: Uso del tipo char


clase CharDemo {

public static void main (String args []) {


char myLittleChar = 'b';
char myBigChar = Character.toUpperCase (myLittleChar); System.out.println (myBigChar); }}

Figura 4-7:
Una

emocionante

ejecución del

programa del

Listado 4-4 tal

como aparece en el Eclipse

Consola
ver.

En el Listado 4-4, la primera inicialización almacena la letra si en la variable myLittle Char. En la


inicialización, observe cómo si está rodeado de comillas simples. En Java, cada carbonizarse literal
comienza y termina con una comilla simple.
Capítulo 4: Aprovechar al máximo las variables y sus valores 75
En un programa Java, las comillas simples rodean la letra en un carbonizarse literal.

Si necesita ayuda para resolver los términos cesión, declaración, y inicialización, consulte la sección
"Combinación de declaraciones e inicialización de variables", anteriormente en este capítulo.

En la segunda inicialización del Listado 4-4, el programa llama a un método API cuyo nombre es Character.toUpperCase.
los Character.toUpperCase
El método hace exactamente lo que su nombre sugiere: el método produce el equivalente en
mayúsculas de la letra si. Este equivalente en mayúscula (la letra SI) se asigna a la myBigChar variable
y la si eso es en
myBigChar imprime en pantalla.

Para obtener una introducción a la Interfaz de programación de aplicaciones (API) de Java, consulte el Capítulo 3.

Si estás tentado a escribir la siguiente declaración,

char myLittleChars = 'barry'; // No hagas esto

por favor resiste la tentación. No puede almacenar más de una letra a la vez en un carbonizarse variable,
y no puede poner más de una letra entre un par de comillas simples. Si está tratando de almacenar
palabras u oraciones (no solo letras simples), debe usar algo llamado Cuerda.

Para ver los Java Cuerda tipo, consulte la sección "Las moléculas y compuestos: tipos de
referencia", más adelante en este capítulo.

Si está acostumbrado a escribir programas en otros idiomas, es posible que se dé cuenta de algo llamado
Codificación de caracteres ASCII. La mayoría de los idiomas usan ASCII; Java usa Unicode. En la antigua
representación ASCII, cada carácter ocupa solo 8 bits, pero en Unicode, cada carácter ocupa 8, 16 o 32 bits.
Mientras que ASCII almacena las letras del conocido alfabeto romano (inglés), Unicode tiene espacio para
caracteres de la mayoría de los idiomas que se hablan comúnmente en el mundo. El único problema es que
algunos de los métodos de la API de Java están especialmente diseñados para Unicode de 16 bits.
Ocasionalmente, esto lo muerde en la parte posterior (o lo hace en bytes en la parte posterior, según sea el
caso). Si estás usando un método para escribir Hola en la pantalla y Hola aparece en su lugar, consulte la
documentación del método para mencionar los caracteres Unicode.

Vale la pena notar que los dos métodos, Character.toUpperCase y


System.out.println, se usan de manera bastante diferente en el Listado 4-4. El método
Character.toUpperCase se llama como parte de una inicialización o una declaración de asignación, pero el
método System.out.println se llama solo. Para obtener más información al respecto, consulte el Capítulo 7.
76 Parte II: Escribir tus propios programas Java

El tipo booleano
Una variable de tipo booleano almacena uno de dos valores: cierto o falso.
El listado 4-5 demuestra el uso de un booleano variable. La Figura 4-8 muestra el resultado del
programa en el Listado 4-5.

Listado 4-5: Uso del tipo booleano

clase ElevatorFitter2 {

public static void main (String args []) {


System.out.println ("¿Verdadero o falso?"); System.out.println ("Puede caber los diez");
System.out.println ("dectuplets Brickenchicker"); System.out.println ("en el elevador:");
System.out.println ();

int weightOfAPerson = 150; int elevatorWeightLimit =


1400; int numberOfPeople =

elevatorWeightLimit / weightOfAPerson;

booleano allTenOkay = numberOfPeople> = 10;

System.out.println (allTenOkay); }}

Figura 4-8:
El Bricken-
los

dectillizos de

polluelo atacan de nuevo.

En el Listado 4-5, el allTenOkay la variable es de tipo booleano Para encontrar un valor para el allTenOkay
variable, el programa verifica si número de personas es mayor o igual que diez. (Los símbolos> =
representan Mayor qué o igual a.)

En este punto, vale la pena ser exigente con la terminología. Cualquier parte de un programa Java que tenga
un valor es un expresión. Si tú escribes

weightOfAPerson = 150;
Capítulo 4: Aprovechar al máximo las variables y sus valores 77
luego 150 es una expresión (una expresión cuyo valor es la cantidad 150)
Si tú escribes

numberOfEggs = 2 + 2;

luego 2 + 2 es una expresión (porque 2 + 2 tiene el valor 4) Si tú escribes

int numberOfPeople =
elevatorWeightLimit / weightOfAPerson;

luego ascensorPesoLímite / pesoOfAPerson es una expresion. (El valor de la expresión ascensorPesoLímite


/ pesoOfAPerson
depende de cualesquiera valores las variables ascensorPesoLímite y peso de APerson tener cuando se
ejecuta el código que contiene la expresión).

Cualquier parte de un programa Java que tenga un valor es un expresión.

En el Listado 4-5, el código numberOfPeople> = 10 es una expresion. El valor de la expresión depende


del valor almacenado en número de personas variable. Pero, como saben al ver el pastel de fresas en el
almuerzo de la familia Brickenchicker, el valor de número de personas no es mayor o igual que diez. Esto
hace que el valor de numberOfPeople> = 10 ser - estar falso.

Entonces, en la declaración del Listado 4-5, en la cual allTenOkay se le asigna un valor, el allTenOkay variable
se le asigna un falso valor.

En el Listado 4-5, llamo System.out.println () sin nada dentro de las paréntesis. Cuando hago esto, Java
agrega un salto de línea a la salida del programa. En el Listado 4-5, System.out.println () le dice al
programa que muestre una línea en blanco.

Las moléculas y los compuestos: tipos de


referencia
Al combinar cosas simples, obtienes cosas más complicadas. Así es como siempre va. Toma algunos de
los tipos primitivos de Java, combínalos para hacer un guiso de tipo primitivo, ¿y qué obtienes? Un tipo
más complicado llamado a tipo de referencia.

El programa en el Listado 4-6 usa tipos de referencia. La Figura 4-9 muestra lo que sucede cuando
ejecuta el programa en el Listado 4-6.
78 Parte II: Escribir tus propios programas Java

Listado 4-6: Uso de tipos de referencia

import javax.swing.JFrame;

clase ShowAFrame {

public static void main (String args []) {


JFrame myFrame = new JFrame (); String myTitle =
"Marco en blanco";

myFrame.setTitle (myTitle); myFrame.setSize (300, 200);


myFrame.setDefaultCloseOperation

(JFrame.EXIT_ON_CLOSE);
myFrame.setVisible (verdadero); }}

El programa en el Listado 4-6 usa dos tipos de referencias. Ambos tipos se definen en la API de Java.
Uno de los tipos (el que usarás todo el tiempo) se llama
Cuerda. El otro tipo (el que puede usar para crear GUI) se llama JFrame

Figura 4-9:
Un vacío
cuadro.

UNA Cuerda Es un montón de personajes. Es como tener varios carbonizarse valores en una fila. Entonces,
con el mi título variable declarada de tipo Cuerda, asignando
"Marco en blanco" al mi título variable tiene sentido en el Listado 4-6. los
Cuerda La clase se declara en la API de Java.

En un programa Java, las comillas dobles rodean las letras en un Cuerda literal.

Un java JFrame es muy parecido a una ventana (La única diferencia es que lo llama JFrame en lugar de
una ventana). Para mantener el Listado 4-6 breve y dulce, decidí no poner nada en mi marco: sin
botones, sin campos, nada.

Incluso con un marco completamente vacío, el Listado 4-6 usa trucos que no describo hasta más
adelante en este libro. Así que no intentes leer e interpretar cada palabra del Listado 4-6. Lo más
importante del Listado 4-6 es que el programa
Capítulo 4: Aprovechar al máximo las variables y sus valores 79
tiene dos declaraciones variables. Al escribir el programa, inventé dos nombres de variables: mi título y myFrame
Según las declaraciones, mi título es de tipo Cuerda, y myFrame es de tipo JFrame

Puedes mirar hacia arriba Cuerda y JFrame en la documentación de la API de Java. Pero, incluso antes de
hacerlo, puedo decirte lo que encontrarás. Lo encontrarás Cuerda y
JFrame son los nombres de las clases de Java. Entonces, esa es la gran noticia. Cada clase es el nombre de
un tipo de referencia. Puedes reservar amountInAccount para
doble valores escribiendo

doble cantidad en cuenta;

o escribiendo

double amountInAccount = 50.22;

También puedes reservar myFrame para JFrame valor escribiendo

JFrame myFrame;

o escribiendo

JFrame myFrame = new JFrame ();

Para revisar la noción de una clase Java, consulte las secciones sobre programación orientada a objetos (OOP) en
el Capítulo 1.

Cada clase de Java es un tipo de referencia. Si declara que una variable tiene algún tipo que no es un tipo
primitivo, el tipo de la variable es (la mayoría de las veces) el nombre de una clase Java.

Ahora, cuando declaras que una variable tiene tipo En t, puedes visualizar lo que significa esa declaración de
una manera bastante directa. Significa que, en algún lugar dentro de la memoria de la computadora, se reserva
una ubicación de almacenamiento para el valor de esa variable. En la ubicación de almacenamiento hay un
montón de bits. La disposición de los bits asegura que se represente un cierto número entero.

Esa explicación está bien para tipos primitivos como En t o doble, pero, ¿qué significa cuando
declaras que una variable tiene un tipo de referencia? ¿Qué significa declarar variable myFrame ser
de tipo JFrame?

Bueno, ¿qué significa declarar te agradezco dios ser un poema EE Cummings? ¿Qué significaría
escribir la siguiente declaración?

EECummingsPoem ithankYouGod;
80 Parte II: Escribir tus propios programas Java

Significa que una clase de cosas es EECummingsPoem, y gracias Dios


se refiere a una instancia de esa clase. En otras palabras, gracias Dios es un objeto que pertenece
al EECummingsPoem clase.

Porque JFrame es una clase, puedes crear objetos a partir de esa clase. (Consulte el Capítulo 1.) Cada
objeto (cada instancia de la JFrame clase) es un marco real, una ventana que aparece en la pantalla
cuando ejecuta el código en el Listado 4-6. Al declarar la variable myFrame ser de tipo JFrame estás
reservando el uso del nombre myFrame Esta reserva le dice a la computadora que myFrame puede
referirse a un real JFrame- tipo de objeto En otras palabras,

myFrame puede convertirse en un apodo para una de las ventanas que aparece en la pantalla de la
computadora. La figura 4-10 ilustra la situación.

Cuando declaras ClassName variableName ;, Estás diciendo que una determinada variable puede referirse a
una instancia de una clase en particular.

los JFrame clase

mi F ra me

Figura 4-10:
La variable
myFrame se
refiere a una
Un objeto (una Otro objeto (otra
instancia de la JFrame clase) instancia de la JFrame
instancia de
clase)
JFrame
clase.

En el Listado 4-6, la frase JFrame myFrame se reserva el uso del nombre


myFrame En esa misma línea de código, la frase nuevo JFrame () crea un nuevo objeto (una instancia de JFrame
clase). Finalmente, el signo igual de esa línea hace
myFrame refiérase al nuevo objeto. Sabiendo que las dos palabras nuevo JFrame ()
Crear un objeto puede ser muy importante. Para una explicación más completa de los objetos, vea el
Capítulo 7.
Capítulo 4: Aprovechar al máximo las variables y sus valores 81

Guiso de tipo primitivo


Mientras estoy en el tema de los marcos, ¿qué es un marco de todos int hora; int minutos;
modos? UNA cuadro es una ventana que tiene una altura y un ancho char amOrPm;
determinados y una ubicación determinada en la pantalla de su
computadora. Por lo tanto, en el fondo de la declaración de la Cuadro clase,
Tenga en cuenta que esta cosa alta y poderosa llamada clase
puede encontrar declaraciones de variables que se parecen a esto:
API de Java no es alta ni poderosa. Una clase es solo una
colección de declaraciones. Algunas de esas declaraciones
son las declaraciones de variables. Algunas de esas
ancho int; int altura; declaraciones de variables usan tipos primitivos, y otras
int x; int y; declaraciones de variables usan tipos de referencia. Estos
tipos de referencia, sin embargo, provienen de otras clases, y
las declaraciones de esas clases tienen variables. La cadena

Aquí hay otro ejemplo: Hora. Una instancia de la Hora la clase


sigue y sigue. En definitiva, todo proviene, de una forma u

puede tener una hora (un número del 1 al 12), una cantidad de
otra, de los tipos primitivos.

minutos (del 0 al 59) y una letra ( una por la mañana pags para la
tarde).

Una declaración de importación


Siempre es bueno anunciar tus intenciones por adelantado. Considere la siguiente conferencia en el aula:

"Hoy, en nuestro curso de Historia del Cine, discutiremos la carrera del actor
Lionel Herbert Blythe Barrymore.

"Nacido en Filadelfia, Barrymore apareció en más de 200 películas, incluyendo It's a Wonderful
Life, Key Largo y Wedding Day del Dr. Kildare. Adicionalmente, Barrymore fue escritor,
compositor y director. Barrymore
hizo la voz de Ebenezer Scrooge todos los años en la radio. . . . "

Cosas interesantes, ¿eh? Ahora compare los párrafos anteriores con una conferencia en la que el
instructor no comienza presentando el tema:

“Bienvenidos una vez más a la historia del cine. "Nacido en Filadelfia, Lionel Barrymore apareció
en más de 200 películas, incluyendo It's a Wonderful Life, Key Largo y Wedding Day del Dr.
Kildare. Adicionalmente, Barrymore (no Ethel, John o Drew) fue escritor, compositor y director. Lionel
Barrymore hizo la voz de Ebenezer Scrooge todos los años en la radio. . . . "
82 Parte II: Escribir tus propios programas Java

Sin una presentación adecuada, un orador puede tener que recordarle constantemente que la discusión
es sobre Lionel Barrymore y no sobre algún otro Barrymore. Lo mismo es cierto en un programa Java.
Mire nuevamente al Listado 4-6:

import javax.swing.JFrame;

clase ShowAFrame {

public static void main (String args []) {


JFrame myFrame = nuevo JFrame ();

En el Listado 4-6, anuncia en la introducción (en el declaración de importación)


que estás usando JFrame en tu clase de Java. Aclaras lo que quieres decir con
JFrame con el nombre completo javax.swing.JFrame. ( ¡Oye! ¿El primer profesor no aclaró con el
nombre completo "Lionel Herbert Blythe Barrymore?") Después de anunciar sus intenciones en la
declaración de importación, puede usar el nombre abreviado JFrame en su código de clase Java.

Si no usa una declaración de importación, debe repetir la


javax.swing.JFrame nombre donde sea que uses el nombre JFrame en tu código Por ejemplo, sin
una declaración de importación, el código del Listado 4-6 se vería así:

clase ShowAFrame {

public static void main (String args []) {


javax.swing.JFrame myFrame =
nuevo javax.swing.JFrame ();
String myTitle = "Marco en blanco";

myFrame.setTitle (myTitle); myFrame.setSize (3200,


200); myFrame.setDefaultCloseOperation

( javax.swing.JFrame. EXIT_ON_CLOSE);
myFrame.setVisible (verdadero); }}

Los detalles de este material de importación pueden ser bastante desagradables. Pero afortunadamente, muchos IDE tienen características

auxiliares convenientes para las declaraciones de importación. Para más detalles, consulte el sitio web de este libro.

Ninguna sección en este libro puede presentar la historia completa sobre las declaraciones de importación. Para comenzar
a desenredar algunas de las sutilezas de la declaración de importación, vea los Capítulos 5, 9 y 10.
Capítulo 4: Aprovechar al máximo las variables y sus valores 83

Crear nuevos valores


aplicando operadores
¿Qué podría ser más reconfortante que tu viejo amigo, el signo más? Fue lo primero que aprendiste
en matemáticas de primaria. Casi todo el mundo sabe cómo agregar 2 y 2. De hecho, en el uso del
inglés, agregar 2 y 2 es una metáfora de algo que es fácil de hacer. Cada vez que ve un signo más,
una célula en su cerebro dice: "Gracias a Dios, podría ser algo mucho más complicado".

Entonces Java tiene un signo más. Puedes usarlo para varios propósitos. Puede usar el signo más para agregar
dos números, como este:

int manzanas, naranjas, frutas; manzanas = 5;


naranjas = 16;

fruta = manzanas + naranjas;

También puede usar el signo más para pegar Cuerda valores juntos:

String startOfChapter =
“Son las tres de la mañana. Estoy soñando con el curso de historia "+" que reprobé en la
escuela secundaria "; System.out.println (startOfChapter);

Esto puede ser útil porque en Java no está permitido hacer un Cuerda
a horcajadas de una línea a otra. En otras palabras, el siguiente código no funcionaría en
absoluto:

Cadena thisIsBadCode =
“Son las tres de la mañana. Estoy soñando con el curso de historia que reprobé en la
escuela secundaria "; System.out.println (thisIsBadCode);

La forma correcta de decir que estás pegando Cuerda valores juntos es decir que eres concatenando Cuerda
valores.

Incluso puede usar el signo más para pegar números al lado de Cuerda valores.

int manzanas, naranjas, frutas; manzanas = 5;


naranjas = 16;

fruta = manzanas + naranjas;


System.out.println ("Tienes" + fruta +
"Trozos de fruta");
84 Parte II: Escribir tus propios programas Java

Por supuesto, el antiguo signo menos también está disponible (pero no para Cuerda valores).

manzanas = fruta - naranjas;

Use un asterisco (*) para la multiplicación y una barra inclinada (/) para la división.

doble tarifa, paga; int horas;

tasa = 6.25; horas = 35; pago = tarifa *


horas; System.out.println (pagar);

Para un ejemplo usando división, refiérase al Listado 4-3.

Cuando divides un En t valor por otro En t valor, obtienes un En t valor. La computadora no se redondea.
En cambio, la computadora corta cualquier resto. Si pones System.out.println (11/4) en su programa, la
computadora imprime 2,
no 2.75. Para superar esto, haga uno (o ambos) de los números que está dividiendo
doble valores. Si pones System.out.println (11.0 / 4) en su programa, la computadora imprime 2.75.

Otro operador aritmético útil se llama recordatorio operador. El símbolo para el operador restante es el
signo de porcentaje (%). Cuando pones System.out. println (11% 4) en su programa, la computadora
imprime 3) Hace esto porque 4 entra en 11 a quién le importa cuántas veces con un resto de 3. El
operador restante resulta ser bastante útil. El listado 4-7 tiene un ejemplo.

Listado 4-7: Hacer cambios

importar estática java.lang.System.out;

clase MakeChange {

public static void main (String args []) {


int total = 248; trimestres int = total / 25; int
whatsLeft = total% 25;

int dimes = whatsLeft / 10; whatsLeft =


whatsLeft% 10;

nickels int = whatsLeft / 5; whatsLeft =


whatsLeft% 5;

int cents = whatsLeft;


Capítulo 4: Aprovechar al máximo las variables y sus valores 85
out.println ("De" + total + "centavos que obtienes"); out.println (trimestres +
"trimestres"); out.println (dimes + "dimes"); out.println (nickels + "nickels"); out.println
(centavos + "centavos"); }}

La Figura 4-11 muestra una ejecución del código en el Listado 4-7. Comienzas con un total de 248 centavos. Luego

trimestres = total / 25

divide 248 por 25, dando 9. Eso significa que puedes hacer 9 cuartos de 248 centavos. Próximo,

whatsLeft = total% 25

divide 248 por 25 nuevamente, y pone solo el resto, 23, en lo que queda.
Ahora estás listo para el siguiente paso, que es tomar tantos dimes como puedas de 23 centavos.

Figura 4-11:
Cambiar para

$ 2.48.

Inicializar una vez, asignar a menudo


El listado 4-7 tiene tres líneas que ponen valores en la variable lo que queda:

En t whatsLeft = total% 25;

whatsLeft = whatsLeft% 10;

whatsLeft = whatsLeft% 5;

Solo una de estas líneas es una declaración. Las otras dos líneas son declaraciones de asignación. Eso
es bueno porque no puedes declarar la misma variable más de una vez (no sin crear algo llamado bloquear).
Si te burlas y escribes
86 Parte II: Escribir tus propios programas Java

Declaraciones de importación: la fea verdad


Observe la declaración de importación en la parte superior del Listado Para la historia real sobre estático, tienes que leer parte
4-7: del Capítulo 10. Y, francamente, no recomiendo saltar a
ese capítulo
importar estático java.lang.
estático sección si toma medicamentos para una afección
System.out;
cardíaca, si está embarazada o amamantando, o si no tiene
Compare esto con la declaración de importación en la parte superior del experiencia previa con programación orientada a objetos.
Listado 4-6: Por ahora, tenga la seguridad de que el Capítulo 10 es fácil

import javax.swing.JFrame; de leer después de haber recorrido la Parte III de este libro.
Y cuando tienes que decidir si usar la palabra estático en una
Al agregar el Importar Java estático. lang.System.out; de declaración de importación, recuerde estos consejos:
acuerdo con el Listado 4-7, puedo hacer que el resto del
código sea un poco más fácil de leer, y puedo evitar tener
largas declaraciones Java que comienzan en una línea y
continúan en otra. Pero nunca tienes que hacer eso. Si quitas ✓ La gran mayoría de las declaraciones de importación en

el El programa Java no usa la palabra estático.

import static java.lang.System. fuera; línea y salpimentar ✓ En este libro, nunca uso importar estática a
el código generosamente con importar cualquier cosa excepto System.out.
System.out.println, entonces el código funciona bien. (Bueno, casi nunca ...)

✓ La mayoría de las declaraciones de importación no usan el


Aquí hay una pregunta: ¿Por qué una declaración incluye la palabra estático porque la mayoría de las declaraciones importan
palabra estático, mientras que la otra declaración no? Bueno, para clases. Desafortunadamente, Sistema. fuera No es el nombre de
ser sincero, ¡desearía no haber preguntado! una clase.

En t whatsLeft = total% 25;

En t whatsLeft = whatsLeft% 10;

en el Listado 4-7, ve un mensaje de error ( whatsLeft ya está definido) cuando intentas


compilar tu código.

Para averiguar qué es un bloque, consulte el Capítulo 5. Luego, para una conversación honesta sobre la redeclaración de
variables, consulte el Capítulo 10.

Los operadores de incremento y decremento


Java tiene algunos pequeños operadores que hacen la vida más fácil (para el procesador de la computadora,
para el cerebro y para los dedos). En total, existen cuatro de estos operadores: dos operadores de
incremento y dos operadores de decremento. los
Capítulo 4: Aprovechar al máximo las variables y sus valores 87
los operadores de incremento suman 1, y los operadores de decremento restan 1. Los operadores de
incremento usan signos dobles más (++), y los operadores de decreto usan signos dobles menos (-).
Para ver cómo funcionan, necesitas algunos ejemplos. El primer ejemplo está en la Figura 4-12.

La Figura 4-13 muestra una ejecución del programa en la Figura 4-12. En esta carrera sin incidentes,
el recuento de conejos se imprime tres veces.

Los signos dobles más tienen dos nombres, dependiendo de dónde los coloque. Cuando pones el ++
antes de una variable, el ++ se llama preincremento
operador. (Los pre representa antes de.)

Figura 4-12:
Usando prein-
Cremento

Figura 4-13:
Una

ejecución del

código en la Figura 4-12.


88 Parte II: Escribir tus propios programas Java

La palabra antes de tiene dos significados:

✓ Pones ++ antes de la variable.

✓ La computadora agrega 1 al valor de la variable antes de usar la variable


en cualquier otra parte de la declaración.

Para entender esto, mire la línea en negrita en la Figura 4-12. La computadora agrega 1 a numberOfBunnies
( elevando el valor de numberOfBunnies a 29) y luego imprime 29 en pantalla.

Con out.println (++ numberOfBunnies), la computadora agrega 1 a número de conejitos antes de


imprimir el nuevo valor de numberOfBunnies en la pantalla.

Una alternativa al preincremento es postincremento ( los enviar representa después.)


La palabra después tiene dos significados diferentes:

✓ Pones ++ después de la variable.

✓ La computadora agrega 1 al valor de la variable después de que la variable se utiliza en


cualquier otra parte de la declaración.

Para ver más claramente cómo funciona el postincremento, observe la línea en negrita en la Figura 4-14. La
computadora imprime el antiguo valor de numberOfBunnies ( cual es 28) en la pantalla, y luego la computadora
agrega 1 a numberOfBunnies, que aumenta el valor de numberOfBunnies a 29)

Con out.println (numberOfBunnies ++), la computadora agrega 1 a número de conejitos después de


imprimir el valor anterior que numberOfBunnies ya tenía.

La Figura 4-15 muestra una ejecución del código en la Figura 4-14. Compare la Figura 4-15 con la ejecución en la Figura
4-13:

✓ Con preincremento en la Figura 4-13, el segundo número es 29.

✓ Con postincremento en la Figura 4-15, el segundo número es 28.

En la Figura 4-15, 29 no aparece en pantalla hasta el final de la ejecución, cuando la


computadora ejecuta un último out.println (numberOfBunnies).

¿Estás tratando de decidir entre usar preincremento o postincremento? Intenta no más. La mayoría de los
programadores usan postincremento. En un programa Java típico, a menudo ves cosas como numberOfBunnies
++. Raramente ves cosas como
+ + numberOfBunnies.
Capítulo 4: Aprovechar al máximo las variables y sus valores 89

Figura 4-14:
Usando
post-incremento.

Figura 4-15:
Una

ejecución del

código en la Figura 4-14.

Además de preincremento y postincremento, Java tiene dos operadores que usan -. Estos operadores
se llaman predecremento y postdecremento.

✓ Con predecremento (- numberOfBunnies), la computadora resta


1 del valor de la variable antes de que la variable se use en el resto de la declaración.

✓ Con postdecremento ( numberOfBunnies--), la computadora resta


1 del valor de la variable después de que la variable se usa en el resto de la declaración.
90 Parte II: Escribir tus propios programas Java

Declaraciones y expresiones
Puede describir los operadores pre y poscremento y pre y ✓ Como una declaración, numberOfBunnies ++
poscremento de dos maneras: la forma en que todos los le dice a la computadora que agregue 1 a número de conejitos.
entienden y la forma correcta. La forma en que explico el
concepto en la mayor parte de esta sección (en términos de
✓ Como expresión, el valor de número
tiempo, con antes de y después) es la forma en que todos lo
OfBunnies ++ es 28, no 29)
entienden. Desafortunadamente, la forma en que todos
entienden el concepto no es realmente la correcta. Cuando Entonces, aunque la computadora agrega 1 a
vea ++ o -, puede pensar en términos de secuencia de numberOfBunnies, el código fuera. println
tiempo. Pero, de vez en cuando, algún programador usa ++ (numberOfBunnies ++) realmente significa out.println
o, de forma con- ducida, y las nociones de antes de y después (28).

Ahora, casi todo lo que acabas de leer


numberOfBunnies ++ es verdad sobre
Descompostura. Entonces, si alguna vez está en una situación difícil,
+ + numberOfBunnies. La única diferencia es que, como
piense en estos operadores en términos de declaraciones y
expresión, ++ numberOfBunnies
expresiones.
se comporta de una manera más intuitiva.
Primero, recuerde que una declaración le dice al ordenador
✓ Como una declaración, ++ numberOfBunnies
que haga algo, y una expresión tiene un valor. (Discutir las
le dice a la computadora que agregue 1 a número de conejitos.
declaraciones en el Capítulo 3, y describir expresiones en
otras partes de este capítulo.) ¿Qué categoría hace número
de conejitos ++ ¿pertenece a? La sorprendente respuesta es ✓ Como expresión, el valor de ++ número
ambas. El código de Java número de conejos ++ es a la vez OfConejitos es 29)
una declaración y una expresión.
Entonces, con out.println (++ number OfBunnies), la
computadora agrega 1 a la variable numberOfBunnies, y
el código
Suponga que, antes de que la computadora ejecute el out.println (++ numberOfBunnies)
código out.println (numberOfBunnies ++), realmente significa out.println (29).
El valor de numberOfBunnies es 28)

En lugar de escribir ++ numberOfBunnies, podrías lograr el mismo efecto escribiendo numberOfBunnies =


numberOfBunnies + 1. Por lo tanto, algunas personas concluyen que los ++ y Java de los operadores son
para guardar las pulsaciones de teclas, para evitar que esos pobres dedos trabajen demasiado. Esto es
completamente incorrecto. La mejor razón para usar ++ es evitar la práctica ineficiente y propensa a errores
de escribir el mismo nombre de variable, como numberOfBunnies, dos veces en la misma declaración. Si tú
escribes numberOfBunnies solo una vez (como lo hace cuando usa ++ o -), la computadora tiene que
averiguar qué numberOfBunnies significa solo una vez. Además de eso, cuando escribes numberOfBunnies solo
una vez, solo tiene una oportunidad (en lugar de dos) de escribir el nombre de la variable incorrectamente.
Capítulo 4: Aprovechar al máximo las variables y sus valores 91 91

Con expresiones simples como numberOfBunnies ++, Estas ventajas apenas hacen la diferencia. Pero
con expresiones más complicadas, como
InventoryItems [(amountReceived - * itemsPerBox + 17)] ++,
La eficiencia y precisión que obtiene al usar ++ y - son significativas.

Operadores de Asignación
Si lee la sección anterior, que trata sobre operadores que suman 1, puede que se pregunte si puede
manipular estos operadores para agregar 2 o agregar 5 o agregar 1000000. ¿Puede escribir numberOfBunnies
++++ y todavía te llamas programador de Java? Pues no puedes. Si lo prueba, aparece un mensaje de
error cuando intenta compilar su código.

¿Entonces que puedes hacer? Por suerte, Java tiene muchos operadores de asignación que puede usar.
Con un operador de asignación, puede agregar, restar, multiplicar o dividir por lo que desee. También puedes
hacer otras operaciones geniales. El listado 4-8 tiene una mezcla heterogénea de operadores de asignación
(las cosas con signos iguales). La Figura 4-16 muestra el resultado de ejecutar el Listado 4-8.

Listado 4-8: Operadores de asignación

clase UseAssignmentOperators {

public static void main (String args []) {


int numberOfBunnies = 27; int numberExtra
= 53;

numberOfBunnies + = 1;
System.out.println (numberOfBunnies);

numberOfBunnies + = 5;
System.out.println (numberOfBunnies);

numberOfBunnies + = numberExtra; System.out.println


(numberOfBunnies);

numberOfBunnies * = 2;
System.out.println (numberOfBunnies);

System.out.println (numberOfBunnies - = 7);

System.out.println (numberOfBunnies = 100); }}


92 Parte II: Escribir tus propios programas Java

Figura 4-16:
Una

ejecución del

código en el Listado 4-8.

El listado 4-8 muestra cuán versátiles son los operadores de asignación de Java. Con los operadores de
asignación, puede sumar, restar, multiplicar o dividir una variable por cualquier número. Observe cómo + = 5
5 agrega 5 a numberOfBunnies, y cómo
* = 2 multiplica numberOfBunnies por 2. Incluso puede usar el valor de otra expresión (en el Listado 4-8,
numberExtra) como el número a ser aplicado.

Las últimas dos líneas en el Listado 4-8 demuestran una característica especial de los operadores de asignación
de Java. Puede usar un operador de asignación como parte de una declaración Java más grande. En la penúltima
línea del Listado 4-8, el operador resta 7 de
numberOfBunnies, disminuyendo el valor de numberOfBunnies de 172 a
165. Luego, todo el negocio de la asignación se rellena en una llamada a Sistema. out.println, 165
impresiones en pantalla.

He aquí, la última línea del Listado 4-8 muestra cómo puedes hacer lo mismo con el signo igual de Java.
Lo que llamo una declaración de asignación cerca del comienzo de este capítulo es realmente uno de los
operadores de asignación que describo en esta sección. Por lo tanto, cada vez que asigna un valor a
algo, puede hacer que esa asignación sea parte de una declaración más grande.

Cada uso de un operador de asignación cumple una doble función como una declaración y una
expresión. En todos los casos, el valor de la expresión es igual al valor que asigne. Por ejemplo, antes
de ejecutar el código System.out.println (numberOfBunnies - = 7), El valor de numberOfBunnies es 172) Como
una declaración, numberOfBunnies - = 7 le dice a la computadora que reste 7 de

numberOfBunnies ( entonces el valor de numberOfBunnies viene de 172 a 165).


Como expresión, el valor de numberOfBunnies - = 7 es 165. Entonces el código
System.out.println (numberOfBunnies - = 7) realmente significa Sistema. out.println (165). El número
165 aparece en la pantalla de la computadora.

Para obtener una explicación más completa de este tipo de cosas, consulte la barra lateral, "Declaraciones y expresiones",
anteriormente en este capítulo.
Capítulo 5

Control del flujo del programa


con declaraciones de toma de decisiones
En este capítulo
▶ ▶ Escribir declaraciones que elijan entre alternativas

▶ ▶ Poner declaraciones una dentro de otra

▶ ▶ Elegir entre muchas alternativas

T recuerde
el programaun
deepisodio
televisiónen el que
Daniel el Sr. Wilson
el travieso estaba
transmitido teniendo
por CBS problemas
de 1959 a 1963. I para tomar una decisión
importante. Creo que fue algo sobre cambiar de trabajo o mudarse a una nueva ciudad. De todos modos,
todavía puedo ver esa foto del Sr. Wilson sentado en su patio, bebiendo limonada y mirando a la nada
durante toda la tarde. Por supuesto, el molesto personaje de Dennis interrumpía constantemente la paz y
la tranquilidad del señor Wilson. Eso es lo que hizo divertida esta situación.

Lo que me impresionó de este episodio (la razón por la que lo recuerdo tan claramente incluso ahora) fue
la obstinada intención del Sr. Wilson de tomar la decisión. Este tipo no se ocupaba de sus asuntos
cotidianos, deambulaba por el vecindario, mientras que los pensamientos sobre la decisión entraban y
salían de su mente. Estaba sentado en silencio en su patio, haciendo marcas cuidadosas y lógicas en su
balance mental. ¿Cuántas personas realmente toman decisiones de esta manera?

En ese momento, todavía era bastante joven. Nunca enfrenté la responsabilidad de tener que tomar una
gran decisión que nos afectara a mi familia y a mí. Pero me preguntaba cómo sería ese proceso de toma
de decisiones. ¿Sería útil sentarse allí como un tocón durante horas y horas? ¿Tomaría mis decisiones
sopesando cuidadosamente las opciones? ¿O dispararía en la oscuridad, tomaría riesgos y actuaría por
impulso? Solo el tiempo lo diría.
94 Parte II: Escribir tus propios programas Java

Toma de decisiones (Java si declaraciones)


Cuando escribes programas de computadora, constantemente golpeas bifurcaciones en las carreteras. ¿El usuario
escribió correctamente su contraseña? En caso afirmativo, deje que el usuario trabaje; si no, patea el trasero. Por lo
tanto, el lenguaje de programación Java necesita una forma de hacer que un programa se ramifique en una de dos
direcciones. Afortunadamente, el idioma tiene un camino. Se llama un Si declaración.

Adivina el número
El listado 5-1 ilustra el uso de un Si declaración. En la Figura 5-1 se muestran dos ejecuciones del
programa en el Listado 5-1.

Listado 5-1: Un juego de adivinanzas

importar estática java.lang.System.out; import


java.util.Scanner; import java.util.Random;

clase GuessingGame {

public static void main (String args []) {


Teclado del escáner = nuevo escáner (System.in);

out.print ("Ingrese un int del 1 al 10:");

int inputNumber = keyboard.nextInt (); int randomNumber = new Random (). nextInt
(10) + 1;

if (inputNumber == randomNumber) {
out.println ("**********"); out.println ("* Usted
gana. *"); out.println ("**********");

} más {
out.println ("Pierdes"); out.print ("El número aleatorio fue");
out.println (randomNumber + ".");

out.println ("Gracias por jugar"); }}


Capítulo 5: Control del flujo del programa con declaraciones de toma de decisiones 95

Figura 5-1:
Dos carreras

de las

adivinanzas

juego.

El programa en el Listado 5-1 juega un juego de adivinanzas con el usuario. El programa obtiene un
número (una conjetura) del usuario y luego genera un número aleatorio entre 1 y 10. Si el número que
ingresó el usuario es el mismo que el número aleatorio, el usuario gana. De lo contrario, el usuario pierde
y el programa le dice al usuario cuál era el número aleatorio.

Ella controló las pulsaciones


del teclado
Tomados en conjunto, las líneas

import java.util.Scanner;

Teclado del escáner = nuevo escáner (System.in);

int inputNumber = keyboard.nextInt ();

en el Listado 5-1 obtenga cualquier número que el usuario escriba en el teclado de la computadora. La
última de las tres líneas coloca este número en una variable llamada
número de entrada. Si estas líneas se ven complicadas, no se preocupe. Puede copiar estas líneas casi
palabra por palabra cuando quiera leer desde el teclado. Incluya las dos primeras líneas (la importar y Escáner
líneas) solo una vez en su programa. Más adelante en su programa, donde el usuario escriba un En t

valor, incluye una línea con una llamada a nextInt ( como en la última de las tres líneas de código
anteriores).

De todos los nombres en estas tres líneas de código, los únicos dos nombres que acuñé son número de entrada y
teclado. Todos los otros nombres son parte de Java. Entonces, si quiero ser creativo, puedo escribir las líneas de
esta manera:
96 Parte II: Escribir tus propios programas Java

import java.util.Scanner;

Escáner readingThingie = nuevo escáner (System.in);

En t valueTypedIn = leyendo a Thingie. nextInt ();

También puedo reforzar las declaraciones de importación de mi programa, como hago en los listados 5-2 y 5-3. Aparte de
eso, tengo muy poco margen de maniobra.

A medida que siga leyendo en este libro, comenzará a reconocer los patrones detrás de estas tres líneas
de código, por lo que no abarrotaré esta sección con todos los detalles. Por ahora, puede copiar estas tres
líneas y tener en cuenta lo siguiente:

✓ Cuando importas java.util.Scanner, no usas la palabra estático.

Pero importando Escáner es diferente de importar System.out. Cuando importas java.lang.System.out, usas
la palabra estático. ( Consulte el Listado 5-1.) La diferencia se desliza hacia el código porque Escáner es
el nombre de una clase y System.out No es el nombre de una clase. Para un vistazo rápido al uso de
la palabra estático en las declaraciones de importación, vea una de las barras laterales en el Capítulo
4. Para una historia más completa sobre la palabra, vea el Capítulo 10.

✓ El nombre System.in representa el teclado

Para obtener caracteres de otro lugar que no sea el teclado, puede escribir algo que no sea System.in
dentro de los paréntesis. ¿Qué más puedes poner entre paréntesis? Para algunas ideas, vea
el Capítulo 8.

En el Listado 5-1, tomo la decisión arbitraria de dar nombre a una de mis variables teclado. El
nombre teclado le recuerda, el lector, que esta variable se refiere a un montón de botones de
plástico frente a su computadora. Nombrando algo teclado no le dice nada a Java sobre botones de
plástico o sobre la entrada del usuario. Por otro lado, el nombre System.in siempre le dice a Java
sobre esos botones de plástico. El código Teclado del escáner = nuevo escáner (System.in) en el
Listado 5-1 conecta el nombre teclado

con los botones de plástico que todos conocemos y amamos.

✓ Cuando espera que el usuario escriba un En t valor (un número entero de


algún tipo), use nextInt ().

Si espera que el usuario escriba un doble valor (un número que contiene un punto decimal), use nextDouble
(). Si espera que el usuario escriba cierto
o falso, utilizar nextBoolean (). Si espera que el usuario escriba una palabra como
Barry, Java, o Hola, utilizar siguiente().
Capítulo 5: Control del flujo del programa con declaraciones de toma de decisiones 97
Para ver un ejemplo en el que el usuario escribe una palabra, consulte el Listado 5-3. Para ver un ejemplo en el
que el usuario escribe un solo carácter, consulte el Listado 6-4 en el Capítulo 6. Para ver un ejemplo en el que
un programa lee una línea completa de texto (todo en un gran trago), consulte el Capítulo 8.

✓ Puede obtener varios valores del teclado, uno tras otro.

Para hacer esto, use el keyboard.nextInt () codificar varias veces. Para ver un programa que
lee más de un valor del teclado, vaya al Listado 5-4.

Creando aleatoriedad
Lograr una aleatoriedad real es sorprendentemente difícil. El matemático Persi Diaconis dice que si lanza una moneda
varias veces, siempre comenzando con la cabeza hacia arriba, es probable que lance las cabezas con más frecuencia
que las colas. Si tira varias veces más, siempre comenzando con la cola hacia arriba, es probable que lance las colas
con más frecuencia que las cabezas. En otras palabras, lanzar monedas no es realmente justo. *

Las computadoras no son mucho mejores que las monedas y los pulgares humanos. Una computadora imita la
generación de secuencias aleatorias pero, al final, la computadora solo hace lo que se le dice y hace todo esto de
una manera puramente determinista. Entonces, en el Listado 5-1, cuando la computadora se ejecuta

import java.util.Random;

int randomNumber = new Random (). nextInt (10) + 1;

la computadora parece darnos un número generado aleatoriamente, un número entero entre 1 y 10.
Pero todo es falso. La computadora solo sigue las instrucciones. No es realmente aleatorio, pero sin
doblar una computadora hacia atrás, es lo mejor que cualquiera puede hacer.

Una vez más, le pido que tome este código de fe ciega. No te preocupes por que
nuevo Random (). nextInt significa hasta que tenga más experiencia con Java. Simplemente copie este
código en sus propios programas y diviértase con él. Y si los números del 1 al 10 no están en sus planes de
vuelo, no se preocupe. Para tirar un dado imaginario, escribe la declaración

int rollEmBaby = new Random (). nextInt ( 6) + 1;

Con la ejecución de esta declaración, la variable rollEmBaby obtiene un valor de 1 a 6)

** Diaconis, Persi. "La búsqueda de la aleatoriedad". Reunión anual de la Asociación Americana para
el Avance de la Ciencia. Seattle 14 de febrero de 2004.
98 Parte II: Escribir tus propios programas Java

La declaración if
En el núcleo del Listado 5-1 hay un Java Si declaración. Esta Si declaración representa una bifurcación en el
camino. (Consulte la Figura 5-2.) La computadora sigue una de las dos puntas: la punta que imprime Tú
ganas o la punta que imprime Tú pierdes. El equipo decide qué punta tomar al probar la verdad o la
falsedad de un
condición. En el Listado 5-1, la condición que se está probando es

inputNumber == randomNumber

¿El valor de número de entrada igual al valor de ¿número aleatorio? Cuando la condición es verdadera, la
computadora hace las cosas entre la condición y la palabra más. Cuando la condición resulta ser falsa, la
computadora hace las cosas después de la palabra más. De cualquier manera, la computadora ejecuta el
último
println llamada, que muestra Gracias por jugar.

La condición en un Si La declaración debe estar entre paréntesis. Sin embargo, una línea como if
(inputNumber == randomNumber) no es una declaración completa (al igual que "Si tuviera un martillo" no
es una oración completa). Entonces esta línea if (inputNumber == randomNumber) no debería terminar con
un punto y coma.

Hace número de entrada


igual número aleatorio ?

si No

Figura 5-2: * ** ** ** ** ** ** ** ** ** * Tú pierdes . T


Una declaración * *Tú ganas . * * herandomnu mb er
if es como * ** ** ** ** ** ** ** ** ** * wa s. . .
Un tenedor
Gracias por jugar .
en el camino.
Capítulo 5: Control del flujo del programa con declaraciones de toma de decisiones 99
A veces, cuando escribo sobre una condición que se está probando, uso la palabra expresión en vez de condición.
Eso está bien, porque cada condición es una expresión. Una expresión es algo que tiene un valor y,
efectivamente, cada condición tiene un valor. El valor de la condición es cierto

o falso. ( Para revelar información sobre expresiones y valores como cierto


y falso, ver Capítulo 4.)

El doble signo igual


En el Listado 5-1, en el Si condición de la declaración, observe el uso del doble signo igual. Comparar dos
números para ver si son iguales no es lo mismo que establecer algo igual a otra cosa. Es por eso que el
símbolo para comparar por igualdad no es el mismo que el símbolo que se usa en una tarea o una
inicialización. En un Si condición de la declaración, no puede reemplazar el doble signo igual con un solo
signo igual. Si lo hace, su programa simplemente no funcionará. (Casi siempre recibe un mensaje de error
cuando intenta compilar su código).

Por otro lado, si nunca comete el error de usar un solo signo igual en una condición, no es normal. No
hace mucho tiempo, mientras enseñaba un curso introductorio de Java, prometí que me tragaría mi
puntero láser si nadie cometía el mismo error de signo igual durante cualquiera de las sesiones de
laboratorio. Esta no fue una promesa ociosa. Sabía que nunca tendría que guardarlo. Al final resultó que,
incluso si hubiera ignorado las primeras diez veces que alguien cometió el error de signo igual igual
durante esas sesiones de laboratorio, todavía estaría libre de puntero láser. Todos usan erróneamente el
signo igual igual varias veces en su carrera de programación. El truco es no evitar cometer el error; el
truco es atrapar el error cada vez que lo cometas.

Prepárate
los Si La declaración en el Listado 5-1 tiene dos mitades: una mitad superior y una mitad inferior. Tengo
nombres para estas dos partes de un Si declaración. Los llamo el si parte ( la mitad superior) y el otra parte la
mitad inferior)

los Si parte del Listado 5-1 parece tener más de una declaración. Hago que esto suceda adjuntando las
tres declaraciones de la Si parte en un par de llaves. Cuando hago esto, formo un bloquear. Un bloque es un
conjunto de declaraciones agrupadas por un par de llaves.
100 Parte II: Escribir tus propios programas Java

Con este bloque, tres llamadas a println están escondidos de forma segura dentro del Si
parte. Con las llaves, las filas de asteriscos y las palabras Tú ganas
solo se muestra cuando la suposición del usuario es correcta.

Este negocio con bloques y llaves se aplica a la más parte también. En el Listado 5-1, cada vez número
de entrada no es igual número aleatorio, la computadora ejecuta tres print / println llamadas. Para
convencer a la computadora de que las tres llamadas están dentro del más cláusula, pongo estas
llamadas en un bloque. Es decir, adjunto estas tres llamadas en un par de llaves.

Estrictamente hablando, el Listado 5-1 tiene solo una declaración entre Si y el


más declaraciones y solo una declaración después de la más declaración. El truco es que cuando colocas un montón
de declaraciones dentro de llaves, obtienes un bloque; y un bloque se comporta, en todos los aspectos, como una
sola declaración. De hecho, la documentación oficial de Java enumera los bloques como uno de los muchos tipos
de declaraciones. Entonces, en el Listado 5-1, el bloque que imprime Tú ganas y asteriscos es una declaración única
que tiene, dentro de ella, tres declaraciones más pequeñas.

Sangría si las declaraciones en su código


Observe cómo, en el Listado 5-1, el impresión y println llamadas dentro del Si Las declaraciones están
sangradas. (Esto incluye tanto el Tú ganas y Tú pierdes declaraciones. los impresión y println llamadas que
vienen después de la palabra más siguen siendo parte de la Si declaración) Estrictamente hablando, no
tiene que sangrar las declaraciones que están dentro de un Si declaración. Para todos los cuidados del
compilador, puede escribir todo su programa en una sola línea o colocar todas sus declaraciones en un
ingenioso zigzag deforme. El problema es que ni usted ni nadie más pueden entender su código si no
sangran sus declaraciones de manera lógica. En el Listado 5-1, la sangría de la impresión y println las
declaraciones ayudan a su ojo (y cerebro) a ver rápidamente que estas declaraciones están subordinadas
a la general si / si no fluir.

En un programa pequeño, el código sin sangría o con poca sangría es apenas tolerable. Pero en un
programa complicado, la sangría que no sigue un patrón ordenado y lógico es una gran pesadilla fea.

Muchos IDE de Java tienen herramientas para sangrar su código automáticamente. De hecho, la sangría de código es una
de mis características IDE favoritas. Así que no camine, corra hacia una computadora y visite el sitio web de este libro para
obtener más información sobre lo que los IDE de Java pueden ofrecer.

Cuando escribes Si , puede sentirse tentado a tirar todas las reglas sobre llaves por la ventana y
simplemente confiar en la sangría. Desafortunadamente, esto
Capítulo 5: Control del flujo del programa con declaraciones de toma de decisiones 101
rara vez funciona. Si sangra tres declaraciones después de la palabra más y olvide encerrar esas
declaraciones entre llaves, la computadora cree que más
la parte incluye solo la primera de las tres declaraciones. Lo que es peor, la hendidura lo engaña
haciéndole creer que el más La parte incluye las tres declaraciones. Esto hace que sea más difícil para
usted descubrir por qué su código no se comporta de la manera que cree que debería comportarse. ¡Así
que mira esas llaves!

A menos en Ifrica
Bien, entonces el título de esta sección está inventado. ¡Vaya cosa! La idea es que puedes crear un Si declaración
sin el más parte. Tomemos, por ejemplo, el código en el Listado 5-1. Tal vez prefieras no frotarlo cuando
el usuario pierde el juego. El código modificado en el Listado 5-2 le muestra cómo hacerlo (y la Figura
5-3 le muestra el resultado).

Listado 5-2: Un juego de adivinanzas más amable y gentil

import static java.lang.System.in; importar estática


java.lang.System.out; import java.util.Scanner; import
java.util.Random;

clase DontTellThemTheyLost {

public static void main (String args []) {


Teclado del escáner = nuevo escáner (en);

out.print ("Ingrese un int del 1 al 10:");

int inputNumber = keyboard.nextInt (); int randomNumber = new Random (). nextInt
(10) + 1;

if (inputNumber == randomNumber) {
out.println ("* Usted gana. *"); }

out.println ("Esa fue una muy buena suposición :-)"); out.print ("El número
aleatorio fue"); out.println (randomNumber + "."); out.println ("Gracias por jugar"); }}
102 Parte II: Escribir tus propios programas Java

Figura 5-3:
Dos carreras del
juego en el
Listado 5-2.

los Si declaración en el Listado 5-2 no tiene más parte. Cuando número de entrada es lo mismo que número
aleatorio, la computadora imprime Tú ganas. Cuando número de entrada
es diferente de número aleatorio, la computadora no imprime Tú ganas.

El listado 5-2 ilustra otra idea nueva. Con un importar declaración para
System.in, Puedo reducir nuevo escáner (System.in) a los más cortos nuevo escáner (en). Agregando esto importar
la declaración no vale la pena el esfuerzo. De hecho, escribo más con el importar declaración que sin ella.
Sin embargo, el código en el Listado 5-2 demuestra que es posible importar System.in.

Condiciones de formación con comparaciones y


operadores lógicos
El lenguaje de programación Java tiene muchos pequeños garabatos y doodads para sus diversas necesidades
de formación de condiciones. Esta sección te dice todo sobre ellos.

Comparación de números; comparando personajes


La Tabla 5-1 muestra los operadores que puede usar para comparar una cosa con otra.

Tabla 5-1 Operadores de comparación

Símbolo del Sentido Ejemplo


operador

== es igual a numberOfCows == 5

!= no es igual a buttonClicked! = panicButton

< es menos que numberOfCows <5

> es mayor que myInitial> 'B'

<= es menor o igual que numberOfCows <= 5

>= es mayor o igual a myInitial> = 'B'


Capítulo 5: Control del flujo del programa con declaraciones de toma de decisiones 103
Puede usar todos los operadores de comparación de Java para comparar números y caracteres. Cuando
comparas números, las cosas van más o menos como crees que deberían ir. Pero cuando comparas
personajes, las cosas son un poco extrañas. Comparar letras mayúsculas entre sí no es un problema.
Porque la carta
si viene alfabéticamente antes H la condición 'B' <'H' es verdad. Comparar letras minúsculas entre sí
también está bien. Lo extraño es que cuando se compara una letra mayúscula con una letra minúscula,
la letra mayúscula siempre es más pequeña. Así que aunque 'Z' <'A' Es falso, 'Z' <'a' es verdad.

Debajo del capó, las letras UNA mediante Z se almacenan con códigos numéricos del 65 al 90. Las
letras una mediante z se almacenan con los códigos 97 a 122. Es por eso que cada letra mayúscula es
más pequeña que cada letra minúscula.

Tenga cuidado cuando compare dos números para igualdad (con ==) o desigualdad (con! =). Después de
hacer algunos cálculos y obtener dos doble valores o dos
flotador valores, los valores que tiene rara vez son iguales entre sí. (El problema proviene de esos
molestos dígitos más allá del punto decimal.) Por ejemplo, el equivalente Fahrenheit de 21 grados
Celsius es 69.8, y cuando calcula 9.0 / 5 * 21 + 32 a mano, obtienes 69.8. Pero la condición 9.0 / 5 * 21 +
32 == 69.8 Resulta ser falso. Eso es porque, cuando la computadora calcula 9.0 / 5 * 21 + 32, obtiene
69.80000000000001, no 69.8.

Comparar objetos
Cuando empiezas a trabajar con objetos, descubres que puedes usar == y! = Para comparar objetos
entre sí. Por ejemplo, un botón que ve en la pantalla de la computadora es un objeto. Puede preguntar si
lo que se hizo clic con el mouse es un botón en particular en su pantalla. Lo haces con el operador de
igualdad de Java.

if (e.getSource () == bCopy) {
clipboard.setText (which.getText ());

Para obtener más información sobre cómo responder a los clics en los botones, lea el Capítulo 16.

El gran problema con el esquema de comparación de Java se produce cuando se comparan dos cadenas.
(Por una o dos palabras sobre Java Cuerda tipo, vea la sección sobre tipos de referencia en el Capítulo 4.)
Cuando compara dos cadenas entre sí, no desea usar el signo de doble igual. El uso del doble signo igual
preguntaría: "¿Esta cadena está almacenada exactamente en el mismo lugar en la memoria que la otra
cadena?" Por lo general, eso no es lo que quieres preguntar. En su lugar, generalmente desea preguntar:
"¿Esta cadena tiene los mismos caracteres que la otra cadena?" Para hacer la segunda pregunta (la pregunta
más apropiada) Java's Cuerda tipo tiene un método llamado es igual ( Como todo lo demás en el universo
conocido, esto es igual

El método se define en la API de Java, abreviatura de la interfaz de programación de aplicaciones. es igual El


método compara dos cadenas para ver si tienen los mismos caracteres. Para un ejemplo usando Java's es
igual método, vea el Listado 5-3. (La Figura 5-4 muestra una ejecución del programa en el Listado 5-3.)
104 Parte II: Escribir tus propios programas Java

Listado 5-3: Verificación de una contraseña

import static java.lang.System. *; import java.util.Scanner;

clase CheckPassword {

public static void main (String args []) {

out.print ("¿Cuál es la contraseña?");

Teclado del escáner = nuevo escáner (en); Cadena


contraseña = keyboard.next ();

out.println ("Escribiste >>" + contraseña + "<<"); out.println ();

if (contraseña == "pez espada") {


out.println ("La palabra que escribió está almacenada"); out.println ("en el
mismo lugar que el real"); out.println ("contraseña. Debe ser un"); out.println
("hacker"); } más {

out.println ("La palabra que escribió no es"); out.println ("almacenado en el


mismo lugar que"); out.println ("la contraseña real, pero eso es"); out.println ("no
es gran cosa"); } out.println ();

if (contraseña.equals ("pez espada")) {


out.println ("La palabra que escribió tiene el"); out.println ("los mismos
caracteres que el real"); out.println ("contraseña. Puede usar nuestro");
out.println ("sistema precioso"); } más {

out.println ("La palabra que escribiste no"); out.println ("tiene los mismos
caracteres que"); out.println ("la contraseña real. No puedes"); out.println ("usa
nuestro precioso sistema"); }}}

En el Listado 5-3, la llamada keyboard.next () toma cualquier palabra que el usuario escriba en el teclado
de la computadora. El código introduce esta palabra en la variable llamada contraseña. Entonces el
programa Si declaraciones utilizan dos técnicas diferentes para comparar contraseña con "pez espada".
Capítulo 5: Control del flujo del programa con declaraciones de toma de decisiones 105

Figura 5-4:
El resultado
de usar == y
usar
Método
igual de
Java.

La más apropiada de las dos técnicas usa Java's es igual método. los es igual El método parece
divertido porque cuando lo llamas, pones un punto después de una cadena y pones la otra cadena
entre paréntesis. Pero esa es la forma en que tienes que hacerlo.

Al llamar a Java's es igual método, no importa qué cadena obtiene el punto y cuál obtiene los
paréntesis. Por ejemplo, en el Listado 5-3, podría haber escrito

if ("pez espada" .equals (contraseña))

El método funcionaría igual de bien.

Una llamada a Java's es igual El método parece desequilibrado, pero no lo es. Hay una razón
detrás del aparente desequilibrio entre el punto y los paréntesis. La idea es que tienes dos objetos:
el contraseña objeto y el
"pez espada" objeto. Cada uno de estos dos objetos es de tipo Cuerda. ( Sin embargo,
contraseña es una variable de tipo Cuerda, y "pez espada" es un Cuerda literal.) Cuando escribes contraseña.equals
("pez espada"), estás llamando a es igual método que pertenece al objeto de contraseña. Cuando llamas
a ese método, estás alimentando "pez espada" al método como el parámetro del método (juego de
palabras).

Puede leer más sobre métodos que pertenecen a objetos en el Capítulo 7.

Al comparar cadenas entre sí, use el es igual Método: no es el doble signo igual.
106 Parte II: Escribir tus propios programas Java

Importar todo de una sola vez


La primera línea del Listado 5-3 ilustra una manera perezosa de importar ambos System.out
y System.in. Importar todo lo que Sistema tiene que ofrecer, utiliza el carácter comodín de asterisco (*).
De hecho, importando java.lang.System. * es como tener unos 30 separados importar declaraciones,
incluyendo System.in, Sistema. fuera, System.err, System.nanoTime, y muchos otros Sistema cosas.

El uso de un asterisco en un importar La declaración generalmente se considera una mala práctica de


programación, por lo que no lo hago a menudo en los ejemplos de este libro. Pero para programas más grandes,
programas que usan docenas de nombres de la API de Java, el truco del asterisco vago es útil.

No puedes tirar un asterisco donde quieras dentro de un importar declaración. Por ejemplo, no puede
importar todo lo que comienza con Java escribiendo importar java. *. Puede sustituir un asterisco solo por el
nombre de una clase o por el nombre de algo estático escondido dentro de una clase. Para más
información sobre asteriscos en importar declaraciones, vea el Capítulo 9. Para información sobre cosas
estáticas, vea el Capítulo 10.

Operadores lógicos de Java


El señor Spock estaría complacido. Java tiene todos los operadores que necesita para mezclar y combinar
pruebas lógicas. Los operadores se muestran en la Tabla 5-2.

Tabla 5-2. Operadores logicos

Símbolo del operador Sentido Ejemplo

&& y 5 <x && x <10

|| o x <5 || 10 <x

! no ! password.equals ("pez espada")

Puede usar estos operadores para formar todo tipo de condiciones elaboradas. El listado 5-4 tiene
un ejemplo.
Capítulo 5: Control del flujo del programa con declaraciones de toma de decisiones 107
Listado 5-4: Verificación de nombre de usuario y contraseña

import javax.swing.JOptionPane;

Autenticador de clase {

public static void main (String args []) {

String username =
JOptionPane.showInputDialog ("Nombre de usuario:"); Contraseña de
cadena =
JOptionPane.showInputDialog ("Contraseña:");

Si ( nombre de usuario! = nulo &&

contraseña! = nulo && ( (username.equals ("bburd") &&

contraseña.equals ("pez espada")) || (username.equals


("hritter") && password.equals ("preakston"))

)
)
{ JOptionPane.showMessageDialog

(nulo, "Estás dentro"); } más {

JOptionPane.showMessageDialog
(nulo, "Eres sospechoso"); }}}

En la Figura 5-5 se muestran varias ejecuciones del programa del Listado 5-4. Cuando el nombre de usuario es bburd y
la contraseña es pez espada o cuando el nombre de usuario es buñuelo y la contraseña es Preakston, El usuario recibe
un buen mensaje. De lo contrario, el usuario es un vagabundo que recibe el desagradable mensaje que se merece.

¡La figura 5-5 es falsa! Para ayudarlo a leer los nombres de usuario y las contraseñas, agregué una
declaración adicional al Listado 5-4. La declaración extra ( UIManager. put ("TextField.font", nueva
fuente ("Dialog", Font.BOLD, 14)))
aumenta el tamaño de fuente de cada campo de texto. Sí, modifiqué el código antes de crear la figura. ¡Me
avergüenza!
108 Parte II: Escribir tus propios programas Java

Figura 5-5:
Varias
ejecuciones del
código del
Listado 5-4.

El listado 5-4 ilustra una nueva forma de obtener la entrada del usuario; a saber, mostrar al usuario un diálogo de entrada.
La declaración

Contraseña de cadena =
JOptionPane.showInputDialog ("Contraseña:");

en el Listado 5-4 realiza más o menos la misma tarea que la declaración

Cadena contraseña = keyboard.next ();

del Listado 5-3. La gran diferencia es, mientras keyboard.next () muestra texto opaco en una consola, JOptionPane.showInputDialog
("Nombre de usuario:")
muestra un cuadro de diálogo elegante que contiene un campo de texto y botones. (Compare las Figuras 5-4 y 5-5.)
Cuando el usuario hace clic en Aceptar, la computadora toma el texto que esté en el campo de texto y lo entrega a
una variable. De hecho, el Listado 5-4 usa
JOptionPane.showInputDialog dos veces: una vez para obtener un valor para nombre de usuario variable, y una
segunda vez para obtener un valor para el contraseña variable.
Capítulo 5: Control del flujo del programa con declaraciones de toma de decisiones 109
Cerca del final del Listado 5-4, uso una ligera variación en el JOptionPane negocio,

JOptionPane.showMessageDialog
(nulo, "Estás dentro");

Con showMessageDialog, Muestro un cuadro de diálogo muy simple: un cuadro sin campo de texto. (Nuevamente,
vea la Figura 5-5.)

Como miles de otros nombres, el nombre JOptionPane se define en la API de Java. (Para ser más
especifico, JOptionPane se define dentro de algo llamado
javax.swing, que a su vez se define dentro de la API de Java.) Para usar el nombre
JOptionPane a lo largo del Listado 5-4, importo javax.swing.JOptionPane
en la parte superior de la lista.

En el Listado 5-4, JOptionPane.showInputDialog funciona bien porque la entrada del usuario


(nombre de usuario y contraseña) son simples cadenas de caracteres. Si desea que el usuario
ingrese un número (un En t o un doble, por ejemplo), tienes que hacer un trabajo extra. Por ejemplo,
para obtener un En t valor del usuario, escriba algo como int numberOfCows = Entero. parseInt
(JOptionPane.showInputDialog ("¿Cuántas vacas?")).

El extra Integer.parseInt cosas obliga a que la entrada de su campo de texto sea un


En t valor. Conseguir un doble valor del usuario, escriba algo como doble fraccionOfHolsteins =
Double.parseDouble (JOptionPane. showInputDialog ("Holsteins:")). El extra Double.parseDouble

la empresa obliga a que la entrada de su campo de texto sea doble valor.

Vive les nuls!


Las traducciones francesas de Para Dummies los libros son libros Pour les Nuls. Así que un "maniquí" en
inglés es un "nul" en francés. Pero en Java, la palabra nulo no significa nada." Cuando veas

Si ( nombre de usuario! = nulo

en el Listado 5-4, puedes imaginar que ves

Si ( nombre de usuario no es nada


110 Parte II: Escribir tus propios programas Java
o

Si ( nombre de usuario tiene algún valor

Para saber cómo nombre de usuario no puede tener ningún valor, vea la última fila en la Figura 5-5. Cuando hace
clic en Cancelar en el primer cuadro de diálogo, la computadora maneja nulo a su programa Entonces, en el
Listado 5-4, la variable nombre de usuario se convierte nulo. Las comparaciones nombre de usuario! = nulo comprueba
para asegurarse de que no ha hecho clic en Cancelar en el primer cuadro de diálogo del programa. La
comparación contraseña! = nulo realiza el mismo tipo de verificación para el segundo cuadro de diálogo del
programa. Cuando veas el Si declaración en el Listado 5-4, puede imaginar que ve lo siguiente:

Si ( no presionó Cancelar en el cuadro de diálogo de nombre de usuario y

no presionó Cancelar en el diálogo de contraseña y


(( escribiste "Bburd" en el nombre de usuario diálogo) y

escribiste "pez espada" en el contraseña diálogo)) o ( escribiste "Buñuelo" en el nombre


de usuario diálogo) y escribiste Preakston en el contraseña diálogo))

)
)

En el Listado 5-4, las comparaciones nombre de usuario! = nulo y contraseña! = nulo


No son opcionales. Si olvida incluirlos y hace clic en Cancelar cuando se ejecuta el programa, obtendrá
un mensaje desagradable Excepción de puntero nulo mensaje, y el programa se viene abajo ante tus ojos.
La palabra nulo representa nada, y en Java no puedes comparar nada a una cuerda como "Bburd" o " pez
espada". En el Listado 5-4, el propósito de la comparación nombre de usuario! = nulo es evitar que Java se
mueva para verificar username.equals ("bburd") cada vez que haga clic en Cancelar. Sin este preliminar nombre
de usuario! = nulo prueba, estás cortejando problemas.

El último par de nulo s en el Listado 5-4 son diferentes de los demás. En el codigo JOptionPane.showMessageDialog
(nulo, "Estás dentro"),
la palabra nulo significa "no hay otro cuadro de diálogo". En particular, la llamada
showMessageDialog le dice a Java que aparezca un nuevo cuadro de diálogo, y la palabra
nulo indica que el nuevo cuadro de diálogo no surge de ningún cuadro de diálogo existente. De una
forma u otra, Java insiste en que diga algo sobre el origen del cuadro de diálogo recién aparecido.
(Por alguna razón, Java no insiste en que especifique el origen de la showInputDialog caja. ¡Vaya
figura!) De todos modos, en el Listado 5-4, tener un showMessageDialog el cuadro emergente de la
nada es bastante útil.
Capítulo 5: Control del flujo del programa con declaraciones de toma de decisiones 111

(Condiciones entre paréntesis)


¡Vigila esos paréntesis! Cuando combina condiciones con operadores lógicos, es mejor desperdiciar el
esfuerzo de tipeo y agregar análisis innecesarios que aumentar su resultado utilizando muy pocos
paréntesis. Tomemos, por ejemplo, la expresión

2 <5 || 100 <6 y & 27 <1

Al leer mal esta expresión, puede concluir que la expresión es falsa. Es decir, podría leer erróneamente la
expresión como significado ( una cosa u otra) && 27 <1. Como 27 <1 es falso, concluiría que toda la
expresión es falsa. El hecho es que, en Java, cualquier operador && se evalúa antes que cualquier ||
operador. Entonces la expresión realmente pregunta si 2 <5 || ( una cosa u otra). Como 2 <5 es verdadero,
toda la expresión es verdadera.

Para cambiar el valor de la expresión de cierto a falso, Puedes poner las dos primeras
comparaciones de la expresión entre paréntesis, así:

(2 <5 || 100 <6) && 27 <1

Java's || el operador es inclusivo. Esto significa que obtienes un cierto valor siempre que lo que está en el lado
izquierdo es verdadero, lo que está en el lado derecho es verdadero, o ambas cosas son verdaderas. Por
ejemplo, la expresión 2 <10 || 20 <30 es verdad.

En Java, no puede combinar comparaciones como lo hace en inglés ordinario. En inglés, puede
decir: "Tendremos entre tres y diez personas en la mesa". Pero en Java, aparece un mensaje de
error si escribe
3 <= personas <= 10. Para hacer esta comparación, necesitas algo como 3 <= personas &&
personas <= 10.

En el Listado 5-4, el Si La condición de la declaración tiene más de una docena de paréntesis. ¿Qué
sucede si omites dos de ellos?

Si ( nombre de usuario! = nulo &&

contraseña! = nulo &&


// paréntesis abierto omitido
(username.equals ("bburd") && password.equals ("pez
espada")) || (username.equals ("hritter") &&
password.equals ("preakston"))

// cerrar paréntesis omitido


)
112 Parte II: Escribir tus propios programas Java
Java intenta interpretar sus deseos agrupando todo antes del "o" (el operador ||):

Si ( nombre de usuario! = nulo &&

contraseña! = nulo && (username.equals ("bburd") &&


password.equals ("pez espada"))

||

(username.equals ("hritter") && password.equals


("preakston"))
)

Cuando el usuario hace clic en Cancelar y nombre de usuario es nulo, Java dice: "¡Está bien! Las cosas antes del || el
operador es falso, pero tal vez las cosas después de || El operador es verdadero. Comprobaré las cosas después del ||
operador para averiguar si es verdad ". (Java a menudo habla consigo mismo. Los psiquiatras están monitoreando esta
situación).

De todos modos, cuando Java finalmente comprueba username.equals ("hritter"),


su programa aborta con un feo Excepción de puntero nulo mensaje. Has enfadado a Java al
intentar postularte. es igual a un nulo nombre de usuario
(Los psiquiatras han recomendado sesiones de manejo de la ira para Java, pero el plan de seguro
de Java se niega a pagar las sesiones).

Construyendo un nido
¿Has visto esas lindas muñecas rusas de matrioska? Abre uno, y otro está adentro. Abra el segundo,
y un tercero está dentro de él. Puedes hacer lo mismo con Java's Si declaraciones. (¡Habla de
diversión!) El Listado 5-5 te muestra cómo.

Listado 5-5: Anidado si declaraciones

importar estática java.lang.System.out; import


java.util.Scanner;

Autenticador de clase2 {
Capítulo 5: Control del flujo del programa con declaraciones de toma de decisiones 113

public static void main (String args []) {


Teclado del escáner = nuevo escáner (System.in);

out.print ("Nombre de usuario:"); Cadena nombre de usuario


= keyboard.next ();

if (username.equals ("bburd")) {
out.print ("Contraseña:"); Cadena contraseña =
keyboard.next ();

if (contraseña.equals ("pez espada")) {


out.println ("Estás dentro"); } más {

out.println ("Contraseña incorrecta"); }

} más {
out.println ("Usuario desconocido"); }}}

La Figura 5-6 muestra varias ejecuciones del código en el Listado 5-5. La idea principal es que para iniciar
sesión, debe pasar dos pruebas. (En otras palabras, dos condiciones deben ser verdaderas). La primera
condición prueba un nombre de usuario válido; la segunda condición prueba la contraseña correcta. Si pasa la
primera prueba (la prueba de nombre de usuario), pasa directamente a otra Si declaración que realiza una
segunda prueba (la prueba de contraseña). Si no pasa la primera prueba, nunca llega a la segunda prueba. La
Figura 5-7 muestra el plan general.

Figura 5-6:
Tres ejecuciones

del código en el

Listado 5-5.
114 Parte II: Escribir tus propios programas Java

Hace nombre de usuario


igual " bburd "?

No si

Usuario
desconocido Hace contraseña
igual " pez espada"?

No si

Figura 5-7:
No intentes

comer con este


Contraseña Estas en
incorrecta
tenedor.

El código en el Listado 5-5 hace un buen trabajo con anidado Si declaraciones, pero hace un trabajo terrible con
la autenticación de usuarios del mundo real. Primero, nunca muestre una contraseña a simple vista (sin
asteriscos para enmascarar la contraseña). En segundo lugar, no maneje las contraseñas sin cifrarlas. En tercer
lugar, no le digas al usuario malicioso cuál de las dos palabras (el nombre de usuario o la contraseña) se
ingresó incorrectamente. Cuarto. . . Bueno, podría seguir y seguir. El código en el Listado 5-5 simplemente no
pretende ilustrar buenas prácticas de nombre de usuario / contraseña.

Elegir entre muchas alternativas (declaraciones


de cambio de Java)
Soy el primero en admitir que odio tomar decisiones. Si las cosas salen mal, prefiero que el problema sea
culpa de otra persona. Escribiendo las secciones anteriores
Capítulo 5: Control del flujo del programa con declaraciones de toma de decisiones 115
(al tomar decisiones con Java's Si declaración) me dejó sin relleno. Es por eso que mi mente se aturde
cuando comienzo esta sección sobre elegir entre muchas alternativas. ¡Qué alivio tener esa confesión
fuera del camino!

Su declaración de cambio básica


Ahora es el momento de explorar situaciones en las que tiene una decisión con muchas ramas. Tomemos,
por ejemplo, la popular canción de la fogata "Al's All Wet". (Para una revisión de las letras, vea la barra
lateral.) Está ansioso por escribir un código que imprima las letras de esta canción. Afortunadamente, no
tiene que escribir todas las palabras una y otra vez. En cambio, puedes aprovechar la repetición de la letra.

Un programa completo para mostrar la letra de "Al's All Wet" no llegará hasta el Capítulo 6. Mientras
tanto, suponga que tiene una variable llamada verso.
El valor de verso es 1, 2, 3, o 4, dependiendo del verso de "Al's All Wet" que intentas imprimir. Podrías tener
un montón grande y torpe de Si declaraciones que verifican cada posible verso número.

"Al está todo mojado"


Cantada con la melodía de "Gentille Alouette": Al está todo mojado. Oh, ¿por qué está todo mojado Al? Oh, Al

está todo mojado porque está parado bajo la lluvia. Por qué
Al está todo mojado. Oh, ¿por qué está todo mojado Al? Oh, Al
es al fuera en ¿la lluvia?
está todo mojado porque está parado bajo la lluvia. Por qué
Porque esto es lo ultimo estribillo.
es al fuera en ¿la lluvia?
Último abstenerse último abstenerse
Eso es porque no tiene cerebro. No tiene cerebro
Él es un dolor, él es un dolor,
no tiene cerebro
No tiene cerebro no tiene cerebro
En el lluvia, en el lluvia.
En el lluvia, en el lluvia.
Ohhhhhhhh . . .
Ohhhhhhhh . . .
Al está todo mojado. Oh, ¿por qué está todo mojado Al? Oh, Al
Al está todo mojado. Oh, ¿por qué está todo mojado Al? Oh, Al
está todo mojado porque está parado bajo la lluvia. Por qué
está todo mojado porque está parado bajo la lluvia.
es al fuera en ¿la lluvia?
Eso es porque él Es un dolor. - Harriet ritter y barry burd
Él es un dolor, él es un dolor,
No tiene cerebro no tiene cerebro
En el lluvia, en el lluvia.
Ohhhhhhhh . . .
116 Parte II: Escribir tus propios programas Java

if (verso == 1) {
out.println ("Eso es porque no tiene cerebro");
} if (verso == 2) {

out.println ("Eso es porque él es un dolor");


} if (verso == 3) {

out.println ("Porque este es el último estribillo"); }

Pero ese enfoque parece un desperdicio. ¿Por qué no crear una declaración que verifique el valor de verso
solo una vez y luego toma una acción basada en el valor que encuentra? Afortunadamente, tal afirmación
existe. Se llama un cambiar declaración. El listado 5-6 tiene un ejemplo de cambiar declaración.

Listado 5-6: Una declaración de cambio

importar estática java.lang.System.out; import


java.util.Scanner;

clase JustSwitchIt {

public static void main (String args []) {


Teclado del escáner = nuevo escáner (System.in); out.print ("¿Qué
verso?"); int verso = keyboard.nextInt ();

switch (verso) {caso 1:

out.println ("Eso es porque no tiene cerebro"); descanso; caso 2:

out.println ("Eso es porque él es un dolor"); descanso; caso 3:

out.println ("Porque este es el último estribillo"); descanso; defecto:

out.println ("No hay tal verso. Inténtalo de nuevo"); descanso; }

out.println ("Ohhhhhhhh...."); }}
Capítulo 5: Control del flujo del programa con declaraciones de toma de decisiones 117
La Figura 5-8 muestra dos ejecuciones del programa en el Listado 5-6. (La Figura 5-9 ilustra la idea general
del programa). Primero, el usuario escribe un número, como el número 2. Luego, la ejecución del programa
llega a la parte superior del cambiar declaración. La computadora verifica el valor de verso variable. Cuando la
computadora determina que verso el valor de la variable es 2, la computadora verifica cada caso del cambiar declaración.
El valor 2 no coincide con el caso superior, por lo que la computadora pasa a la mitad de los tres casos. El
valor publicado para el caso medio (el número 2) coincide con el valor de verso variable, por lo que la
computadora ejecuta las declaraciones que vienen inmediatamente después del caso 2. Estas dos
declaraciones son

out.println ("Eso es porque él es un dolor"); descanso;

La primera de las dos declaraciones muestra la línea Eso es porque es un dolor. en la pantalla. La
segunda declaración se llama descanso declaración. (¡Qué sorpresa!) Cuando la computadora encuentra
un descanso declaración, la computadora salta de lo que sea cambiar la declaración está en. Entonces, en
el Listado 5-6, la computadora salta más allá del caso que mostraría Porque este es el último estribillo. De
hecho, la computadora salta de todo cambiar

declaración y va directamente a la declaración justo después del final de la cambiar


declaración. La computadora muestra Ohhhhhhhh . . . porque eso es lo que dice la declaración después de cambiar
declaración le dice a la computadora que haga.

Figura 5-8:
Ejecutando
el código del
Listado 5-6 dos
veces.

Si el usuario molesto pregunta por el versículo 6, la computadora responde descartando los casos
anteriores 1, 2 y 3. En cambio, la computadora hace lo predeterminado. Por defecto, la computadora
muestra No hay tal verso. Inténtalo de nuevo, y luego sale de la cambiar declaración. Después de que la
computadora está fuera de cambiar declaración, la computadora muestra Ohhhhhhhh . . .
118 Parte II: Escribir tus propios programas Java

Cual verso ¿Es esto?

1 2 3 otro

H Yo L Inténtalo

Figura 5-9: asnobrain sapain astrefrain de nuevo

La gran

bifurcación en el
Oh hhhhhhh . . .
código del Listado 5-6.

Realmente no necesitas poner un descanso al final de un cambiar declaración. En el Listado 5-6, el


último rotura ( el descanso eso es parte del valor predeterminado) es solo por el orden general.

Romper o no romper
En la vida de cada programador de Java, llega un momento en que él o ella olvida usar descanso declaraciones.
Al principio, la salida resultante es confusa, pero luego el programador recuerda la falla. El termino caer a
través describe lo que sucede cuando finaliza un caso sin un descanso declaración. Lo que sucede es que
la ejecución del código cae hasta el siguiente caso en línea. La ejecución sigue cayendo hasta que
finalmente alcanzas un descanso declaración o el final de la totalidad cambiar declaración.

Por lo general, cuando estás usando un cambiar declaración, no quieres caer, así que pimienta descanso declaraciones
a lo largo del cambiar declaraciones. Pero, ocasionalmente, la falla es justo lo que necesita. Tomemos,
por ejemplo, la canción "Al's All Wet". (Las letras con clase se muestran en la barra lateral con el
Capítulo 5: Control del flujo del programa con declaraciones de toma de decisiones 119
nombre de la canción.) Cada verso de "Al's All Wet" agrega nuevas líneas además de las líneas de los
versos anteriores. Esta situación (acumulando líneas de un verso a otro) clama por un cambiar declaración
con fall-through. El listado 5-7 demuestra la idea.

Listado 5-7: Una declaración de cambio con Fall-Through

importar estática java.lang.System.out; import


java.util.Scanner;

clase FallingForYou {

public static void main (String args []) {


Teclado del escáner = nuevo escáner (System.in); out.print ("¿Qué
verso?"); int verso = keyboard.nextInt ();

switch (verso) {caso 3:

out.print ("Último estribillo"); out.println ("último


estribillo"); caso 2:

out.print ("Él es un dolor"); out.println ("es un


dolor"); caso 1:

out.print ("No tiene cerebro"); out.println ("no tiene


cerebro"); }

out.println ("En la lluvia, en la lluvia"); out.println ("Ohhhhhhhh ...");


out.println (); }}

La Figura 5-10 muestra varias ejecuciones del programa en el Listado 5-7. Porque el interruptor no tiene descanso
declaraciones en él, la caída ocurre por todas partes. Por ejemplo, cuando el usuario selecciona el versículo 2,
la computadora ejecuta las dos declaraciones en el caso 2:

out.print ("Él es un dolor"); out.println ("es un


dolor");
120 Parte II: Escribir tus propios programas Java
Luego, la computadora avanza para ejecutar las dos declaraciones en el caso 1:

out.print ("No tiene cerebro"); out.println ("no tiene


cerebro");

Eso es bueno, porque el segundo verso de la canción tiene todas estas líneas.

Figura 5-10:
Ejecutando

el código del

Listado 5-7

cuatro veces.

Observe lo que sucede cuando el usuario solicita el versículo 6. El cambiar La declaración en el Listado 5-7 no tiene caso 6 y no
tiene valor predeterminado, por lo que ninguna de las acciones dentro del
cambiar declaración se ejecutan. Aun así, con declaraciones que imprimen En la lluvia, en la lluvia y Ohhhhhhhh
. . justo después del cambiar declaración, la computadora muestra algo cuando el usuario solicita el
versículo 6.

A lo largo viene Java 7


En los listados 5-6 y 5-7, la variable verso ( un En t valor) dirige el cambiar
declaración a un caso u otro. Un En t valor dentro de un cambiar La declaración funciona en cualquier versión de
Java, antigua o nueva. (Para esa materia, carbonizarse valores y algunos otros tipos de valores han funcionado
en Java cambiar declaraciones desde que Java era un lenguaje completamente nuevo).

Pero si vive en el carril rápido y está utilizando Java 7, puede configurarlo para que el caso se ejecute
en un cambiar declaración depende del valor de
Capítulo 5: Control del flujo del programa con declaraciones de toma de decisiones 121
Una cadena particular. El listado 5-8 ilustra el uso de cadenas en cambiar declaraciones. La Figura 5-11
muestra una ejecución del código en el Listado 5-8.

Listado 5-8: Una declaración de cambio con una cadena

importar estática java.lang.System.out; import


java.util.Scanner;

clase SwitchIt7 {

public static void main (String args []) {


Teclado del escáner = nuevo escáner (System.in); out.print ("¿Qué verso (uno, dos
o tres)?");
String verse = keyboard.next ();

interruptor ( verso) {
caso "uno":
out.println ("Eso es porque no tiene cerebro"); descanso; caso "dos":

out.println ("Eso es porque él es un dolor"); descanso; caso "Tres":

out.println ("Porque este es el último estribillo"); descanso; defecto:

out.println ("No hay tal verso. Inténtalo de nuevo"); descanso; }

out.println ("Ohhhhhhhh...."); }}

Figura 5-11:
Ejecutando

el código del

Listado 5-8.

Si está utilizando Java 6, o una versión anterior de Java, entonces no puede hacer que una cadena decida el destino de
un cambiar declaración.
122 Parte II: Escribir tus propios programas Java

S-ar putea să vă placă și