0% encontró este documento útil (0 votos)
2 vistas

Java Programming 1-100 ESP

Java es un lenguaje de programación ampliamente utilizado en diversas aplicaciones, desde software de escritorio hasta sistemas empresariales y dispositivos móviles. Originalmente desarrollado por Sun Microsystems como un proyecto para un asistente digital, Java ganó popularidad en la década de 1990 gracias a su capacidad para ejecutar programas en la web. Con características como portabilidad, robustez y seguridad, Java se ha consolidado como una tecnología clave en el desarrollo de software y es de uso gratuito para fines de desarrollo.

Cargado por

digranada8
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
2 vistas

Java Programming 1-100 ESP

Java es un lenguaje de programación ampliamente utilizado en diversas aplicaciones, desde software de escritorio hasta sistemas empresariales y dispositivos móviles. Originalmente desarrollado por Sun Microsystems como un proyecto para un asistente digital, Java ganó popularidad en la década de 1990 gracias a su capacidad para ejecutar programas en la web. Con características como portabilidad, robustez y seguridad, Java se ha consolidado como una tecnología clave en el desarrollo de software y es de uso gratuito para fines de desarrollo.

Cargado por

digranada8
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 114

El Java Historia

Java está bien establecido como uno de los principales lenguajes de programación
del mundo , utilizado en todo, desde aplicaciones de escritorio hasta
aplicaciones alojadas en la web y sistemas empresariales, e integrado en
dispositivos como teléfonos móviles y reproductores de Blu-ray. Su máquina
virtual (una característica central de la plataforma de ejecución de Java, que
exploraremos más adelante) también admite una familia de lenguajes
relacionados, incluidos Scala, Groovy y versiones especializadas de Ruby y
Python. Sin embargo, sus comienzos fueron relativamente humildes y oscuro,
hasta él vino a Atención más amplia a través de el Web en 1995. En un año se
había convertido en " la próxima gran novedad ". en software. Interés en el
lenguaje era bastante notable, en vista de eso él solo existió en beta prueba En
muchos sentidos, se trataba de ser el producto adecuado en el momento adecuado,
y su popularidad se basó en la explosión de interés por Internet y la World Wide
Web a mediados de los años 90.

1.1 A Breve Historia de Java

Java Nunca tuvo la intención de sea absolutamente qué él se convirtió. creció de a


proyecto en Sun Microsystems fabricará el “ Star7 ” , un tipo especial de
asistente digital personal (PDA) que se diseñó para controlar todos los dispositivos
electrónicos del hogar. a trabajar, él necesario a ser construido con a idioma eso
podría ser usado en Varias piezas de hardware, desde televisores hasta tostadoras.
El lenguaje que impulsaba el Star7 se llamaba “ Oak ” (el nombre proviene de un
árbol que se encontraba afuera de la ventana de su diseñador principal, James
Gosling), pero intenta vender el La tecnología no se concretó para varios clientes
potenciales, como los fabricantes de decodificadores de televisión digital.
Finalmente, se decidió dejar de lado el desarrollo del hardware y promover el
lenguaje en sí. Internet como a herramienta para siempre que en línea multimedia.
Este condujo a desarrollo de un programa que se ejecutaría en Internet utilizando
HTML (lenguaje de marcado de hipertexto) páginas eso proporcionó el base para
el Mundo Ancho Web, cual tenía comenzado a lograr generalizado popularidad en
1993 pendiente a “ Mosaico ” , el primero gráfico web
© Saltador Naturaleza Suiza Estado 2020 1
D. Parsons, Foundational Java , Textos en Ciencias de la
Computación, https://doi.org/10.1007/978-3-030-54518-5_1
2 1 The Java
Story
Navegador. Este programa era el navegador web “ WebRunner ” , posteriormente
rebautizado como “ Hot-Java ” . A diferencia de los demás navegadores que
existían en ese momento, HotJava era capaz de ejecutar pequeños programas Java
(conocidos como “ applets ” ) dentro de su ventana, añadiendo contenido
dinámico. a el texto en gran parte estático y imágenes eso tenía previamente sido
posible. El primer subprograma que apareció mostraba “ Duke ” (la mascota de
Java, una especie de diente extraído con una cara roja) nariz) ondulación,
estableciendo a fuerte y permanencia imagen de Java como a idioma para escribir
páginas web animadas, aunque en la práctica era mucho más que eso. ¿Y el
nombre de Java? Cambió de Oak solo porque ya existía una marca registrada con
ese nombre. Java recibe su nombre del fuerte café Java popular en los Estados
Unidos, aunque se consideraron muchos otros nombres, incluidos “ Neon ” , “
Lyric ” , “ Pepper ” y “ Silk ” .
Desde aquellos primeros días, Java ha madurado hasta convertirse en un
lenguaje de gran potencia industrial, con diferentes ediciones para el desarrollo de
dispositivos portátiles, servidores y de escritorio, y una enorme cantidad de
interfaces de programación de aplicaciones (API) para diferentes tipos de
aplicaciones. Desde sus humildes comienzos, se ha convertido en una de las
tecnologías clave del desarrollo de software global. Desde que Oracle adquirió
Sun Microsystems en 2010, Java se ha convertido en una tecnología de Oracle,
pero sigue siendo de uso gratuito para fines de desarrollo y también está
disponible como un proyecto de código abierto, el OpenJDK.

1.2 Características de Java

Java es en muchos maneras a conservador idioma en eso él era construido en el


éxitos de sus predecesores, al tiempo que intentaba superar muchas de sus
limitaciones y problemas. Fue diseñado para ser " compatible con la jerga ". con
un conjunto de criterios que resumen lo que era “ bueno ” para un lenguaje de
programación moderno a mediados de la década de 1990. Sus diseñadores
razonaron que un lenguaje así debería ser

• Simple
• Orientado a objetos
• Repartido
• Robusto
• Seguro
• Neutral en cuanto a la arquitectura
• Portátil
• De alto rendimiento
• Multiproceso
• Dinámica

Tal vez sea un tributo al éxito de Java que muchas de estas características, que
eran de vanguardia en ese momento, ahora son requisitos de facto para muchos
programas. idiomas. Qué Sigue es a breve describir de cada de estos
características.
1.2 Characteristics of 3
Java
1.2.1 Simple

Nadie quiere programar en un lenguaje que haga la vida más difícil de lo que ya
es. James Gosling dijo que Java es “ C++ sin cuchillos, pistolas ni garrotes ” . C+
+, el lenguaje desarrollado por BjarneStroustrup en los años 80 como una
extensión orientada a objetos del lenguaje de programación C, es muy popular y
potente. pero tiene muchos características eso, como armas, son muy peligroso en
el Manos equivocadas (quizás cualquier mano). Java tiene mucho en común con
C++, pero una buena parte de brazos limitación tiene estado aplicado. Uno
importante Simplificación en Java es el forma Esa memoria se gestiona mediante
procesos en gran medida automáticos en lugar de requerir que el programador lo
haga. ¡Sin embargo, la simplicidad es un término relativo!

1.2.2 Orientado a objetos

El orientado a objetos acercarse a programación tiene convertirse entonces común


eso a usar Un lenguaje no orientado a objetos es ahora la excepción, en lugar de la
regla (aunque tiene a ser anotado eso funcional programación tiene convertirse
popular en reciente años, Por lo tanto, se han realizado algunas adiciones a Java
para incluir también algunos aspectos de programación funcional). Sin embargo,
este no era el caso a principios de los años 1990, cuando los dos principales
lenguajes orientados a objetos, C++ y Smalltalk, todavía se consideraban un
enfoque muy nuevo para la programación. En un lenguaje orientado a objetos, en
lugar de tener datos en uno mano y procesos en el otro, el dos son “ encapsulado ”
juntos Proporcionar objetos que tengan tanto estado (datos) como comportamiento
(procesos). Al unir ambos, facilitamos la modelización del comportamiento de las
cosas del mundo real que intentamos reflejar en el software. Gran parte de este
libro se ocupa de los conceptos y la aplicación de la orientación a objetos.

1.2.3 Repartido

Si computación es cualquier cosa estos días entonces él es repartido, desde


mayoría computadoras están conectados a a red y probablemente a el Internet.
Allá es a tendencia hacia Hacer que la máquina que está en el escritorio (o en la
mano) sea menos importante y que la red a la que está conectada sea más
importante, al proporcionar software y otros recursos a través de la red (o la nube)
en lugar de almacenar todo localmente en un disco duro. Para empresas este
marcas a lote de sentido en términos de control, economía y organización. Por lo
tanto, cualquier lenguaje nuevo debe proporcionar las facilidades para escribir
sistemas donde los programas se distribuyan entre muchas computadoras. Java
está diseñado para la programación en red y puede trabajar fácilmente con
protocolos comunes de Internet como HTTP (Hypertext Transferir Protocolo) y
FTP (Archivo Transferir Protocolo), siempre que bibliotecas para flujos de datos
de red, servicios web y varios otros aspectos de la computación distribuida.
4 1 The Java
Story
1.2.4 Robusto

Un programa robusto es aquel que no se comporta de forma impredecible ni falla


debido a un error del programador. Al asumir automáticamente algunas tareas,
como la gestión de la memoria, Java simplifica la tarea del programador, lo que
permite escribir código más robusto. También es muy estricto en cuanto al uso de
los tipos de datos correctos, lo que significa que es difícil corromper
deliberadamente los datos de un programa para, por ejemplo, introducir un virus.
Quizás el aspecto más significativo de Java en términos de robustez es que
elimina el concepto de “ puntero ” del código. Un puntero es un mecanismo para
acceder directamente a la memoria, y muchos lenguajes permiten a un
programador asignar y manipular a bloquear de memoria directamente. A pesar de
este es a poderoso característica, él También es peligroso si no se gestiona
correctamente. Manipular la memoria que no se ha asignado correctamente puede
hacer que un programa se bloquee y no liberar la memoria que sí se ha asignado.
estado terminado con dirige a " memoria Fugas ” dónde a programa poder
eventualmente sin de memoria espacio a correr en. Java tiene solo “ referencias ”
a objetos, no punteros hacia memoria ellos ocupar. Desde programadores no
puedo directamente acceso memoria, No pueden manipularla de forma errónea.
Además, dado que el programador no puede asignar memoria directamente,
tampoco es su responsabilidad liberarla. Esa tarea la realiza por el basura
coleccionista, un aspecto de el Java sistema eso recupera automáticamente la
memoria de los objetos que ya no son necesarios.

1.2.5 Seguro

Además de los errores de programación, los programas son vulnerables al sabotaje


deliberado. Los sistemas de seguridad integrados en Java garantizan que el código,
una vez escrito, no sea fácil de manipular. Esto es especialmente importante para
un lenguaje que se utiliza para escribir programas que se distribuyen ampliamente
en redes.

1.2.6 Arquitectura- Neutral

Uno de el mayoría importante aspectos de Java (tal vez el mayoría importante) es


eso él es una " escritura " una vez, correr en cualquier lugar " idioma. En otro
palabras, él hace no asunto cual tipo de computadora tú escribir Java código en o
correr el resultante programas en. El Los programas se escriben y se ejecutan de la
misma manera. Esto se logra combinando dos enfoques diferentes para convertir
el código fuente del programa en un programa ejecutable. La mayoría de los
lenguajes previo a Java eran cualquiera compilado o interpretado. A compilador
Convierte El código fuente completo de un programa se convierte en un "
ejecutable " , un programa diseñado para ejecutarse dentro de un sistema
operativo específico. Por el contrario, un intérprete convierte el código fuente en
código ejecutable una línea a la vez mientras se ejecuta el programa. Esto es
mucho más lento que ejecutar un programa compilado, pero el mismo fragmento
de código fuente puede ser correr en diferente intérpretes eso son diseñado para
diferente operante sistemas. Desde un interpretado El programa puede solo ser
1.2 Characteristics of 5
Java
correr cuando el intérprete es presente, allí
6 1 The Java
Story
Existe un gasto adicional al utilizar dichos programas: se necesitan dos piezas de
software (el programa y el intérprete) en lugar de sólo una.
Java se basa en ambos enfoques al ser una combinación de un lenguaje
compilado y uno interpretado idioma. El Java compilador hace no convertir el
fuente código en un ejecutable para un entorno específico. Más bien, se compila
en " código de bytes " . Este byte código poder entonces ser correr en cualquier
hardware eso tiene a Java Virtual Máquina (JVM), una pieza de software
relativamente liviana que interpreta el código de bytes para ejecutarse en una
máquina virtual específica. computadora. Para ejemplo, el mismo Java byte código
poder ser correr en a PC con Windows, a Impermeable o a Linux máquina con No
cambios a el original programa. En este De esta manera, la cantidad de
interpretación necesaria se reduce al mínimo absoluto para permitir la mismo byte
código a correr en diferente sistemas (Higo. 1.1 ). El solo condición a este es eso
virtual máquinas para más temprano versiones de Java voluntad no ser capaz a
correr código escrito para más tarde virtual máquinas eso tener adicional
características. Otro cosa a ser consciente Lo que ocurre es que cada plataforma
necesita tener su propia máquina virtual, de modo que existen, por ejemplo,
diferentes máquinas virtuales para Windows, Mac y Linux.

1.2.7 Portátil

Parte de la neutralidad de la arquitectura de Java se basa en definiciones portables


de cuán grandes son las diferentes tipos de datos son. En muchos idiomas, allá es
No específico definición de cuánto almacenamiento ocupa, por ejemplo, un
número entero en relación con otros tipos como “ corto ” o “ largo ” números
enteros. Uno de ellos puede tener 8 bits de longitud en una máquina y 16 bits en
otra. En Java el almacenamiento tamaños de todo tipos de datos son especificado
entonces un entero, Por ejemplo, siempre tiene una longitud de 32 bits. Los tipos
de Java también tienen siempre signo, lo que significa que pueden contener
números positivos y negativos. Sin embargo, existen algunas características que
permiten determinadas operaciones con números enteros sin signo.

Java virtual
machine
Java Java Java
source compiler byte Java virtual
code code machine

Java virtual
machine

Higo. 1.1 El Java virtual máquina permite el mismo byte código a ser correr en diferente
plataformas y sistemas operativos
1.2 Characteristics of 7
Java
1.2.8 alto rendimiento

Ejecución velocidad poder ser a potencial problema para Java. Porque el byte
código tiene a ser interpretado, Java programas generalmente correr más despacio
que equivalente programas escrito en idiomas eso son Compilado. A superar este
problema, varios estrategias tener Se han adoptado. Se han desarrollado
compiladores Just-in-time (JIT) que aceleran la interpretación proceso, y " nativo
" compiladores tener también estado escrito. En otro palabras, La neutralidad de la
arquitectura es sacrificado en orden correr Los programas Más rápidamente. A
compilador nativo produce un ejecutable eso solo obras en a específico tipo de
máquina. Esto puede ser útil para desarrolladores OMS desear a sistema eso
compila y corre rápidamente para fines de prueba o que saben exactamente dónde
se implementarán sus programas. Lo mismo fuente código poder siempre ser
recompilado en portátil byte código usando a Java normal compilador si es
necesario. Otro desarrollo era el " Java Chip " a hardware máquina virtual (a
levemente menos virtual máquina tal vez) construido en a chip. Este es mucho Más
rápido que correr byte código con software, y Java papas fritas poder ser
incorporado en todo tipos de dispositivos electrónicos. Se está trabajando en la mejora
de los compiladores de Java, aunque gran parte de la optimización del código la
realiza la máquina virtual en lugar del compilador.

1.2.9 Multiproceso

Desde muchos sistemas operativos permitir multiproceso (dónde más Más de uno
El proceso puede estar en marcha en cualquier momento), por lo que resulta útil
que un lenguaje pueda aprovechar esta característica. Al incorporar una sintaxis
para subprocesos múltiples en el lenguaje, Java facilita a los programadores la
escritura de programas multiproceso que son más eficientes que los de un solo
subproceso. programas (dónde solo uno cosa poder ser acontecimiento en
cualquier uno Incluso cuando el sistema operativo en sí no es multiproceso, se
puede escribir código Java que utilice múltiples subprocesos de control.

1.2.10 Dinámica

A Java programa poder dinamicamente cambiar el recursos él es usando en tiempo


de ejecución. Este Es útil en un entorno distribuido porque significa que el
programa puede ser flexible en términos de tamaño y comportamiento. También
es fácil escribir programas que utilicen muchos objetos diferentes porque es fácil
que se localicen entre sí en tiempo de ejecución, incluso cuando están en lugares
diferentes.

1.3 El Kit de herramientas JDK y el JRE

Java Instalaciones Adelante dos formas. desarrollar Java software, tú necesidad el


Desarrollo Java Equipo (el (JDK) cual incluye todo el herramientas necesarias
para escribiendo Programas Java, en particular el compilador Java ( “ javac ” ).
8 1 The Java
Story
Sin embargo, si solo necesita ejecutar, bastante que desarrollar, Java programas
entonces tú solo requerir el Java Tiempo de ejecución
1.3 The JDK and the 7
JRE
Entorno Java (JRE), que incluye la máquina virtual Java y las bibliotecas de
soporte, pero no el compilador ni otras herramientas de desarrollo. Ambos tipos de
descargas están disponibles públicamente. disponible de el Oráculo Java sitio web
(y a través de el OpenJDK), pero Para utilizar este libro, debe tener el JDK
completo. Si está utilizando un programa de desarrollo integrado de Java
Ambiente (IDE), entonces el necesario herramientas puede ya ser incluido en eso
solicitud, pero a usar el Eclipse IDE, como descrito en este libro, a Se debe
instalar un JDK separado.

1.3.1 Java Versiones

Java apareció por primera vez para el consumo público como versión 1.0 en 1995.
Hubo varias modificaciones menores antes de su primera revisión importante a
Java 1.1 en 1996. Quizás el cambio más significativo entre estas dos versiones fue
el mecanismo de manejo de eventos para las interfaces de usuario. Los eventos
son típicamente cosas que el usuario hace semejante como prensado a botón con el
ratón o Seleccionando un artículo de a menú y el forma este era manejado en
versión 1.0 era muy en flexible , entonces importante Se realizaron mejoras con
la versión 1.1. Java 1.2 (introducida en 1998) realizó cambios más significativos,
incluida la introducción del marco de colecciones (una biblioteca de objetos).
basado en datos estructuras eso poder contener otro objetos), y el original La
biblioteca de interfaz de usuario, Abstract Windowing Toolkit (AWT), se
convirtió en parte de la Más grande y más poderoso Java Base Clases, incluido el
Balancearse Bibliotecas GUI. En este punto, Java también se dividió en tres
ediciones (como se describe a continuación). sección). Versión 1.3 en 2000
principalmente enfocado en actualizaciones a existente Java no solo agregó
muchas características nuevas, sino que también mejoró considerablemente el
soporte de sonido. La versión 1.4 de 2002 se centró principalmente en mejoras de
rendimiento y seguridad, pero también introdujo soporte para procesamiento
XML, las bibliotecas NIO (nueva entrada/salida) para un manejo más eficiente de
IO, incluida la comunicación por socket de red, y mejoras en muchas otras
bibliotecas existentes.
La versión 5.0 de Java en 2004 fue una importante actualización de Java,
introduciendo varias características importantes nuevo características. En este
punto, el versión numeración también cambió en estilo, así que eso en suma a el
interno versión número (versión 1.5) allá era un versión externa número, 5.0.
Cínicos Podría argumentar que el momento y el contenido de Esta actualización
de Java fue una consecuencia de la introducción por parte de Microsoft de su
nuevo lenguaje C#, que también tenía a número de estos nuevo características. Sin
embargo, muchos de a ellos, semejante como Se han desarrollado genéricos (que
permiten especificar el tipo de objetos de una colección). en el fondo para alguno
años. En suma a genéricos, importante Las nuevas características de Java 5
incluyen anotaciones, que facilitan el trabajo con aplicaciones. marcos semejante
como el JUnit prueba estructura, y autoboxeo, cual facilita la colocación de tipos
de datos simples en una colección Java. Java 6 (2007) vio algunas características
del lenguaje que habían estado previamente disponibles como bibliotecas externas,
como servicios web y Java a XML Binding, integradas en la distribución estándar
de Java. La actualización 10 de Java 6 fue una actualización importante en
términos de cambios en el JRE, lo que hizo mucho más fácil distribuir
8 1 The Java
Story
aplicaciones Java al reducir la huella mínima del JRE implementado.
1.3 The JDK and the 9
JRE
Java pasó a ser de código abierto en 2006, lo que supuso un cambio
significativo en el enfoque de Sun Microsystems, que hasta ese momento había
tenido el control total sobre el desarrollo del lenguaje Java. Otro cambio
significativo se produjo en 2010, cuando Sol Microsistemas era adquirido por
Oráculo Corporación. El primero La versión principal de Java entregada bajo la
propiedad de Oracle fue la versión 7 en 2011, aunque varias características
originalmente planificado para Java 7 eran eventualmente diferido hasta Java 8.
Paralelamente a la versión Oracle de Java, la Comunidad OpenJDK también puso
a disposición su versión de Java 7.
Java 8 fue una actualización bastante importante del lenguaje Java,
particularmente en su respuesta a la creciente popularidad de la programación
funcional con la introducción de expresiones lambda. Este estilo de programación
también fue la base de algunas ideas interesantes. actualizaciones a el fecha y
tiempo Asignación de funciones. Oráculo introducido Largo Término Soporte
(LTS) para Java 8, cual quiso decir eso muchos Organizaciones permaneció
usando Java 8 para a lo largo de tiempo (LTS apoyo dura 8 años) en cambio de
Actualizando a cada nuevo lanzamiento posterior, particularmente porque el
cronograma de lanzamiento cambió significativamente después del lanzamiento de
Java 9.
Quizás el principal cambio que llegó con Java 9 en 2017 fue la introducción de
módulos (Proyecto Jigsaw), un cambio importante en la forma en que los sistemas
grandes podían modularizarse. Este es particularmente útil cuando añadiendo
características de más nuevo versiones de Java a sistemas heredados.
Cambios en Java 10 (Marzo 2018) eran principalmente detrás el escenas
mejoras a el plataforma, y impactado pequeño en en el codificación nivel, pero
tipo inferencia para Las variables locales permitieron algunos nuevos estilos de
codificación. Sin embargo, la introducción de la variable “ var ” palabra clave a
Opcionalmente reemplazar el declarado datos tipo de local variables hizo no
implica eso cualquier subyacente cambios eran ser hecho a el tipo sistema. De A
partir de Java 10, el cronograma de lanzamiento cambió de modo que en lugar de
tener lanzamientos importantes cada pocos años, con punto liberar actualizaciones
en entre, Oráculo Java versiones seria liberado cada 6 meses (en Marzo y
Septiembre cada año), con LTS Versiones cada 3 años. Las actualizaciones del
Open JDK suelen realizarse cada 6 meses.
Java 11, una LTS lanzada en septiembre de 2018, fue quizás la más notable por
sus cambios. en basado en la web programación, con el introducción de el Cliente
HTTP y La eliminación de las antiguas funciones Applet y Web Start que ya no
eran componentes web viables. pendiente a seguridad asuntos. Aquellos regiones
de el Java Empresa Edición (Java EE) que habían estado incluidos con el JDK
durante algún tiempo también fueron eliminados.
Java 12 (marzo de 2019) introdujo una versión preliminar de una expresión “
switch ” , que proporciona una alternativa a la expresión “ switch ” existente.
Declaración. Las características de vista previa se introdujeron en Java para
provocar comentarios de los desarrolladores basados en el uso en el mundo real.
Estos comentarios pueden hacer que se vuelva permanente en una futura versión
de Java SE Platform o que se elimine. Casi al mismo tiempo que se lanzó Java 12,
Oracle cambió sus acuerdos de licencia y requirió que algunos tipos de usuarios
pagaran una tarifa de suscripción para usar la versión de Oracle de Java. Sin
embargo, Oracle Java sigue siendo gratuito para fines de desarrollo y OpenJDK
continúa brindando una opción de código abierto gratuita.
1 1 The Java
0 Story
Para Java 13 (septiembre de 2019), quizás el cambio más obvio desde un punto
de vista de programación perspectiva era a avance de Texto Bloques, cual permite
multiline instrumentos de cuerda
1.3 The JDK and the 1
JRE 1
Sin caracteres de escape. También se revisó la expresión switch, actualizando los
cambios de la vista previa en Java 12. En segundo plano, el recolector de basura y
las API de Socket recibieron actualizaciones significativas en sus
implementaciones.
Java 14 (marzo de 2020) incorporó algunos caracteres de escape adicionales a
la vista previa de los bloques de texto, confirmó la sintaxis de la expresión switch
e introdujo un mensaje NullPointerException más informativo, entre otras cosas.
Quizás lo más interesante Nueva característica era un avance de “ registros ” Lo
que simplifica la Creación de clases que solo contienen campos de datos a través
de la clase java.lang.Record. Un registro se encarga automáticamente de los
métodos estándar, como constructores, descriptores de acceso, “ equals ” , “
hashCode ” y “ toString ” .
Java 15 (Septiembre 2020) principalmente enfocado en mejoras a alguno
implementaciones subyacentes, pero también incluido a segundo avance de
cambios a el Operador “ instanceof ” , que facilita la prueba del tipo de un objeto
en el contexto de expresiones más grandes, así como bloques de texto que salen
del modo de vista previa al estado permanente.
Todo el código de este libro se ha probado con Oracle Java versión 14. Algunos
de los ejemplos más sencillos seguirán funcionando con versiones mucho más
anteriores. Sin embargo, en el texto se indica que los ejemplos de sintaxis
dependen de una versión mínima de Java para ejecutarse.

1.4 Java API

Además de la sintaxis básica de Java, que consta de las palabras clave básicas y
algunas expresiones fundamentales, bibliotecas, allá son también muchos Java
solicitud programación interfaces (API). Estos proporcionar bibliotecas a permitir
el desarrollo de especializado aplicaciones como programación de Internet e
interfaces de cliente enriquecidas (usando Swing o Java FX). Algunas de el más
especializado bibliotecas (a menudo conocido como el Java extensiones) son No
se proporciona con la edición estándar del JDK. En la introducción del JDK 1.2 en
1998, Sun clasificó las tecnologías Java dentro de la “ Plataforma Java 2 ” ,
organizando la gran cantidad de nuevas características que se estaban
introduciendo al proporcionar diferentes versiones para diferentes tipos de
aplicaciones : Java 2 Standard Edition (J2SE), Java 2 Micro Edition (J2ME) y
Java 2 Enterprise Edition (J2EE). En este punto, el “ JDK ” El prefijo para el Kit
de desarrollo de Java fue eliminado en favor de “ J2SE ” . Con el lanzamiento de
la versión 5 en 2004, el “ 2 ” se abandonó y estas ediciones se conocieron
entonces como Java Estándar Edición, (Java ES), Java Empresa Edición (Java
EE.UU.), y Java Micro Edition (Java ME). Todas las bibliotecas básicas, junto con
las bibliotecas necesarias para el desarrollo de aplicaciones de escritorio, se
encuentran en la edición estándar (Java SE), la versión que utilizamos en este
libro. Las que se aplican específicamente a dispositivos pequeños o integrados y a
la Internet de las cosas se proporcionan con Java Micro Edition (Java ME),
mientras que las que se relacionan con la programación cliente-servidor (servlets,
JavaServer Páginas, Empresa Los JavaBeans, etc.) son parte de el Java Empresa
Edición (Java EE.UU.), cual convertirse Jacarta Empresa Edición (Yakarta)
EE.UU.) en 2018. Mayoría de
1 1 The Java
2 Story
Estas bibliotecas están más allá del alcance de este libro, pero proporcionan
muchas funciones de programación potentes para varios tipos de aplicaciones de
software.

1.5 Resumen

Java es a Lenguaje maduro y popular eso es utilizado en todo el mundo para Todo
tipo de aplicaciones. A programa exitosamente en Java, nosotros necesidad
a Entender la orientación a objetos conceptos y entonces aplicar a ellos a Java
objetos, cual tener su peculiaridades propias. Sin embargo, vale la pena el esfuerzo
porque Java puede ser más gratificante que cualquier otro programación idioma.
Es rico sintaxis y De amplio alcance API significa que se puede utilizar para todo
tipo de programación, desde escribir una utilidad de línea de comandos hasta
construir un sistema cliente-servidor distribuido o un sistema multiproceso
complejo en tiempo real. sistema. Después el inicial bombo publicitario
circundante Java tenía fallecido lejos, él maduró en a importante programación
idioma secundario a enorme software industria. Aunque hasta cierto punto Java se
está convirtiendo en un lenguaje heredado, sin duda seguirá evolucionando y
brindando a los programadores las herramientas para codificar una gran cantidad
de aplicaciones en todo tipo de contextos durante muchos años más. Incluso si
Java finalmente se desvanece lejos como a programación idioma, es influencia es
semejante eso El conocimiento de Java puede ser extremadamente útil para
aprender las nuevas generaciones de lenguajes que lo han seguido.
Compilando y Correr Java Programas
2

En este capítulo, nosotros encontrarse nuestro primero Java aplicaciones. Estos


corto programas consistir de clases que contener alguno simple código eso
muestra producción en el pantalla. El Sin embargo, el objetivo principal de este
capítulo es comprender el compilador y el entorno de ejecución de Java y aprender
a usar los paquetes y la ruta de clases. En los primeros ejemplos, exploraremos
cómo usar Java desde la línea de comandos para ayudar a ganar a Más adentro
comprensión de qué es yendo en. En el fin de el capítulo, Presentamos el entorno
de desarrollo integrado (IDE) de Java Eclipse, donde se realizan muchos de los
procesos de bajo nivel por usted.

2.1 Java de el Dominio Inmediato

Para nuestros primeros ejemplos, compilaremos y ejecutaremos nuestro código


Java desde el símbolo del sistema en lugar de utilizar un entorno de desarrollo
integrado (IDE) para Java como Eclipse, Apache NetBeans o IntelliJ IDEA. A
primera vista, esto puede parecer un ejercicio bastante tedioso y sin sentido,
cuando un IDE hace que gran parte del proceso de edición, compilación y
ejecución de código sea relativamente fácil y transparente. Sin embargo, es útil al
menos tener una idea de lo que está sucediendo en el entorno de desarrollo
integrado (IDE). fondo cuando tú usar a Java IDE a entender qué sucede cuando
código se compila, cómo se ejecuta y cómo se relacionan los paquetes y la ruta de
clases de Java con el sistema de archivos. Teniendo un conciencia de estos asuntos
poder ayuda tú a resolver problemas si Tienes dificultades cuando usas un IDE o
cuando quieres usar código que has escrito en él. un IDE a usar en otro contexto
(p.ej cuando tú necesidad a desplegar su aplicaciones para que realmente se
puedan usar). Para abrir el Símbolo del sistema en Windows, simplemente escriba
“ cmd ” en el cuadro de búsqueda en la parte inferior de la pantalla. Debería ver el
Símbolo del sistema Inmediato aplicación aparecer en el ventana. Tú poder
entonces hacer clic en este a abierto Símbolo del sistema. En una Mac, deberá
abrir la aplicación Terminal, que generalmente se encuentra en la carpeta de
utilidades del Finder.
© Saltador Naturaleza Suiza Estado 2020 11
D.
1 Parsons, Foundational Java , Textos en Ciencias de la 1 The Java
Computación,
4 https://doi.org/10.1007/978-3-030-54518-5_2 Story
12 2 Compiling and Running Java
Programs
2.1.1 Configuración el Camino a el Kit de herramientas JDK

Antes de poder ejecutar cualquiera de las herramientas del JDK desde el símbolo
del sistema, debe asegurarse de que la variable de entorno " path " incluya la
carpeta " bin " del JDK , donde residen los programas que necesita, incluidos "
javac " y " java " . En los sistemas Windows, la ubicación de instalación
predeterminada para Oracle JDK “ bin ” La carpeta suele ser algo como ( pero no
exactamente ):

C:\Program Archivos\Java\jdk- 14\bin

Si está utilizando OpenJDK, puede descomprimir el archivo descargado en una


carpeta de su elección, por lo que la ruta dependerá de dónde lo extrajo.
Asegúrese de que está ubicando la carpeta “ bin ” del JDK, no del JRE, ya que
el JRE no incluye el compilador ni las otras herramientas para desarrolladores que
veremos más adelante. La ruta se puede configurar de forma permanente como
una variable de entorno o temporalmente en una ventana de comandos. En una
ventana de comandos, puede configurar su ruta para que incluya las herramientas
del JDK utilizando “ set path ” , por ejemplo:

establecer ruta=C:\Programa Archivos\Java\jdk-14\bin;%ruta%

Incluir la referencia a %path% no es esencial, pero agregará cualquier ruta


existente. ajustes tú ya tener. Configuración el camino de a La ventana de
comandos hace No cambiar el sistema camino, y solo se aplica como largo como
eso dominio ventana es abierto. Alternativamente, puedes Establecer el camino
permanentemente en su Configuración del sistema. Para hacer esto en Windows,
debe abrir el cuadro de diálogo “ Configuración ” (desde la rueda dentada en el
menú lateral de Windows), buscar “ Ruta ” y luego elegir la opción para editar
sus variables de entorno. Esto abrirá el cuadro de diálogo “ Propiedades del
sistema ” con la pestaña “ Avanzado ” seleccionada. Presione el botón “
Variables de entorno ” . Debería ver la “ ruta ” aparece como una de las variables
del sistema. Seleccione esta variable y edítela. Agregue la ruta a la carpeta “ bin ”
de Java al principio de la lista, separada de lo que sigue por un punto y coma,
luego presione “ Aceptar ” .
Nota
Cambios a el camino en el Sistema diálogo voluntad no afectar cualquier dominio
ventanas que ya están abiertas. Será necesario abrir una nueva ventana de
comandos para reflejar los cambios en el camino. También tenemos que Tenga
en cuenta el “ classpath ” variable, pero no será necesario configurarla para que
los ejemplos iniciales funcionen .
2.2 A First Java 13
Program
2.2 A Primero Java Programa

Como casi cualquier otro programa de ejemplo inicial, nuestra primera aplicación
Java simplemente muestra a mensaje en el pantalla. A pesar de él es muy básico,
él aún introduce varios importantes aspectos de Java código eso voluntad ser
explorado en detalle más tarde. Él muestra cómo escribir a clase en Java, usado
aquí simplemente como a programa entrada punto. Clases tener En Java, existen
otros roles, pero para ejecutar un programa, se necesita una clase que contenga un
método “ principal ” , como hacemos en este ejemplo. Un método es una
operación que la clase puede realizar. En el caso de el " principal " método, el
operación es a acto como a programa Punto de entrada. En este ejemplo, se utiliza
el método principal de otra clase de las bibliotecas de Java ( “ System ” ) para
imprimir un mensaje en la consola. Hay mucho más que aprender sobre las clases,
pero dejaremos estas discusiones para ejemplos posteriores.
El fuente código de nuestro primero solicitud (cual tú poder ingresar en
cualquier básico editor de texto) es

público clase Mi programa Java


{
público estático vacío principal(Cadena[] argumentos)
{
System.out.println("Mi Java Programa ¡Correr!");
}
}

Este puede parecer a bastante complejo colocar de código justo a imprimir a


simple mensaje, pero Incluye varias características clave de Java. Exploraremos
cada parte del código a medida que avancemos en el ejemplo.

2.2.1 El Mi programa Java Clase

El primero línea de código declara el clase.

clase pública MyJavaProgram

No se puede escribir ningún código Java que no pertenezca a una u otra clase.
Este particular clase es llamado “ MiProgramaJava ” pero el clase nombre es no
importante Aquí, está es algo decidido por el programador. El Nombramiento
convención para clase Los nombres son a veces llamado Pascal Caso , cual
simplemente medio eso el nombre comienza con una letra mayúscula, y cualquier
palabra incrustada (como “ Java ” y “ Programa ” en nuestro ejemplo) también
comienzan con una letra mayúscula. El “ público ” prefijo significa que la clase
poder ser visible a todo otras clases, incluso aquellos eso son no en el mismo
paquete
14 2 Compiling and Running Java
Programs
(un directorio o carpeta de archivos) y es como se declaran la mayoría de nuestras
clases. Si omitimos este prefijo, la clase solo será visible dentro de su propio
paquete. Por el momento, no estamos especificando en qué paquete se encuentra
esta clase, por lo que se colocará en el paquete predeterminado sin nombre (que de
hecho es la carpeta actual). Veremos los paquetes con más detalle en el siguiente
ejemplo.
El Mi programa Java clase debe ser salvado en a archivo llamado “
MyJavaProgram.java ” , preferiblemente con el mismo mezcla de superior y más
bajo caso letras. Vocación el archivo por Se requiere el mismo nombre que la
clase para las clases públicas y hace la vida mucho más fácil cuando queremos
encontrar una clase más adelante, ya que solo una clase pública puede aparecer en
un “ .java ”. archivo. Es esencial que la extensión del archivo sea “ .java ”.
porque lo requiere el compilador de Java (al menos lo requiere el compilador
Oracle JDK).
Nota
Al guardar el archivo, asegúrese de que el editor de texto que está utilizando
guarde el archivo en formato de texto simple, no en otro formato como el formato
de texto enriquecido (RTF), que es, por ejemplo, el tipo de archivo
predeterminado para WordPad de Windows. Asegúrese también de que el editor
no agregue otra extensión como “ txt ”. a su archivo, lo que hará el Bloc de
notas de Windows de manera predeterminada (para evitar esto si está usando el
Bloc de notas, coloque comillas alrededor del nombre del archivo cuando lo
ingrese en el cuadro de diálogo " Guardar como " ) .
El cuerpo de la clase (el código que contiene) está rodeado por llaves (llaves {}
). Todo lo que está entre las llaves de apertura y cierre pertenece a esa clase. Esto
se conoce como ámbito ; la clase contiene todo lo que cae dentro de su ámbito. (es
decir aparece entre el dos tirantes). En este ejemplo, el solo cosa eso es En el
ámbito de la clase hay un método llamado “ main ” . El método “ main ” es un
método especial que permite que una clase actúe como punto de entrada a un
programa.

2.2.2 El "principal" Método

El método principal siempre es el primero que se ejecuta cuando se ejecuta una


clase en Java Virtual. Máquina, y a programa debe tener en el menos uno clase
con a principal método en orden a correr en todo. A programa poder tener más que
uno clase con a principal método, pero sólo uno de ellos se utilizaría como punto
de entrada (otros podrían estar allí, por ejemplo, puramente con fines de prueba,
no pensados como parte de un sistema más grande). El método es declarado "
público, " cual medio eso él es parte de el público interfaz de La clase, y también
“ estático ” a término nosotros voluntad explorar adecuadamente más tarde, pero
él permite a nosotros a Ejecuta el método principal directamente usando el nombre
de la clase. Su tipo de retorno es “ void ” , lo que significa que no retorna ningún
valor.

public static void principal (cadena [] argumentos)


2.2 A First Java 15
Program
Su lista de parámetros ( String[] args ) es siempre la misma, y significa que
podemos, si lo deseamos, enviar una o más cadenas de texto a este método como
parámetros. Aunque el nombre utilizado para referirse a estas cadenas puede ser
cualquier cosa que nos guste, Es típico aparece como “ args ” o “ argv ” (porque
son “ argumentos ” ). Los corchetes ( [] ) indican eso este es un matriz , cual
voluntad también ser explorado más tarde. En práctica, nosotros casi nunca Utilice
esta facilidad de pasar objetos String al método principal, pero más adelante
veremos un ejemplo de cómo se puede utilizar para entender por qué está allí.

2.2.3 Salida con el Sistema Clase

Para probar nuestros programas, es útil poder enviar información directamente a la


consola (la ventana de salida de texto estándar). En Java, podemos hacerlo
utilizando “ System.out ” . Tenga en cuenta que System comienza con una letra
mayúscula porque es el nombre. de a clase pero comienza con a más bajo caso
carta como él es un objeto. Nosotros voluntad mirar En este distinción en a lote
más detalle más tarde, pero para ahora justo ser consciente eso “ System.out ” nos
permite imprimir texto en la consola mediante el comando “ println ”. método. El
código que hace esto en nuestro ejemplo es esta única línea en main:

System.out.println("Mi Java programa ¡correr!");

“ Sistema.out.println ” Toma una cadena de caracteres como parámetro y la


imprime en pantalla antes de añadir un salto de línea. Además, veremos más
adelante que se puede pasar cualquier tipo de dato a “ println ” para exhibir. Un
método similar es “ imprimir ”. que también escribe texto en la pantalla pero no
agrega el salto de línea, por lo que cualquier salida posterior aparecería en la
misma línea. Por lo tanto, podríamos haber escrito lo siguiente para imprimir una
línea sin salto de línea:

System.out.print("Mi Java programa ¡correr!");

Dado que este programa solo genera una única línea de texto, esto no haría
ninguna diferencia en este ejemplo.

2.3 Compilando Java

Como se describe en el capítulo 1 , el código fuente de Java debe convertirse en


código de bytes mediante el compilador de Java. Este código de bytes se escribe
en “ .class ”. archivos, que luego se pueden ejecutar utilizando la máquina virtual
de Java. Cuando empecemos a utilizar un entorno de desarrollo integrado para
escribir nuestros programas, habrá varias herramientas que nos permitirán hacer
esto. Por el momento, sin embargo, aprenderemos a utilizar el compilador de Java
( “ javac ” ) desde la línea de comandos.
16 2 Compiling and Running Java
Programs
Para el primero ejemplo, tú voluntad necesidad a asegurar eso tú tener a
dominio ventana abierta en el mismo carpeta como su fuente código. Tú voluntad
también necesidad a hacer seguro que la carpeta “ bin ” del JDK está incluida en
la ruta del sistema.
El fuente código debe ser compilado usando el “ javac ” compilador. Tú poder
controlar Si el compilador está en la ruta simplemente escribiendo “ javac ” en el
símbolo del sistema. Debería ver una larga lista de opciones que comienzan de la
siguiente manera:

C:\>javac
Usage: javac <options> <source files>
where possible options include:
-g Generate all debugging info
-g:none Generate no debugging info
-g:{lines,vars,source} Generate only some debugging info

Sin embargo, si el “ javac ” Si el comando no se reconoce, significa que hay


un problema con la configuración de ruta que debe corregirse antes de continuar .
Si “ javac ” está en la ruta, entonces puede compilar su código fuente en un
archivo “ .class ” (bytecode) para producir (para este ejemplo) “
MyJavaProgram.class ” . Simplemente agregue el nombre del archivo fuente
después de “ javac ” en la línea de comando.

javac MiProgramaJava.java

Tú debe usar el lleno nombre de archivo, incluido el “ .java ” extensión. El


Oráculo Compilador de Java es no distingue mayúsculas y minúsculas, pero él es
bien práctica a usar el correcto mezcla de mayúsculas y minúsculas, ya que
muchas herramientas Java distinguen entre mayúsculas y minúsculas. El
compilador compilará correctamente el archivo fuente de Java en código de bytes
(en cuyo caso el sistema simplemente mostrará el siguiente mensaje de solicitud
de comando) o, si hay algún error en su programa, mostrará mensajes de error del
compilador. Cuando el archivo se compila correctamente, creará un archivo de
clase llamado “ MyJavaProgram.class ” en la misma carpeta que el código fuente.

2.4 Correr Java

Una vez el clase tiene estado compilado, puede ser correr en el virtual máquina usando "
Java
clase nombre ” , en este caso:
2.4 Correr Java 17

Java Mi programa Java

Al ejecutar un Java clase, tú hacer no agregar a extensión de archivo, solo el


nombre de La clase en sí. La máquina virtual distingue entre mayúsculas y
minúsculas y requiere la combinación correcta de letras mayúsculas y minúsculas.
El entorno de ejecución de Java debe poder encontrar este archivo en la ruta de
clases, pero de forma predeterminada, la ruta de clases es la carpeta actual.
Mientras trabajemos dentro de una sola carpeta, la ruta de clases no nos causará
ningún problema.
Si está utilizando un compilador o entorno de ejecución de Java diferente, los
detalles del proceso puede ser a pequeño diferente, pero el mismo cosas son
acontecimiento, a saber, eso La fuente archivo es compilado en a clase archivo eso
es entonces correr en el virtual máquina. Al ejecutarse, el programa muestra lo
siguiente en la pantalla:

Mi Java programa ¡correr!

Luego, el control regresa al símbolo del sistema desde el que se ejecutó la


aplicación. Figura 2.1 ilustra el secuencia de compilando y correr su código.
Dentro del JRE, hay un cargador de clases, que lleva el código de bytes de las
clases requeridas a la memoria, y luego el código de bytes es interpretado por la
Máquina Virtual Java para ejecutarse en la plataforma del sistema operativo
específico en el que se ha implementado.
Ejercicio 2.1
Este ejercicio simplemente paseos a través de el pasos en el primero ejemplo.

• Ingresar el Mi programa Java clase fuente código en a texto editor.


• Ahorrar él en a archivo llamado MiProgramaJava.java (hacer seguro él es salvado como a
texto simple
archivo con el correcto extensión).

Java Desarrollo Equipo (JDK)


xxx.java Fuente código
javac xxx .java

xxx.clase Byte

código
Java xxx

Java Tiempo de ejecución


Ambiente (JRE)
Cargador de clases JVM SO

Byte Ejecutable
código código
18 2 Compiling and Running Java
Higo. 2.1 El secuencia de compilando y correr Java código
Programs
18 2 Compiling and Running Java
Programs
• De el Código fuente carpeta en a dominio ventana, compilar el clase usando el
“ javac ” compilador.
• Si es necesario, corrija cualquier error y continúe compilando y editando su
código hasta que se compile correctamente.
• Una vez tú tener exitosamente generado a compilado " .clase " byte código
archivo, correr el programa utilizando el entorno de ejecución “ java ” .

2.5 El Java Ruta de clases

La ruta de clases de Java es lo que el compilador de Java y la máquina virtual


utilizan para encontrar archivos .class compilados (código de bytes). De manera
predeterminada, la ruta de clases es el directorio actual, por lo que nuestro
programa de ejemplo se ejecutó sin que nos diéramos cuenta de la ruta de clases.
Máquina virtual Java era capaz a encontrar el requerido clase archivo en el actual
carpeta. Sin embargo, No siempre podemos trabajar con todo en una sola carpeta,
por lo que necesitamos entender cómo funciona. ruta de clase obras. Desde el ruta
de clase es cercanamente vinculado a Java paquetes, nosotros También es
necesario comprender para qué sirven los paquetes y cómo funcionan.

2.5.1 Paquetes

Todo Java clases son metido en a paquete, incluso si él es el por defecto (sin
nombre) Paquete. Paquetes son a forma a organizar nuestro clases, y a paquete
típicamente contiene a colocar de clases que están relacionadas entre sí de alguna
manera. Todas las clases de un paquete se colocan en la misma carpeta, y es la
ruta de la carpeta la que le da el nombre al paquete. Los nombres de los paquetes
consisten en uno o más nombres de carpeta, separados por puntos, todos en
minúsculas. caso. Clases tener a simple nombre , cual es el nombre de el clase sí
mismo, y un nombre completo , que incluye el nombre del paquete. Por ejemplo,
la clase System es en a paquete llamado “ java.lang, ” entonces es simple nombre
es " Sistema, " pero es El nombre completo es “ java.lang.System ” . Debido a
que el nombre del paquete se asigna directamente a el estructura de el archivo
sistema, él aparece en a carpeta llamado “ idioma ” cual en sí está en una carpeta
llamada " java " .
Nota
No es necesario crear las carpetas con antelación. El compilador de Java puede
crearlas según sea necesario. Solo el código de bytes compilado debe estar en la
carpeta indicada; el código fuente puede estar en cualquier lugar.
Nosotros usar paquetes a dar a clase es “ espacio de nombres ” . Este es útil
porque él significa que a clase en uno paquete poder ser distinto de otro clase eso
tiene el mismo nombre de la clase pero es en a diferente paquete. Para ejemplo, si
I escribir a Cuenta bancaria clase, él Probablemente no sea la única clase con ese
nombre en el mundo, pero puedo hacerla única si la pongo en un paquete con un
nombre único. Una convención común para nombrar paquetes es a base a ellos en
a Dirección URL (Uniforme Recurso Identificador). Desde URI son
2.5 The Java 19
Classpath
nombres únicos, basados en nombres de dominio de estilo Internet, utilizándolos
como base para la denominación de paquetes ayuda a Mantener los nombres de los
paquetes globalmente únicos. Los nombres de los paquetes suelen ser creado de
contrarrestar URI , dónde nosotros cambiar el orden de el principal parte de el
nombre de dominio. Por ejemplo, si tengo un dominio llamado “ foundjava.com ”
, entonces el URI inverso sería “ com.foundjava ” . A partir de ese punto de
partida, se pueden usar varias subcarpetas para diferentes proyectos y
aplicaciones, por lo que podría tener un paquete llamado “
com.foundjava.chapter2 ” para el ejemplo código usado en este capítulo. Si el
nombre de mi paquete es “ com.foundjava.chapter2 ” , entonces si pongo una
clase “ BankAccount ” en eso paquete, entonces el completamente calificado
clase nombre voluntad ser “ com.foundjava.capitulo2.CuentaBancaria ” ,
donación él a diferente completamente calificado nombre que, para ejemplo, “
com.bigbank.system.BankAccount ” porque aunque el nombre de la clase es el
mismo, el nombre del paquete es diferente. Este es un aspecto importante de la
reutilización de componentes en Java, porque significa que podemos combinar
clases de muchas fuentes diferentes sin preocuparnos por conflictos de nombres.
Para colocar una clase en un paquete específico, usamos un “ paquete ”
declaración que debe aparecer como la primera línea de código en el archivo.
Tenga en cuenta que el nombre del paquete está en minúsculas, con el carpeta
nombres apartado por períodos. Números poder ser incluido pero no como El
primero personajes de cualquier de el carpeta nombres en el paquete (solo letras y
Los números son caracteres válidos). Si “ MyJavaProgram ” se coloca en un
paquete llamado “ com.-foundjava.chapter2 ” , la declaración del paquete se verá
así:

paquete com.foundjava.chapter2;
clase pública MyJavaProgram
{
// etc.

2.5.2 Compilando en a Paquete Carpeta

Una vez que ponemos una clase en un paquete, es necesario compilarla para que el
código de bytes termine en la carpeta correcta. Esto se logra fácilmente usando el
comando “ -d ”. Opción (directorio) en el compilador de Java. Esta opción va
seguida de un espacio, luego un nombre de directorio y otro espacio. Esto
garantiza que el archivo de clase compilado se colocará automáticamente en la
carpeta de paquete correcta debajo de la que especifique (creará el requerido
carpeta estructura si él hace no ya existir). Para ejemplo, nosotros Puede utilizar el
punto ( “ . ” ) para especificar la carpeta actual:

javac -d . MiProgramaJava.java
20 2 Compiling and Running Java
Programs
Si compila usando esta opción, debería poder ver que se ha creado la estructura
de directorio para usted y que el archivo de clase compilado está en la carpeta
correcta. El original fuente archivo es, de curso, aún en es original carpeta, desde
él es Sólo el byte código eso debe ser en el correcto paquete estructura en orden a
ser situado por otras unidades de código.
Para ejecutar nuestra aplicación Java actualizada, necesitamos comprender
cómo se relacionan los paquetes a el Java ruta de clase, un ambiente variable eso,
como el camino, puede ser Se establece en el sistema operativo y define dónde se
puede incluir el código de bytes de Java (es decir, las clases compiladas). encontró
por el Java compilador y máquina virtual. Este es importante porque cuando
compila o ejecuta código Java, es muy probable que dependa de otras clases y
bibliotecas. Estas solo se pueden encontrar si están en la ruta de clases. La ruta de
clases se puede configurar desde la línea de comandos, es decir,

colocar ruta de clase= nkuv qh encuurcvj gpvtkgu

o mediante la configuración de todo el sistema, que variará según su sistema


operativo.
De forma predeterminada, la ruta de clases incluye todas las bibliotecas de Java
y el directorio de trabajo actual. Por este motivo, nuestro primer ejemplo se
ejecutó sin especificar un paquete, ya que lo compilamos y ejecutamos desde un
solo directorio.
Para configurar la ruta de clase correctamente, el primer directorio utilizado en
el nombre del paquete (en este ejemplo, “ com ” ) debe estar debajo de un
directorio especificado en la ruta de clase. Por ejemplo, si nuestra ruta de clase es
algo como lo siguiente:

Establezca classpath=c:\código

Luego la estructura del directorio del paquete “ com\foundjava\chapter2 ” debe


aparecer dentro de “ c:\code ” . La ruta de clases no incluye los subdirectorios que
forman parte de los paquetes, solo los que están por encima de ellos (Fig. 2.2 ).
Tenga en cuenta que la ruta de clases se relaciona solo con los archivos de clase
compilados, no con el código fuente de Java.
Nota
El código de muestra para este libro (descargable desde el sitio web) está
organizado en subdirectorios que coinciden con la estructura predeterminada de
un proyecto Eclipse, con el código fuente en a “ fuente ” carpeta. Eclipse
voluntad por defecto poner el código de bytes compilado En un carpeta “ bin ” ,
aunque para cualquier proyecto nuevo estas carpetas se pueden cambiar
fácilmente .
El lugar exacto donde se establece la ruta de clase varía según el sistema
operativo. En Windows sistemas, para ejemplo, él poder ser colocar, como el
camino, a través de el sistema diálogo de variables de entorno. Alternativamente,
podemos ingresar el comando “ set classpath …” línea en el comando inmediato,
pero este debe ser hecho cada tiempo nosotros abierto a nuevo dominio ventana.
Cualquiera que sea forma nosotros elegir a hacer él, paquetes debe ser definido en
conjunción con La ruta de clases a Habilitar ejecución Programas Java a encontrar
2.5 The Java 21
Classpath
lo necesario clases en tiempo de ejecución.
Al configurar la ruta de clase, puede tener varias entradas, separadas por punto
y coma. Cuando configuración el ruta de clase de el dominio línea, nosotros
poder también referirse a
22 2 Compiling and Running Java
Programs

C:\

code

con

encontradojava

chapter2

MiProgramaJava.clase

package
set classpath=c:\code com.foundjava.chapter2

Higo. 2.2 La relación entre paquetes y La ruta de clases

Configuraciones de ruta de clase del sistema existentes incluyendo %classpath%,


como hicimos con “ path ” Ejemplo anterior en este capítulo. Por ejemplo,
podríamos configurar la ruta de clase para que incluya existente ajustes, “ C:\
código ” y el actual directorio (indicado simplemente por un punto), como éste:

colocar ruta de clase=%ruta de clase%;c:\código;.

2.6 Comentario Sintaxis

Los comentarios no son código y el compilador los ignora. Se utilizan para


documentar código para humano Lectores. Allá son tres estilos de comentario eso
poder ser usado en Java. Una es la antigua sintaxis de estilo “ C ” :

/*
* Cualquier cosa entre el
* barra-asterisco y asterisco- barra
* es a comentario
*/
2.5 The Java 23
Classpath
Este tipo de comentario debería ser evitado en Java en favor de Javadoc
comentarios que presentaremos en breve.
También existe una sintaxis para comentarios de una sola línea, que utiliza dos
caracteres de barra diagonal:

//soltero línea comentarios

Este tipo de sintaxis (que proviene del lenguaje de programación C++) es más
fácil de usar para comentarios cortos en el cuerpo del código, porque no necesita
ninguna otro personaje a indicar dónde el comentario termina. El fin de el
comentario se toma automáticamente como el final de la línea en la que aparece.
El tercero tipo de comentario es usado por Javadoc, el automático Herramienta
de documentación de clases que funciona con código Java (más adelante en este
libro analizaremos Javadoc). Lo importante es tener en cuenta que los primeros
caracteres del bloque de comentarios tienen dos asteriscos después de la barra
diagonal, en lugar del asterisco simple que se utiliza con los comentarios de estilo
“C”.

/**
* Cualquier cosa entre el
* barra-asterisco-asterisco y asterisco- barra
* es a documentación comentario
*/

La herramienta Javadoc utiliza este tipo de comentario al generar


documentación HTML. (Documento Java) ignora “ C ” y “ C++ ” comentarios
de estilo). Él Es una buena práctica tener a Javadoc comentario antes cada clase
eso tú escribir, y cualquier métodos eso Son lo suficientemente interesantes como
para necesitar alguna explicación.
Ejercicio 2.2
Este ejercicio simplemente Sorteos juntos el pasos en el anterior ejemplo:

• Hacer a Copiar de su Mi programa Java clase.


• Rebautizar ambos el clase y el archivo “ Mi Segundo Programa ” .
• Agregar un adecuado paquete declaración a el arriba de el fuente archivo
(usar la convención de URL inversa para el nombre del paquete).
• Agregue un bloque de comentarios de Javadoc inmediatamente encima de la
declaración de clase y un comentario de una sola línea dentro del cuerpo del
método principal.
2.6
24 Comentario Sintaxis 2 Compiling and Running Java 23
Programs
• Cambiar el mensaje en Sistema.out.println entonces tú poder ser cierto cual
clase Estás corriendo.
• Compilar el clase con el - d opción a crear el paquete carpeta estructura.
• Colocar el ruta de clase en el dominio línea (o como a sistema variable).
• Correr el programa (recordar tú necesidad el completamente calificado clase nombre).

2.7 Uso del entorno de desarrollo


integrado (IDE) de Eclipse

En nuestro primer ejemplo, utilizamos las herramientas básicas del JDK desde la
línea de comandos. Aunque esto resulta útil para comprender el papel del
compilador y el entorno de ejecución de Java, y la ruta de clases, no es un entorno
de desarrollo muy productivo. En el resto de este libro, trabajaremos con el IDE
Eclipse (Integrated Development IDE). Ambiente). Este poder ser con libertad
descargado de el Sitio web “ eclipse.org ” . El mismo IDE poder ser usado para
desarrollo código en diferente idiomas y viene en varios diferente versiones para
diferente tipos de software desarrollo. La versión utilizada para el ejemplo de este
libro es “ Eclipse IDE for Java Developers ” . Instalación Eclipse es muy fácil. Tú
solo necesidad a descargar el instalador archivo y Ejecútalo. Cuando el instalador
comienza arriba él voluntad espectáculo a lista de idioma opciones, entonces tú
Debería elegir “ Eclipse IDE para desarrolladores Java ” (Fig. 2.3 ).
El instalador de Eclipse debería localizar automáticamente una JVM
(suponiendo que ya haya instalado el JDK, que incluye la JVM, para las
actividades de línea de comandos de la primera parte de este capítulo). Es posible
que deba configurar la ruta a la JVM y dónde desea instalar Eclipse (Fig. 2.4 );
luego, la instalación se completará.

Higo. 2.3 El opción a elegir el Eclipse IDE para Java Desarrolladores en el Eclipse Instalador
24 2 Compiling and Running Java
Programs
Figura 2.4 Seleccionar lo
existente Kit de herramientas
JDK ubicación y El nuevo
Eclipse instalación carpeta

2.7.1 Creando a Nuevo Proyecto

Cuando el IDE comienza, él voluntad preguntar tú a especificar a espacio de


trabajo, cual es simplemente a Ubicación del disco dónde su proyecto datos
voluntad ser almacenado. Tú poder cualquiera aceptar el por defecto o punto él a a
nuevo ubicación (este poder siempre ser cambió más tarde). Cuando el IDE
Aparecerá inicialmente algo como la Fig. 2.5 (otras versiones pueden verse
ligeramente diferentes). Si aparece un mensaje de " Bienvenido " La pestaña
aparece primero, simplemente ciérrela para ver la vista del editor principal. El IDE
ventana es dividido en cuatro principal áreas, dentro cual varios paneles con
pestañas puede aparecer. En el izquierda es el explorador área, dónde tú poder
vista su archivos de varias maneras. En el centro está el área de edición de código
y en la parte inferior hay un área con pestañas que puede mostrar cosas como
errores, salida del programa, etc. A la derecha, hay otras vistas posibles, como el
esquema que mostrará detalles del clase actualmente ser editado. Desde allá son
muchos diferente ventanas y paneles con pestañas Eso puede ser mostrado o
oculto, y el Disposición de estos dentro el marco poder Aunque se puede cambiar
a voluntad, no exploraremos más el diseño general de la pantalla, ya que la
personalización significa que las pantallas IDE de los usuarios individuales
variarán ampliamente. Además, hay varias perspectivas diferentes que se pueden
ver con el IDE. La perspectiva que se muestra en la Fig. 2.5 es la perspectiva de
Java (como se puede ver desde el botón en la esquina superior derecha de la
pantalla), pero hay varias otras perspectivas eso poder ser usado cuando laboral
con Java código, incluido el depurar
2.7 Using the Eclipse Integrated Development 25
Environment (IDE)
perspectiva. Si tú necesidad a restaurar este por defecto perspectiva disposición en cualquier
punto, seleccionar
" Ventana " ! Perspectiva " ! " Reiniciar Perspectiva …" .
En este sección, nosotros voluntad recrear el “ Mi Programa Java ” código
dentro Eclipse, que debería dar tú Alguna impresión de cuánto Más eficiente él
es para usar un IDE que a programa de el dominio línea. El primero paso en
usando Eclipse es a crear Un nuevo Java proyecto; seleccionar " Archivo " !
" Nuevo " ! " Java Proyecto " de el principal barra de menú . Tú voluntad
ver a " Nuevo Java Proyecto " diálogo desplegado como eso mostrado en Higo.
2.6 . En el ejemplo en Higo. 2.6 , el proyecto nombre " Mi Java Proyecto "
tiene estado entró.
Hay varias formas de configurar un nuevo proyecto, pero en este ejemplo práctico
simplemente aceptaremos la configuración predeterminada y presionaremos "
Finalizar ". botón. Usted lo hará entonces ver a diálogo preguntando tú si tú
desear a crear a archivo llamado “ module-info.java ” (Fig. 2.7 ). Los módulos
se introdujeron con Java 9 como una forma de dividir sistemas Java más grandes
en módulos separados. En la Fig. 2.7 el nombre del módulo “
com.foundjava.ejemplos ” tiene estado entró pero el nombre de el módulo es
arriba a tú. General práctica es a usar el mismo contrarrestar Dirección URL estilo
como paquete nombres, y use el mismo nombre para el módulo que el paquete
principal dentro de él, pero esto es una convención bastante que a requisito.
Cuando tú hacer clic " Crear " tú voluntad ver eso él

Higo. 2.5 El inicial pantalla cuando cargando el Eclipse IDE con el por defecto ventana disposición
26 2 Compiling and Running Java
Programs

Higo. 2.6 El " Nuevo Java Proyecto " diálogo en Eclipse

crea un vacío “ módulo-info.java ” archivo en su proyecto. Nosotros voluntad


devolver a módulos y lo que contiene este archivo, más adelante en este libro.
Una vez creado el proyecto, Deberías agregarle un nuevo paquete Java. Como
ya hemos dicho, sierra de nuestro primero ejemplo, él es no básico a usar Java
paquetes en orden a Obtenga una clase simple para compilar y ejecutar, pero es
importante usar paquetes para cualquier propósito significativo. Java desarrollo,
desde nosotros no puedo sesudamente continuar a poner cada Las clases las
escribimos en una sola carpeta. A partir de ahora, colocaremos todos nuestros
ejemplos de Java en paquetes adecuados.

2.7.2 Creando a Nuevo Paquete

A crear a nuevo paquete, clic derecho en el proyecto nombre eso aparece en el


" Paquete Explorador ” cristal en el izquierda de el pantalla y seleccionar " Nuevo " ! "
Paquete "
2.7 Using the Eclipse Integrated Development 27
Environment (IDE)

Higo. 2.7 El " Crear módulo-info-java ” diálogo en Eclipse

Desde el menú emergente, debería aparecer el " Nuevo paquete Java ". diálogo
(Fig. 2.8 ). En el ejemplo de la Fig. 2.8 , el nombre del paquete “
com.foundjava.chapter2 ” Se ha introducido. Recuerde las convenciones de
nombres de paquetes: todo en minúsculas, no puede comenzar con un número, sin
caracteres de puntuación, con puntos entre los nombres de los subpaquetes.
Eclipse mostrará una advertencia si intenta nombrar un paquete de forma
incorrecta. Si la carpeta de origen no es correcta (debería ser “ src ” carpeta de su
proyecto), puede buscarla. Haga clic en “ Finalizar ” para crear el paquete.

2.7.3 Creando a Nuevo Clase

Una vez el paquete tiene estado creado, nosotros poder agregar a nuevo clase a él.
Bien hacer clic en El nuevo creado paquete y Seleccione “ Nuevo ” ! “
Clase ” . Deberías ver el “ Nuevo Java” Clase " diálogo (Higo. 2.9 ).
En el ejemplo de la Fig. 2.9 , se ha introducido el nombre de la clase ( “
MyJavaProgram ” ). Nota también eso el caja tiene estado seleccionado a crear a
stub para el método “ main ” . Esto le ahorrará tener que escribirlo en el editor
manualmente.
Una vez que haga clic en " Finalizar " El código fuente debe aparecer en el
IDE como se muestra en la Fig. 2.10 . Eclipse voluntad tener automáticamente
agregado el nombres de el paquete y el
28 2 Compiling and Running Java
Programs

Higo. 2.8 El " Nuevo Java Paquete " diálogo. Él voluntad advertir acerca de paquete nombres
eso hacer no seguir las convenciones de nombres correctas

clase en el archivo fuente, algunos bloques de comentarios vacíos (que se pueden


editar o eliminar) y el código auxiliar del método principal, dejándole solo la tarea
de agregar el código requerido al método principal.

2.7.4 Edición Código en Eclipse

Como en nuestro anterior ejemplo, nosotros voluntad simplemente agregar a “


Sistema.out.println ” entrada a El cuerpo del método principal. Incluso en este
caso, Eclipse puede brindarle alguna ayuda. Figura 2.11 muestra a ventana
emergente ventana de sensible al contexto código Opciones eso podría aplicar a la
clase “ Sistema ” (puede ver “ out ” como una de las opciones en la lista). Esta
ventana aparecerá a menudo cuando escriba un punto después del nombre de una
clase (u objeto, como veremos más adelante). ver más tarde) o tú puede presionar
CTRL-barra espaciadora a invocar Las opciones
2.7 Using the Eclipse Integrated Development 29
Environment (IDE)

Higo. 2.9 El " Nuevo Java Clase " diálogo en Eclipse. En este ejemplo, el caja tiene estado
seleccionado para generar el código auxiliar de un método “ principal ” dentro de la clase

directamente). Tú poder voluta arriba y abajo este lista y seleccionar el entrada tú


requerir (con el ratón o la tecla Enter) como alternativa a escribirlo.
Figura 2.11 También se muestran otras características del IDE de Eclipse.
Observe el círculo rojo con la “ X ” blanca. en la izquierda de la ventana de
edición. Este aparece a la izquierda de cualquier línea que no sea sintácticamente
correcta y se actualiza dinámicamente (aunque su comportamiento poder a veces
ser engañoso como el dinámica Actualizando poder conseguir afuera de
sincronizar
30 2 Compiling and Running Java
Programs

Higo. 2.10 El IDE de Eclipse después de que se haya creado la clase. Observe el proyecto, el
paquete y la clase que se muestran en el panel “ Explorador de paquetes ” a la izquierda, el
código generado en el centro y el panel “ Esquema ” a la derecha donde se muestra un esquema
de la clase y sus métodos.

Figura 2.11 Eclipse siempre que a sensible al contexto ventana emergente lista de sugerido
código Opciones después Se ha escrito un punto en el código fuente o se ha presionado CTRL-
barra espaciadora
2.7 Using the Eclipse Integrated Development 31
Environment (IDE)
en complejo programas). Nota también eso el pestaña en el arriba de el edición
ventana tiene un asterisco a su derecha. Esto significa que el archivo actual tiene
ediciones sin guardar.
Figura 2.12 muestra alguno más características de el rojo y blanco error
Indicadores a la izquierda de la ventana de edición. En este ejemplo, el punto y
coma final se ha eliminado deliberadamente. izquierda apagado el fin de el línea.
Información acerca de errores poder ser visto en dos lugares. Si usted flotar sobre
el indicador de error rojo con El ratón, una ventana emergente Aparecerá un
mensaje (como se puede ver en la ventana de edición en la Fig. 2.12 ). Además, se
puede ver una lista de errores y advertencias actuales en todo el código del
proyecto en el apartado “ problemas ”. cristal en el abajo de el IDE. Sin embargo,
tú debería nota eso este lista solo se actualiza cuando se guarda un archivo; no se
actualiza dinámicamente como los indicadores de error en el editor de código
fuente. Existe una buena razón para esto, que es que Eclipse compila
automáticamente un archivo de código fuente Java cuando se guarda. De hecho,
no hay una " compilación " explícita. paso al usar Eclipse, así que “ guardar ”
es efectivamente lo mismo como “ compilar ” . El “ Problemas ” cristal solo
muestra errores eso aparecer en código compilado, no en ediciones no guardadas.
Tenga en cuenta que los símbolos de error también aparecen en la pestaña del
panel de edición y en el explorador de paquetes.

Higo. 2.12 A sintaxis error ser indicado ambos en el fuente código editor y el “ Problemas ” cristal
32 2 Compiling and Running Java
Programs
2.7.5 Compilando y Correr Código en Eclipse

" compilación " explícito pero tiene indicadores de error en el panel de edición
que son dinamicamente actualizado poder ser potencialmente engañoso. Para
ejemplo, En la Fig. 2.13 , el error ha sido corregido (el marcador ha pasado de
rojo a gris) pero el archivo no ha sido guardado (observe el asterisco en la pestaña
del panel de edición). Esto significa que el archivo actualizado aún no ha sido
compilado, por lo que el mensaje de error todavía aparece en la sección “
Problemas ”. panel. Esto puede causar confusión cuando trabaja con varios
archivos. Es posible que haya corregido errores en un archivo fuente, pero no lo
haya guardado (ni compilado). Esto significa que pueden aparecer otros errores
porque el código en otros archivos aún depende de la versión guardada
anteriormente (pero incorrecta). El mensaje básico es que, tan pronto como realice
cambios en su código, guarde el archivo para compilarlo.
Una vez su archivo es correcto, completo y salvado, él poder ser correr. A
correr a clase con un “ principal ” método, haga clic derecho en la clase en la
ventana del Explorador de paquetes y luego seleccione " Correr Como " ! “
Aplicación Java ” en el menú emergente. Alternativamente, puede utilizar el
botón verde “ Ejecutar ”. botón en la barra de herramientas en la parte superior
del IDE, que ejecutará cualquier clase que esté actualmente al frente de la ventana
de edición (no es probable que cause ningún problema). confusión en el
momento cuando nosotros solo tener uno clase ser editado). Figura 2.14
muestra la salida del programa que se muestra en una nueva “ Consola ” pestaña
que aparecerá en la parte inferior de la pantalla. Tenga en cuenta que cuando esté
ejecutando código en Eclipse, el ruta de clase (de hecho a módulo camino) a su
propio clases es automáticamente

Higo. 2.13 Corregido código en el edición cristal. A diferencia de el fuente código editor, el “
Problemas ” El panel solo se actualiza cuando se guardan los archivos y se compilan
automáticamente.
2.7 Using the Eclipse Integrated Development 33
Environment (IDE)

Higo. 2.14 Producción mostrado en el “ Consola ” cristal en el abajo de el pantalla

colocar, entonces tú no tener preocuparse acerca de él. Sin embargo, en Algunos


más tarde capítulos, nosotros Tendrá que volver a mirar la configuración de
classpath, incluso dentro del contexto de Eclipse.
Ejercicio 2.3
• Crear a nuevo Eclipse proyecto, incluido a información del módulo archivo.
• Agregar a nuevo paquete a el proyecto.
• Agregar a nuevo clase que contiene a " principal " método a el paquete.
• Agregue varias líneas a “ main ” usando “ System.out.println ” para mostrar
texto en el consola de salida.
• Una vez su programa tiene estado exitosamente correr, cambiar el “ imprimir ”
declaraciones a
" imprimir " declaraciones y observar el cambiar en el producción.

2.8 Resumen

En este capítulo se describen los conceptos básicos del uso de las herramientas
proporcionadas con Java para compilar y correr código. Nosotros sierra cómo el
fuente código de Java clase es estructurado, cómo él poder ser compilado usando
el “ javac ” compilador (proporcionó con Oráculo Java Desarrollo Kit o
OpenJDK) y cómo se puede ejecutar en la máquina virtual Java desde el comando
indicador/terminal. Nosotros tener visto Cómo Java código es poner en paquetes, y
cómo se relacionan estos paquetes con la ruta de clases de Java, que es necesario
configurar para que el entorno de ejecución de Java localice el código compilado.
El capítulo también describió cómo se realiza el mismo proceso. de edición,
compilando y correr código poder ser hecho mucho más fácilmente utilizando el
Eclipse Integrado Desarrollo Ambiente (IDE), cual también proporciona Muchas
otras funciones útiles, como la asistencia con la generación automática de código y
la identificación de errores. También vimos cómo Eclipse puede colocar
automáticamente clases en módulos Java que pueden contener varios paquetes.
Datos Tipos, Aritmética y Matrices
3

En este capítulo, presentamos los tipos de datos primitivos de Java , los


operadores aritméticos, la concatenación de cadenas y las matrices. Con estos
componentes básicos, podemos comenzar a crear algunos programas útiles. A lo
largo del camino, observamos algunos conceptos importantes relacionados con la
forma en que Java maneja combinaciones de diferentes tipos de datos, incluida la
promoción y la conversión.
Java tiene dos grupos de tipos de datos: tipos primitivos, que incluyen tipos
integrales y de punto flotante . números, personajes, y Booleano valores y
referencia tipos, que incluyen matrices, clases e interfaces. En este capítulo,
comenzamos examinando los tipos primitivos y, más adelante, presentamos las
matrices.

3.1 Java Primitivo Datos Tipos

Para comenzar este capítulo, nos encontramos con los tipos de datos primitivos de
Java. Estos son los tipos simples que se utilizan para almacenar números,
caracteres y valores booleanos (verdadero/falso). este libro, nosotros voluntad ser
relación comercial con clases y objetos. Sin embargo, Java, como La mayoría de
los demás lenguajes de programación también tienen un conjunto de tipos de datos
simples incorporados que representan personajes y números. Cada tiene a
especificado tamaño en términos de pedacitos (dígitos binarios) y, por lo tanto, un
rango especificado de valores posibles. Un byte, por ejemplo, siempre tiene 8 bits
de longitud, por lo que su valor positivo máximo es 127, que es el número binario
1111111 (7 bits) con 1 bit reservado para el signo (+ o − ) (Fig. 3.1 ).
A diferencia de otros lenguajes, Java no tiene tipos de datos sin signo, lo que
significa que todos ellos (excepto “ char ” , que está diseñado para contener
caracteres en lugar de números) puede contener números positivos y negativos.
Además, hay un “ booleano ” tipo, que solo puede contener los valores “
verdadero ” o “ falso ” . El disponible tipos son mostrado en Tabla 3.1 . Él es
importante a nota eso todo primitivo Los nombres de los tipos de datos están en
minúsculas. Esto los diferencia de otros tipos de datos que utilizan otro
Nombramiento Convenciones. Para ejemplo, nosotros tener ya visto eso clase Los
nombres se escriben utilizando mayúsculas y minúsculas Pascal.
© Saltador Naturaleza Suiza Estado 2020 35
D.
2.7Parsons,
UsingFoundational
the Eclipse JavaIntegrated
, Textos en Ciencias de la
Development 35
Computación, https://doi.org/10.1007/978-3-030-54518-5_3
Environment (IDE)
36 3 Data Types, Arithmetic and
Arrays

+ 1 1 1 1 1 1 1

64 + 32 + 16 + 8 + 4 + 2 + 1 = 127

Higo. 3.1 El Java “ byte ” datos tipo es 8 pedacitos largo

Mesa 3.1 Java datos tipos


Víveres Dato Poder contener Rango
s
tipo
Firmado números byte 8 bits entero De − 128 a 127
enteros corto 16 bits entero De − 32.768 a 32.767
entero 32 bits entero De − 2.147.483.648 a
2.147.483.647
largo 64 bits entero De
− 9.223.372.036.854.775.808 a
9.223.372.036.854.775.807
Números de flotar 32 bits número de punto Grande números con puntos
punto flotante flotante decimales
con signo doble 64 bits número de punto Muy grande números con
flotante puntos decimales
Booleano valor booleano Verdadero o FALSO
16 bits carácter carbonizars Soltero personaje Rango numérico desde 0 a 65.535
(positivo e desde Unicode
valores conjunto de caracteres
solamente)

3.1.1 Literales y Variables

Un literal es un valor específico inmutable (es decir, fijo cuando un programa


comienza a ejecutarse) que aparece en código. Literales poder ser números,
caracteres, booleanos o Cadenas. El compilador de Java infiere los tipos de datos a
partir de literales. Por ejemplo, se supone que se trata de un número entero. por el
compilador a ser de tipo entero, mientras a literal punto flotante número se
asume a ser a doble. En general, estos Suposiciones área valer siguiente A través
de su propio código, entonces Que tu debería usar entero tipos a representar todo
números y tipos dobles para representar números de punto flotante , a menos
que exista una buena razón para elegir uno de los otros tipos de datos. Un ejemplo
de esto sería almacenar una marca de tiempo. en milisegundos. En Java, este tipo
de valor es generalmente almacenado en a variable de tipo long, porque el tamaño
de almacenamiento de un int es demasiado estrecho. Solo hay dos valores literales
posibles para un booleano; “ true ” o “ false ” . Un literal de carácter está rodeado
por soltero citas, y a Cadena por doble citas (a diferencia de el otro Por ejemplo,
una cadena no es un tipo primitivo, pero sin embargo se puede asignar utilizando
un literal).
3.1 Java Primitive Data 37
Types
10 // un entero
45.5 // a doble
verdadero // a booleano
'a' // a carbonizarse
"cadena" // a Cadena ( no a primitivo tipo)

Literales solo son no de mucho usar para programación. Programas también


necesidad a Almacenar datos de diferentes tipos y tamaños en la memoria que
pueden tener valores que cambian dinámicamente. en tiempo de ejecución. A
hacer este, nosotros debe declarar variables de el adecuado tipo. A variable es
simplemente a nombre dado a a memoria ubicación eso voluntad ser usado a
almacenar Un específico tipo de datos, cual poder cambiar en valor (pero no tipo)
encima tiempo. A almacenar Por ejemplo, un entero de 32 bits, necesitamos
declarar un “ int ” con un nombre. Una variable debe también ser inicializado
(colocar a un inicial valor), preferiblemente cuando él es declarado. Esto se hace
con el operador “ = ” (asignación), por ejemplo,

entero intValor = 0;

Esto declara que “ intValue ” es el nombre de una ubicación de memoria que


es lo suficientemente grande como para almacenar un entero de 32 bits, con un
valor inicial de cero. La convención de nombres comúnmente usado para variables
es Camello (camello) caso, dónde el nombre comienza con a minúscula carta,
incorporado palabras comenzar con mayúscula, y No Se utilizan guiones bajos.
Puedes ver que el ejemplo anterior ( “ intValue ” ) utiliza mayúsculas y
minúsculas en Camel. La única diferencia entre las mayúsculas y minúsculas en
Pascal y Camel es si la primera letra está en mayúscula o minúscula.
Si a La variable se declara localmente En un método (como “ principal ” ), entonces es
debe
ser inicializado específicamente. Si simplemente declara una variable sin
inicializarla, solo obtendrá Una advertencia de la compilador. Sin embargo, si
Intentas Si hace referencia a una variable no inicializada en otras partes del
código, obtendrá un error del compilador.
Variables poder ser reasignado a nuevo valores después ellos tener estado
declarado, y se le puede asignar el valor de alguna otra variable, por ejemplo,

// reasignar intValor a a diferente literal


intValor = 5;

// asignar uno variable a el valor de otro int


otroIntValue = intValue;

También se pueden declarar varias variables del mismo tipo en una sola
declaración, separadas por comas, por ejemplo,
entero miVar1 = 0, miVar2 = 0;
38 3 Data Types, Arithmetic and
Arrays
3.1.2 Literales y el compilador

Cuando nosotros asignar variables a literales, allá son alguno asuntos con el
compilador eso debemos mirar afuera para. Para ejemplo, a literal entero número
es ficticio por el compilador para que sea un “ int ” , por lo que esta línea de
código está bien.

entero miNumero = 9; // entero es por defecto entero número


tipo

Sin embargo, no pudimos realizar la siguiente tarea porque el valor es


demasiado grande para caber en una variable “ int ” :

entero miBigNumber = 2147483648; // no compilar

Cambio el tipo de el variable de “ int ” a " largo " es solo parte de el solución:

largo miBigNumber = 2147483648; // no compilar

Esto todavía provoca un error del compilador, porque el valor literal dado no
puede ser un “ int ” . pero el compilador asume eso a literal entero número es un "
int " . Por lo tanto, Debemos agregar un “ Yo ” hacia fin de el literal asi El
compilador lo hará Trátalo como a " largo " tipo de datos en lugar de un “ int ” :

largo miBigNumber = 2147483648L;


// voluntad compilar (El o yo = largo)

La “ L ” No tiene que estar en mayúsculas, sino en minúscula “ l ” se parece


demasiado al dígito “ 1 ”, por lo que la letra mayúscula es mucho más fácil de
leer.
Una situación similar ocurre con los números de punto flotante . La siguiente
asignación de variable es correcta porque el tipo predeterminado para los literales
de punto flotante es double .

doble d = 3.5;
// voluntad compilar – flotante punto literales son dobles

Esto, por otro lado, no se compilará, porque un float tiene una capacidad de
almacenamiento menor que un double:

flotar F = 4.56; // no compilar

De nuevo, el solución es a usar a carta sufijo a cambiar el tipo de el literal, en


Este caso un “ F ” o “ f ” a indicar eso este debería ser tratado como a flotar
por el compilador:

flotar F = 4,56 °F; // voluntad compilar (F o F = flotar)

Aunque algo de esto pueda parecer confuso, lo más importante que se puede
sacar de ello es que siempre que tú declarar numérico variables, tú debería trabajar
en el base eso “ int ” y “ doble ” son los tipos predeterminados con los que se
trabaja. Utilice uno de los otros tipos únicamente si tiene a bien razón a hacer
3.1 Java Primitive Data 39
Types
entonces, semejante como Necesitando a ahorrar memoria en muy grande
matrices.
40 3 Data Types, Arithmetic and
Arrays
Eso forma, tú son menos probable a venir arriba contra mecanografía problemas
entre variables y literales.
Nota
Los números flotantes y dobles no son adecuados para algunos cálculos de punto
flotante , como las transacciones financieras en las que se requieren valores
precisos. Para estos fines, debe utilizar la clase BigDecimal.

3.1.3 Booleano Variables

Booleano variables son muy simple desde ellos poder solo ser asignado el valores
“ verdadero ” o " FALSO " . Estos valores poder ser asignado como literales
(cual debe ser todo en más bajo caso) o ellos poder también ser asignado el
resultado de un expresión eso devoluciones a Booleano valor.

// asignación de booleanos
boolean Está lleno =
verdadero; isFull = falso;

3.1.4 Unicode Personajes y Escapar Secuencias

A “ tipos de gráficos ” variable puede sostener a soltero 16 bits personaje de el


estándar Tabla Unicode (una extensión de la antigua tabla ASCII de 8 bits). Se
puede asignar un carácter utilizando un literal entre comillas simples:

carbonizarse miChar = 'do';


// asignar el literal personaje 'do' a a carbonizarse variable

Él poder alternativamente ser asignado el Unicode valor de el personaje:

carbonizarse miOtroChar = 99;


// asignar el Unicode valor de 'c' (99)

El valor máximo de carácter Unicode es 65535. Esto es mucho más alto que el
valor máximo posible que puede almacenar en un “ short ” , aunque un short
también tiene 16 bits de longitud. Esto se debe a que un “ char ” La variable no
almacena números negativos, ya que la tabla Unicode solo contiene valores
positivos, por lo que no es necesario reservar espacio para almacenar un signo.
Un " char " La variable puede contener una de las “ secuencias de escape ”
Caracteres (caracteres de control y otros caracteres especiales) que están
precedidos por la barra invertida (\). Aunque parezca que contienen dos caracteres,
siguen representando caracteres " individuales " . Esto se debe a que las
secuencias de escape también hacen referencia a números de la tabla Unicode. Por
ejemplo, “ \n ” representa el carácter de nueva línea (número Unicode 10). Las
secuencias de escape se muestran en la Tabla 3.2 .
3.1 Java Primitive Data 41
Types
Mesa 3.2 Escapar secuencia personajes
Retroceso \b Pestaña horizontal \t
Soltero cita " ' Doble cita " "
Nuevo línea \norte Carro devolver \r
Forma alimentar \F Barra invertida \\
Carácter \xxx Hexadecimal Valor de \uxxxx
Unicode octal carácter Unicode
valor

La mayoría de estos son aplicables al formato de salida. Tenga en cuenta que,


dado que la barra invertida es el escapar personaje, él debe tener es propio escapar
secuencia a ser usable en otro contexto (por ejemplo, en una ruta de archivo de
Windows).
A continuación se muestran un par de ejemplos sencillos. Primero, asignamos
el carácter de secuencia de escape de tabulación a una variable char:

carbonizarse pestaña = '\t';

Los caracteres de secuencia de escape también se pueden incrustar en literales


de cadena, como en este ejemplo:

Cadena cotización =
"Java es C++ \"sin el armas de fuego, clubs y cuchillos\"";

Si nosotros eran a mostrar este Cadena en el consola, nosotros quería ver:

Java es C++ "sin el armas de fuego, clubs y cuchillos"

3.1.5 Variable Alcance

Antes emocionante en, allá es uno más importante cosa a entender acerca de
variables, que es su alcance. Puede recordar que el cuerpo de una clase y el cuerpo
de la clase “ principal ” método, están rodeados por llaves { … }. Estas llaves
definen el alcance de esos elementos de código. Cuando declaras una variable, su
alcance está definido por el bloque de código, definido entre llaves, dentro del cual
aparece. Las variables no se pueden usar en el código hasta que se hayan
declarado y no se pueden usar fuera del alcance dentro del cual se declararon.

{
entero miVariable = 3;
// poder usar 'myVariable' ahora
}
// 'miVariable' es ahora afuera de alcance y no poder ser
usado
42 3 Data Types, Arithmetic and
Arrays
La convención habitual en Java es declarar las variables lo más cerca posible
del punto de primer uso posible. Sin embargo, debido a los requisitos de alcance,
esto puede terminar estando algo alejado del primer uso de la variable. En el
ejemplo anterior, tendríamos que declarar “ myVariable ” fuera del alcance de
estas llaves para poder acceder a él después de la llave de cierre, por ejemplo,

entero miVariable = 0;
{
miVariable = 3;
// poder usar 'myVariable' ahora
}
// 'miVariable' es aún en alcance y poder utilizarse

Nota
Si no tenemos un valor específico que queramos usar para inicializar una
variable numérica, la convención normal es establecerlo en cero.
Ejercicio 3.1 Aquí es a " principal " método que contiene alguno aleatorio
fragmentos de código que asignar variables de diferente tipos. Él contiene varios
adrede errores relativo a literales y alcance. Corrija estos errores aplicando su
conocimiento de los diversos conceptos eso tener estado introducido entonces
lejos en este capítulo. El método contiene Algunas llaves no cumplen ninguna
función útil; simplemente están ahí para permitirle demostrar su comprensión del
alcance. Al realizar los cambios, no cambie ninguno de los tipos de datos; cambie
únicamente los valores o la forma en que se expresan.

paquete com.foundjava.chapter3;

público clase Ejercicio de tipos

de datos {
público estático vacío
principal(Cadena[] argumentos) { largo
myBigNumber = 2147483648;
flotante myFloat = 4.56;
booleano Está lleno =
Falso; char myChar = -1;
{
byte mi Byte = 127;
}
Cadena filePath = "com\javabook\chapter3";
System.out.print("Valor de miBigNumber = ");
System.out.println(myBigNumber);
System.out.print("Valor de myFloat = ") ;
System.out.println(myFloat) ;
System.out.print("Valor de isFull = ");
System.out.println(isFull);
System.out.print("Valor de myChar = ") ;
System.out.println(myChar);
System.out.print("Valor de myByte = ");
System.out.println(myByte);
System.out.print("Valor de filePath = ");
System.out.println(filePath);
}
}
3.1 Java Primitive Data 43
Types
3.2 Aritmética y Otro Operadores

En el anterior sección, nosotros miró en el primitivo datos tipos disponible en


Java, incluido varios diferente tipos de número (entero, doble, etc.) y sierra a
Algunos ejemplos de cómo asignar valores a variables de estos tipos y mostrarlos.
En esta sección, veremos cómo se pueden usar las variables en instrucciones
aritméticas y algunas cuestiones asociadas relacionadas con el procesamiento de
diferentes tipos de datos en una expresión. La mayoría de los programas usan
variables numéricas para hacer operaciones aritméticas, incluso si esto no es más
complicado. que acuerdo a contar de algo. Aritmética en Java poder ser
terminado con cinco operadores : el cuatro familiar aritmética operadores eso son
común Para la mayoría
programación idiomas, más a resto operador.

Agregar +
Sustraer —
Multiplicar *
Dividir /
Resto %

3.2.1 Aritmética Declaraciones

Todas las declaraciones aritméticas en Java tienen el mismo formato, es decir, que
una variable a la izquierda de un operador de asignación (=) se hace igual al
resultado de una expresión aritmética a la derecha:

variable = expresión ;

El aritmética expresión voluntad usar a combinación de operadores y


operandos , los valores sobre los que se está operando. Estos pueden ser tanto
variables como literales. Algunos ejemplos (arrogante eso el tamaño de a clase de
estudiantes debe ser un entero) podría ser:

doble Pago neto = salario bruto – deducciones;


doble distanciaEnKm = distanciaEnMillas * 1.6093;
doble perímetro = alto * 2 + ancho * 2;
entero Número de grupos de cuatro = tamaño de clase / 4;
entero estudiantesNoEnGrupoDeCuatro = tamaño de clase % 4;

Al escribir expresiones que contienen más de un operador aritmético, necesitas


a ser consciente de " orden de precedencia ” , eso es, cual parte de el expresión
¿Se evaluará primero? Existe una tabla estándar para esto que se aplica a
prácticamente todos los idiomas, pero la parte más importante es la siguiente:
() paréntesis
tener a más alto orden de precedencia que
*/% multiplicar, dividir y resto,
cual tener a más alto orden de precedencia que
3.2 Arithmetic and Other 43
Operators
+ − sumar y restar Considere
este ejemplo:

entero resultado = 4 + 2 * 3;

Desde el multiplicación voluntad ser ejecutado antes el suma, el resultado quería ser
10. Si este es no qué nosotros desear, nosotros poder usar paréntesis a cambiar el
orden en qué partes de una expresión se evalúan. Para forzar que la suma se
ejecute primero, podemos escribir

entero resultado = (4 + 2) * 3;

Como era de esperar, esto da como resultado 18, ya que ahora la suma se
realiza antes que la multiplicación. Si dos operadores de la misma precedencia (es
decir, sumar y sustraer, o multiplicar, dividir y resto) aparecer en el mismo
expresión, entonces se evalúan de izquierda a derecha. Por ejemplo,

entero resultado = 10 * 3 / 2;

evaluará la multiplicación antes que la división, dando como resultado 15. El


operador de resto funciona de manera bastante simple, como podemos ver en este
ejemplo:

entero Número de grupos de cuatro = tamaño de clase / 4;


entero estudiantesNoEnGrupoDeCuatro = tamaño de clase % 4;

Si el valor de el “ tamaño de clase ” variable sucedió a ser 21, “


númeroDeGruposDeCuatro ” contendría 5 (el resultado de dividir 21 por 4)
mientras que “ stu- dentsNotInGroupOfFour ” contendría 1 (el resto de dividir 21
por 4). Un resto entero se conoce generalmente como " módulo " . pero como
también podemos usar esto operador con punto flotante datos tipos, él es no
estrictamente discurso a módulo
operador.

3.2.2 Incremento y Decremento Operadores

Existen operadores sencillos para incrementar o decrementar una variable en uno.


El más utilizado es probablemente el operador “ ++ ” , que suma uno a una
variable, de la siguiente manera:

entero encimera =
1; contador++;

En este ejemplo, el entero variable " encimera " quería ser incrementado a
sostener el valor “ 2 ” . Podemos ver que el operador de incremento es
simplemente una forma abreviada de

encimera = encimera + 1;
44 3 Data Types, Arithmetic and
Arrays
Allá es también a decremento operador, cual lógicamente suficiente es “ −− ”
y resta uno de una variable:

encimera-- ;

Este es taquigrafía para

encimera = encimera - 1;

3.2.3 Prefijo y Sufijo Operadores

Los ejemplos anteriores de los operadores de incremento y decremento utilizaron


“ postfijo ”. notación (es decir, el “ ++ ” o “ −− ” aparece después de la
variable). También podemos utilizar la notación “ prefijo ” (el operador aparece
antes de la variable):

Postfijo notación: contador++ O contador−−

Prefijo notación: ++contador O −−contador

Este marcas No diferencia si el operador es no usado como parte de a Más


grande expresión pero poder ser Significativo si él es. Si uno de estos operadores
es usado en prefijo notación, Entonces el operador se ejecutará antes que el resto
de la expresión, pero si se utiliza la notación posfija, se ejecutará después. Por
ejemplo, si el valor de nuestra variable “ contador ” se va a asignar a otra variable
en la siguiente expresión:

entero encimera = 1;
entero recuento actual = contador++;

El valor de “ x ” será 1, porque el operador de incremento (que suma 1 a “


contador ” ) se evaluará después de la asignación del valor de contador a “ x ”
(sufijo notación). Con prefijo notación, dónde el incremento acepta lugar antes la
tarea, el valor de “ x ” será 2:

entero encimera = 1;
entero recuento actual = ++contador;

Para evitar confusiones, los operadores de incremento y decremento no se


utilizarán como parte de Más grande expresiones en este libro, y el posfijo
notación voluntad ser adoptado en todos los casos.
3.2 Arithmetic and Other 45
Operators
3.2.4 Asignación Operadores

Los operadores de incremento y decremento son apropiados solo cuando


necesitamos sumar uno a, o sustraer uno de, el existente valor de a variable. Sin
embargo, nosotros también tener taquigrafía para cambio el valor de a variable por
aritmética en es existente valor. En este esquema de sintaxis, “ ? ” significa
cualquiera de los cinco operadores aritméticos:

En general términos: variedad = variedad ? norte


Poder ser reemplazado con: variedad ? = norte

Por lo tanto, a agregar dos a “ miVariable, ” nosotros podría reemplazar:

miVariable = miVariable + 2; con: miVariable + = 2;

Variables poder ser decrementado similarmente, entonces a sustraer dos de “ miVariable,



nosotros podría escribir

miVariable -= 2;

Similar ejemplos para el otro operadores podría ser


myVariable = myVariable * 2; es equivalente a myVariable *= 2;
myVariable = myVariable / 2; es equivalente a myVariable /= 2;
myVariable = myVariable % 2; es equivalente a myVariable %= 2;

3.2.5 Promoción y Tipo Fundición

Cuando Java realiza cálculos en mezclado datos tipos, a proceso de promoción


tiene lugar. En este proceso, el operandos Perteneciente a más estrecho datos tipos
(es decir menor en términos de almacenamiento máximo) se amplían
automáticamente al tipo más amplio . Por ejemplo, si nosotros tener un entero y a
largo en un aritmética expresión, el entero valor se convertirá automáticamente en
un largo. Si tenemos tanto float como doubles en un cálculo, los float se
convertirán en doubles, y así sucesivamente. Dado que se trata de un cálculo
automático, proceso, tú puede preguntarse por qué nosotros necesidad a saber
acerca de él, pero este Esto debería quedar claro a medida que analizamos algunos
ejemplos.
No todas las conversiones entre tipos de datos son automáticas. A veces
necesitamos una variable de un tipo pero tenemos algo un poco diferente. Los
valores que se devuelven de los métodos no siempre son exactamente del tipo que
queremos, por lo que a veces necesitamos convertirlos utilizando una técnica
llamada " conversión de tipos " . Esto nos permite convertir de un tipo de
número a otro tipo compatible o de un tipo de objeto a otro. a otro. Este es a
menudo requerido dónde nosotros necesidad a poner a valor en a menor o
46 3 Data Types, Arithmetic and
Arrays
menos preciso tipo que el actual uno. El compilador previene accidental pérdida
de datos o precisión al no permitir que se asignen tipos más grandes a tipos más
pequeños, por lo que no le permitirá, por ejemplo, asignar un valor doble a una
variable flotante (que es más pequeña), aunque el valor real asignado en tiempo
de ejecución podría caber fácilmente en un flotante . Tipo fundición es a forma
de señalización a el compilador eso nosotros son preparado a riesgo de esta
conversión de tipo. La sintaxis es

(tipo nosotros desear) valor tenemos

Por ejemplo, podríamos tener un valor doble que queremos convertir en un


valor flotante . Si “ doubleValue ” es de tipo double, podemos convertirlo
a tipo float de esta manera:

flotar valorflotante = (flotante)dobleValor;

Aunque esto pueda parecer un poco oscuro, es una técnica bastante útil,
particularmente cuando nosotros son laboral con objetos bastante que primitivo
datos tipos, como nosotros Lo veremos en capítulos posteriores.

3.2.6 Cadena Concatenación

Antes de continuar con el análisis de operadores y conversiones de tipos, puede


ser apropiado analizar brevemente la concatenación de cadenas. Este es el proceso
mediante el cual se pueden unir varios tipos de datos (incluidas otras cadenas) en
una cadena para formar una cadena más grande de caracteres mediante el operador
“ + ” . En este proceso está implícito un tipo conversión eso acepta otro datos
tipos y Convierte su valores a Cadena datos. En hecho, este datos conversión es
qué sucede cuando sea tú mostrar a variable utilizando “ System.out.println ” .
Cualquiera que sea el tipo original de la variable, su valor se convierte en una
cadena de caracteres Unicode antes de mostrarse.
En este ejemplo, declaramos y asignamos un “ int ” , y luego concatenamos su
valor con una cadena:
entero miVariable = 99;
System.out.println("El valor de miVariable es " + miVariable);

Este código imprimirá “ El valor de myVariable es 99 ” en la consola.


También puedes usar el signo “ +” = ” operador como una abreviatura para
concatenar cadenas, de forma muy similar a las abreviaturas de asignación que ya
hemos visto utilizadas con primitivas, por ejemplo,

Cadena saludo = "Feliz cumpleaños";


Cadena mensaje = saludo + = "Señor. Presidente";
System.out.println(mensaje);

El importante cosa a oso en mente con Cadena concatenación es eso él es usando el


“ + ” operador en a diferente forma a cómo él es usado en suma. Él solo obras
para
3.2 Arithmetic and Other 47
Operators
concatenación cuando en el menos uno Cadena es ser usado en un expresión. Para
Ejemplo, aquí nosotros usar el “ + ” operador con “ Sistema.out.println ” pero solo
usar “ carbón ” datos tipos:

Sistema.out.println('a' + 'b' + 'do');

En cambio de conseguir “ abc ” impreso en el consola nosotros voluntad


conseguir 294, desde el El operador lo hará agregar el Unicode valores de el
personajes juntos (es decir 97 + 98 + 99).
Por el contrario, esto imprimirá “ abc ” porque el primer carácter es una
cadena (tenga en cuenta las comillas dobles), no un char:

Sistema.out.println("a" + 'b' + 'do');

3.2.7 Bit a bit Operadores

Los operadores bit a bit (AND, OR, XOR), que se muestran en la Tabla 3.3 , se
pueden aplicar a tipos enteros a nivel de bit y controlan qué valor resulta cuando
se opera sobre dos bits en una posición dada en los dos operandos. En la mayoría
de los casos, estos no afectan mucho en Java solicitud desarrolladores. Allá es, sin
embargo, uno excepción A esto, que es el operador OR bit a bit (el carácter “ | ” ).
A nivel de bit, este operador acepta dos poco valores y, como poder ser visto en
Tabla 3.3 , proporciona el resultado de “ 1 ” como largo como en el menos uno de
el dos pedacitos ser operado en es a “ 1. ” Este operador se utiliza en algunos
componentes de biblioteca en Java como una forma de combinar diferentes
valores de configuración. Por ejemplo, como veremos en el Capítulo 17 , el
operador OR bit a bit se puede utilizar para combinar estilos de fuente en negrita y
cursiva.
Ejercicio 3.2 En este ejercicio, utilizamos algunos operadores aritméticos.
También puedes utilizar la concatenación de cadenas al mostrar los resultados. No
olvides elegir los tipos de datos adecuados para las variables. La unidad monetaria
que se utiliza aquí es el simoleón (§), tal como se utiliza en la serie de juegos Los
Sims de Electronic Arts.

• Crear a clase con a principal método.


• En el método principal, calcule el consumo de combustible de hidrógeno de un
automóvil con celda de combustible que justo costo §72 a llenar arriba a el
arriba de el tanque en §1.80 a litro después recorrió 390 km desde la última
vez que se llenó hasta el tope con combustible.
• Mostrar el número de Kilómetros viajado por litro.
• Mostrar el número litros usado por 100 kilómetros.

Tabla 3.3 Los operadores bit a bit1, bit2 & (AND) | (OR) ^ (XOR)
bit con ejemplos de resultados de
0, 0 0 0 0
operante en Valores de 2 bits
0, 1 0 1 1
1, 0 0 1 1
1, 1 1 1 0
48 3 Data Types, Arithmetic and
Arrays
3.3 Matrices

Anteriormente en este capítulo notamos que una matriz de objetos String aparece
como un argumento para la función “ principal ”. método. En esta sección,
veremos cómo se pueden usar las matrices para sostener a recopilación de valores.
Un La matriz consta de de un fijo número de elementos que tienen todos el mismo
nombre pero un número de índice diferente, que aparece entre corchetes. El
elementos en un formación son siempre indexado de cero hacia arriba. Cifra 3.2
muestra eso el elementos de un formación que contiene cuatro valores quería ser
numerado de cero a tres.
Nosotros tener ya visto un ejemplo de un formación ser referido a cuando
nosotros declarar un método “ principal ” :

público estático vacío principal(Cadena argumentos[])

“ argumentos ” se refiere a un formación de Instrumentos de cuerda eso poder


ser aprobado a a programa cuando él comienza a ejecutarse. Sin embargo, en esta
sección veremos cómo crear y administrar nuestros propios arreglos dentro del
método principal.
Una matriz puede contener tipos primitivos u objetos de un solo tipo de datos,
especificado cuando nosotros declarar el formación. Matrices ellos mismos son
referencia tipos, y se declaran diferentemente de primitivo tipos, como nosotros
voluntad ver cuando nosotros mirar en el Sintaxis para crearlos. Los arreglos
tienen un tamaño fijo y se controlan sus límites, lo que significa que intentar
acceder a un índice más allá de los límites superior o inferior del arreglo provocará
una excepción en tiempo de ejecución (es decir, el código se compilará pero
fallará cuando se ejecute). Los arreglos no son muy flexibles ; por ejemplo, no
se pueden redimensionar dinámicamente, pero son una forma eficiente de
almacenar una colección de datos de un solo tipo.

3.3.1 Declarando Matrices

La matriz pasada a “ main ” es ya definido para nosotros como un parámetro,


pero si queremos usar otro matrices en nuestro clases, entonces nosotros debe
declarar a ellos. Un formación referencia Se declara poniendo corchetes vacíos
después del nombre del tipo de datos que deseamos. a almacenar a indicar eso este
es un formación bastante que a soltero valor. Para Por ejemplo, para declarar una
matriz para almacenar valores de tipo int, escribiríamos:

entero[] miMatriz;

0 1 2 3

Higo. 3.2 Índice de matriz números comenzar en cero


3.3 49
Arrays
Los objetos de matriz se crean como otros objetos utilizando la palabra clave "
new " , seguida por el datos tipo a ser almacenado y el tamaño de el formación eso
nosotros desear. El tamaño de la matriz aparece en cuadrado soportes; para
ejemplo, este crea un formación eso poder sostener tres valores “ int ” .

miMatriz = nuevo int[3];

Nosotros poder combinar declarando el referencia y creando el formación en a


soltero línea. Tenga en cuenta que los corchetes aparecen dos veces, una para
indicar que la referencia es a una matriz y otra para establecer el tamaño de la
matriz:

entero[] miMatriz = nuevo int[3];

Este medio eso el formación tiene tres elementos, nombrado “ miMatriz[0] ” , “


miMatriz
[1] ” y “ myArray[2] ” . Debido a que los números de índice de la matriz
comienzan en cero, no existe, por supuesto, “ myArray[3]. ”
Al crear una matriz de un tipo primitivo, se establecerá el valor predeterminado
de cada elemento. Por ejemplo, cada uno de los valores “ int ” en “ myArray ” se
inicializará a cero.

3.3.2 Inicializando Matrices

Podemos asignar diferentes valores a los elementos de la matriz utilizando


números de índice entre paréntesis. a indicar cual formación elemento es ser
accedido. Para ejemplo, este La matriz será contener entero valores representando
el promedio mensual lluvia en milímetros en Auckland, Nueva Zelanda, a partir de
enero:

entero[] Precipitaciones mensuales = nuevo int[12];


lluviamensual[0] = 74;
Precipitaciones mensuales[1] = 81 ;
Precipitaciones mensuales[2] = 86;
//etc…

Asignar los valores iniciales a una matriz de a uno por vez puede ser bastante
tedioso para una matriz grande. Una alternativa es utilizar un bloque inicializador,
en el que se asigna una nueva referencia de matriz a una serie de valores separados
por comas y rodeados por llaves. Por ejemplo, esta matriz se inicializa con 12
valores enteros que representan la precipitación mensual promedio durante un año.

entero[] Precipitación mensual =


{74,81,86,93,100,116,126,111,93,80,84,91};
50 3 Data Types, Arithmetic and
Arrays
El tamaño de la matriz recién creada coincidirá automáticamente con el número
de valores. tú tener proporcionó. En el ejemplo arriba, el formación voluntad tener
12 elementos. Es importante a nota eso un inicializador poder solo ser usado con a
recién declarado Referencia de matriz. No se puede reasignar una referencia
existente a un bloque inicializador.

3.3.3 Accediendo Formación Datos

Los datos de un elemento de matriz se pueden actualizar o recuperar mediante el


número de índice. Por ejemplo, podríamos actualizar el último elemento de la
matriz de precipitaciones y proporcionar un nuevo valor:

Precipitaciones mensuales[11] = 92;

Similarmente, nosotros poder recuperar el valor de cualquier elemento en el


formación y asignar él a una variable de un tipo compatible:

entero Precipitaciones de agosto = Precipitación mensual[7];

O incluir un elemento de un formación en producción:

System.out.println("Marzo lluvia era " +


Precipitaciones mensuales[2]);

Intentar acceder a un elemento de matriz utilizando un número de índice que


está fuera de rango voluntad dirigir a un excepción en tiempo de ejecución (un
excepción voluntad detener programa ejecución en ese punto). Por ejemplo, la
siguiente línea no provocará un error de compilación, pero fallar cuando nosotros
intentar a correr el programa, desde un Matriz de 12 elementos solo tiene índices
en el rango 0 – 11:

Precipitaciones mensuales[12] = 92; // excepción en correr


tiempo

Las matrices solo pueden almacenar valores del tipo especificado por la
referencia y estos tipos son comprobado en compilar tiempo. Para ejemplo, si
nosotros intentó a asignar a literal Si duplicamos un elemento de nuestra matriz,
no se podrá compilar:

Precipitaciones mensuales[0] = 74.3; // compilador ¡error!

3.3.4 El Formación "longitud" Campo

Los arreglos tienen un campo público de “ longitud ” , que puede ser útil conocer
para evitar sobrepasar los límites del arreglo. Como veremos en un ejemplo
posterior, el campo de “ longitud ” se puede utilizar para controlar un
bucle.
3.3 51
Arrays
System.out.println(Precipitaciónmensual.length ) ;
// '12' impreso en consola

3.3.5 Multidimensional Matrices

Java también apoya multidimensional matrices, cual son declarado usando


múltiple Pares de corchetes. Por ejemplo, este fragmento de código se relaciona
con una matriz bidimensional que contiene dos nombres para cada mes del año
(versión corta y versión larga).

Cadena[][] Nombres de los meses = nuevo Cadena[12][2];


monthNames[0][0] = "Enero";
monthNames[0][1] = "Enero";
nombresdemes[1][0] = "febrero";

Nombres de los meses[11][1] = "Diciembre";

3.4 Precedencia, Tipo Fundición y Promoción por Ejemplo

Para explorar algunos de los conceptos que hemos introducido en este capítulo,
trabajaremos con el siguiente ejemplo:

• Nosotros voluntad crear un formación de tipo entero con tres elementos,


que contiene diferentes valores enteros.
• Usando el aritmética operadores, nosotros voluntad calcular y imprimir afuera
el significar promedio de los tres valores.

Vamos a comenzar con una implementación deliberadamente ingenua, que


tiene como objetivo a espectáculo el importancia de comprensión orden de
precedencia, fundición, y promoción en Java. Aquí se muestra la declaración e
inicialización de una matriz de tipo int que contiene tres valores. Si tú trabajar
afuera el significar promedio de estos tres valores Ya verás que es es cuatro y un
tercero, Así como a punto flotante número él voluntad ser acerca de 4.3 ( “
acerca de ” , ya que el 3 será recurrente).

entero[] matriz int = {3,4,6};

He aquí una solución deliberadamente simplista para calcular la media


promedio, sumando los tres valores y dividiéndolos por tres:
entero significar = matriz int[0] + matriz int[1] + matriz
int[2] / 3; System.out.println(media);
52 3 Data Types, Arithmetic and
Arrays
¿Qué sucede si ejecutamos el programa? La respuesta aparece en 9, que está
muy lejos de 4.3. Con suerte, habrás notado que el orden de precedencia
predeterminado voluntad no dar el resultado eso es necesario. Porque el división
tiene a orden superior de precedencia que el suma, el tercero elemento en el
formación (cual tiene El valor 6) se divide por 3 antes de que se realicen las dos
sumas. Para solucionar ese problema, podemos poner paréntesis alrededor de las
sumas para asegurarnos de que se ejecuten antes de la división:
entero significar = (intArray[0] + matriz int[1] +
matrizint[2]) / 3; System.out.println(media);

Esto es una mejora, ya que ahora obtenemos la respuesta " 4 ". que se acerca
más a lo esperado, pero aún no es la respuesta correcta. Por supuesto, sabemos que
necesitamos obtener un número de punto flotante como resultado, por lo que
deberíamos cambiar el tipo de datos de “ mean ” a “ double ” en lugar de “ int ”
:

doble significar =
(intArray[0] + matriz int[1] + matrizint[2]) / 3;
System.out.println(media);

Esto supone una mejora adicional, ya que el resultado ahora sale como “ 4.0 ”.
que es claramente un número de punto flotante, pero ¿dónde está el “ .333 … ” ?
Como ya habrás deducido, el problema es que todos los operandos de la expresión
son números enteros. Este medio eso el resultado de un expresión usando solo
números enteros voluntad dar un resultado que también es un entero, que en este
caso trunca el valor de punto flotante eso nosotros desear. A rápido y sucio
arreglar podría ser a doblar el “ 3 ” eso nosotros dividir por en un doble literal ( “
3.0 ” ). Esto tendrá el efecto de promover los otros operandos a dobles también.

doble significar =
(intArray[0] + matriz int[1] + matrizint[2]) / 3.0;
System.out.println(media);

Este es mucho mejor. Nosotros ahora conseguir el correcto resultado de


4.333333333333333 (o al menos como correcto como nosotros son yendo a
conseguir intentando a representar a tercero usando aritmética de punto flotante
en un tipo primitivo). Sin embargo, usar ese literal no es una buena práctica de
codificación. desde él es un ejemplo de a “ magia número " , a literal valor eso
aparece en un programa sin un origen claro. Aquí, el número mágico representa el
número de elementos en la matriz, Así es quería ser mejor para utiliza el campo
de “ longitud ” de La matriz:

doble significar =
(intArray[0] + matriz int[1] + matrizint[2]) / intArray.length;
Sistema.out.println(media);
3.4 Precedencia, Tipo Fundición y Promoción por Ejemplo 53

Lamentablemente, ahora hemos perdido el valor double que estaba activando la


promoción de los operandos, por lo que volvemos a obtener “ 4.0 ” como
respuesta. Ahora, necesitamos activar la promoción a double de otra manera.
Podemos hacer esto convirtiendo uno de los operandos (puede ser cualquiera de
los cuatro) al tipo double. En este ejemplo, convertimos el primer operando al tipo
double.
doble significar =
((doble)intArray[0] + matriz int[1] + matrizint[2]) /
intArray.length; Sistema.out.println(media);

Finalmente, nosotros conseguir el correcto resultado sin a magia número. Tú


podría, de curso, reparto más que uno operando pero allá es No punto, desde
promoción hace eso para usted. Este ejemplo demuestra no sólo que cuestiones
como la precedencia, el reparto y la promoción necesidad a ser consideró con
cuidado cuando laboral con primitivo datos tipos, pero también eso código
necesidades a ser con cuidado Probado a controlar eso el resultado nosotros son
Conseguir es, en hecho, correcto. En el próximo capítulo, nosotros voluntad
introducir código eso poder realizar selecciones, lo que nos permite, por
ejemplo, escribir código de prueba que pueda verificar si un resultado es, o es no,
correcto. En Cap. 10 nosotros voluntad introducir el JUnit pruebas estructura de
modo que
todo programa Salidas poder ser validado.
Ejercicio 3.3 Este ejercicio implica haciendo alguno aritmética en números
almacenado En matrices. Las distancias expresadas en kilómetros se convertirán a
sus equivalentes en millas. y náutica millas. Uno kilómetro es igual 0,62 millas y
0,54 náutico millas.

1. Crear a nuevo clase con a método “ principal ” .


2. En " principal, " crear y inicializar un formación de tipo " doble " que contiene el
valores
0,62 y 0,54 (representando el conversión multiplicadores).
3. Crea e inicializa una matriz de tipo “ int ” que contenga los valores 2, 5 y 10
(que representan distancias en kilómetros).
4. Para cada elemento de la matriz de enteros, calcule y muestre las distancias
equivalentes en millas y náutico millas. Usar Cadena concatenación a agregar
texto etiquetas para que la salida sea comprensible.

3.5 Resumen

En este capítulo hemos visto los distintos tipos de datos disponibles en Java y
hemos diferenciado entre tipos primitivos, que incluyen números, caracteres y
valores booleanos. y referencia tipos semejante como matrices, y cómo variables
de estos Los tipos pueden Se deben declarar e inicializar. Se introdujeron los
operadores aritméticos de Java y se dieron ejemplos de código. presentado cómo
ellos poder ser usado en aritmética expresiones. Nuestro ejemplos de orden de
precedencia, promoción y tipo fundición tener mostrado cómo importante él es ser
consciente de el forma eso Java administra el relaciones entre diferente datos
54 3 Data Types, Arithmetic and
Arrays
tipos, y cómo nosotros poder escribir código a hacer explícito datos tipo
conversiones a garantizar que nuestros programas generen los resultados
correctos. El capítulo también demostró cómo Strings (cual son tipos de
referencia) poder ser concatenado juntos y cómo matrices Puede ser usado a grupo
juntos relacionado datos en a soltero estructura eso poder ser accedido por un
índice basado en cero. El sintaxis para declarar y La inicialización de matrices fue
examinados, incluidas matrices que tienen múltiples dimensiones.
Control Estructuras
4

En este capítulo, analizamos las principales estructuras de control en Java que


permiten la selección y la iteración. Para la selección, cubrimos las instrucciones “
if-else ” , “ switch ” , “ break ” y “ continue ” . y el ternario operador. Como
Bueno como cubierta el " cambiar " declaración que ha estado en Java desde el
comenzando, nosotros cubrir el Se introdujo la expresión switch En Java 14. Para
iterar sobre el código, exploramos los bucles “ while ” , “ do-while ” y “ for ” .
Vemos cómo “ for ” Los bucles se pueden usar para iterar a través de matrices,
incluida la matriz de cadenas que se pasa al método " principal " .
En el contexto de las estructuras de control, vale la pena señalar que, si bien
Java no tiene estructuras no estructuradas, " ir a " declaraciones, " ir a " es a
reservado palabra, impidiendo él de ser utilizado para cualquier otra cosa.

4.1 Haciendo Trozos escogidos

El código ejemplos nosotros tener visto en anterior capítulos tener estado


secuencias de Sentencias Java, pero a veces también necesitamos hacer
selecciones, elegir entre más de un curso de acción posible. Esto se puede hacer
usando sentencias “ if ” .

4.1.1 "si" Declaraciones

Una declaración “ if ” consta de cursos de acción y una condición, que aparece


entre paréntesis después del “ if ” . Una condición es una expresión que devuelve
un valor de tipo booleano. y cual curso de acción es tomado depende en si eso
booleano El valor es verdadero o falso. Una forma de proceder puede ser, de
hecho, no hacer nada.

© Saltador Naturaleza Suiza Estado 2020 55


D. Parsons, Foundational Java , Textos en Ciencias de la
Computación,
56 https://doi.org/10.1007/978-3-030-54518-5_43 Data Types, Arithmetic and
Arrays
56 4 Control
Structures
" si " declaraciones mirar como este:

La parte “ else ” es opcional. Si la condición es falsa y no hay ninguna parte “


else ” , no se ejecutará ningún código en la declaración condicional.
El código después de “ if ” o “ else ” puede ser una sola declaración o un
bloque de varias líneas. Si es una sola declaración, el uso de llaves es opcional,
como se muestra aquí:

Sin embargo, él es siempre Más seguro a usar tirantes alrededor el declaración


a evitar confusión si, para ejemplo, tú agregar más pauta de código más tarde.
Aquí, sin tirantes, el La segunda línea no será parte de la declaración “ si ”

Aquí, todo pauta de código dentro el tirantes voluntad ser considerado como parte de
el " si "
declaración:

Estos declaraciones poder también ser anidado adentro cada otro a cualquier nivel,
entonces eso un " si "
o un " demás " declaración poder contener otro Declaraciones " si " , como mostrado aquí:
4.1 Making 57
Selections

4.1.2 operadores relacionales y booleanos

Cuando escribiendo cualquier amable de condicional declaración, incluido ambos


" si " declaraciones y los bucles que se tratan más adelante en este capítulo,
necesitamos expresar condiciones que comparen valores (variables, literales u
otras expresiones) utilizando operadores relacionales, de igualdad y de
desigualdad. Los símbolos utilizados en Java se muestran a continuación. en la
Tabla 4.1 , junto con algunos ejemplos de cómo podrían usarse en una declaración
“ si ” .
El relacional operadores poder solo ser usado con numérico primitivos
(incluido " char " datos), mientras el igualdad y desigualdad operadores poder ser
usado con cualquier tipo de datos (incluido referencia tipos semejante como "
Cadena " ). El operador eso poder causa el la mayoría de los errores cuando
escribiendo código es el igualdad operador ( “ == ” ). Este es porque él poder ser
fácilmente confundido con el asignación operador, cual es a soltero “ = ”
carácter. La tarea operador es nunca usado a comparar valores, solo a asignar a
ellos a variables. Todas estas expresiones devuelven “ verdadero ” o “ falso ” .
Para evaluar condiciones más complejas, nosotros poder usar Booleano
operadores a combinar múltiple relacional o expresiones de igualdad. El Java
Implementaciones de el tres Booleano operadores (Y, O,
NO), a lo largo de con alguno ejemplos, son mostrado en Mesa 4.2 .

Mesa 4.1 Relacional y igualdad operadores


Condición Operador Ejemplo
Igual a Igualdad
No igual a Desigualdad
Menos que Relacional
Menos que o igual a
Mayor que que
Mayor que que o igual a
58 4 Control
Structures
Mesa 4.2 Booleano operadores En Java
Boolean Java Meaning Example
operator operator
AND Return true if both sides
of the expression are
true
OR Return true if at least
one side of the
expression if true
NOT Return true if the
expression is false or
vice versa

El operador “ no ” ( “ ! ” ) puede ser confuso porque devuelve verdadero si la


expresión es FALSO. Para ejemplo, el expresión “ si(!dibujoCambiado) ” en el
La tabla será verdadera si “ drawingChanged ” es falso, es decir, si el dibujo
actual no ha sido modificado entonces " no dibujo cambió " es verdadero.
Nosotros a menudo encontrar este operador ser Se utiliza para probar variables
booleanas “flag” que indican cuándo ha sucedido algo. El operador “ not ” se
combina con la capacidad de hacer una prueba de verdadero, por ejemplo, “ if
(drawingChanged) ” es un igualmente válido expresión, como largo como “
dibujo modificado ” es un valor booleano.
Nota
Los operadores && y || en la Tabla 4.2 son los “ perezosos ” o “
cortocircuitadores ” versiones de estos operadores, que solo evalúan la parte de
una condición que necesitan. Por ejemplo, si el lado izquierdo de una expresión
AND es falso, no hay necesidad de evaluar el mano derecha lado como Bueno
porque ambos lados de el expresión no puedo De manera similar, si el lado
izquierdo de una condición OR es verdadero, no hay necesidad de evaluar el uno
en el bien porque solo uno lado necesidades a ser verdadero. Allá son También
Java Booleano operadores eso fuerza evaluación de el completo expresión. Estos
Utilice operadores de un solo carácter en lugar de dobles, es decir
& Y operador (lleno evaluación)
| O operador (lleno evaluación)
Sin embargo, tú son improbable a necesidad estos operadores muy a menudo.

4.1.3 Usando Selección: El Ejemplo de moneda Clase

El código de nuestro primer ejemplo incluye una selección que utiliza una
declaración " if " . Esta selección se basa en el uso de un número generado
aleatoriamente para representar una moneda que se lanza y cae en cara o cruz.
Para representar el lanzamiento de la moneda, necesitamos generar un valor
aleatoriamente. A simple forma de generando a (seudo) aleatorio número es a
usar el Matemáticas
4.1 Making 59
Selections
clase, cual (como el Sistema clase) es disponible como parte de el estándar Java
bibliotecas. La clase Math tiene una operación llamada “ random ” que devuelve
un valor doble aleatorio. mayor que que o igual a 0.0 y menos que 1.0. En el
código, nosotros asignar el valor de retorno de esta operación en una variable
doble local:

Teniendo consiguió este valor


de el Matemáticas clase, El método entonces usos un " si " declaración para elegir
si la moneda muestra cara o cruz. Si el número aleatorio es menor que 0,5
entonces el acuñar es colocar a “ cabezas ” , de lo contrario él es colocar a “ colas
” . De curso, desde punto de vista de el programa él marcas No diferencia si
nosotros usar " menos que ” o “ mayor que ” , ya que de cualquier manera
tenemos una probabilidad de 50/50 (más o menos).
Este es el completo ejemplo:

Uno posible producción de correr este programa es

El otro posible producción es

4.1.4 El Ejemplo de morir Clase

Este próximo ejemplo hace no agregar cualquier cosa nuevo a nuestro


conocimiento de Java sintaxis pero muestra cómo alguno de el varios técnicas eso
nosotros tener ya introducido, Número aleatorio generación, aritmética
operadores y tipo fundición, puede ser usado en
60 4 Control
Structures
combinación. Más en tono rimbombante, él dirige en un ejemplo dónde nosotros usar un
" si "
declaración a prueba el resultados de nuestro código.
La clase DieExample es similar a la clase CoinExample pero puede generar seis
posible valores bastante que dos (representando el seis caras en a morir). A Para
obtener un número aleatorio en el rango apropiado (1 – 6), utilizamos tanto
aritmética como conversión de tipos. Primero, nosotros generar a aleatorio número
entre cero y uno usando el “ Matemáticas aleatorias ” métodométodo como
hicimos en la clase CoinExample. Luego lo multiplicamos por seis y le sumamos
uno:

Esto nos dará un número de punto flotante (un doble) mayor o igual a 1 y
menor que 7. El número generado es un doble, pero podemos convertirlo para
obtener un entero. postergación cualquier fraccionario parte de el número (a crudo
pero adecuado acercarse):

Este da a aleatorio entero en el rango uno a seis. Aquí es el completo ejemplo

El producción de este programa poder ser cualquier entero en el rango 1 – 6.


Ejercicio 4.1
• Crear a clase con a " principal " método
• En " principal " , generar a aleatorio entero entre 1 y 10 (inclusivo).
• Trabajar afuera de el aleatorio número es extraño o incluso.
• Usando una declaración “ if ” , escriba un mensaje apropiado a la consola que
indique reproduce tanto el entero aleatorio como si es un número par o impar.
4.1 Making 61
Selections

4.1.5 Escribiendo Prueba Código

Ahora que hemos visto cómo escribir código que pueda hacer selecciones, una
aplicación útil es usarlo para probar los resultados de nuestros programas Java.
Escribir una prueba es básicamente acerca de comparando el respuesta tú esperar
con el respuesta el código da tú. Mientras código eso genera aleatorio números es
no el más fácil cosa a prueba, nosotros voluntad Veamos cómo podemos empezar a
crear algún código de prueba para nuestro lanzamiento simulado del dado.
Nosotros Espere el resultado siempre ser un entero en el rango 1 – 6. Desde Java
escribirá asegurar eso el resultado es un entero, nosotros solo necesidad a controlar el
rango. Nosotros poder hacer esto con un “ si … de lo contrario ” declaración. Nota
cómo nosotros usar el Booleano “ && ” (Y) operador para comprobar una
condición compuesta; que el valor sea al menos 1 y no más de 6.

Aquí es el completo clase.


62 4 Control
Structures

Este tipo de prueba es necesario a encontrar errores de codificación Para Por


ejemplo, nosotros podría haber accidentalmente escribió " número aleatorio " += 6
” en cambio de “ Número aleatorio * = 6 ” . Este es un error de tiempo de
ejecución, no un error de compilación, y provocaría que la prueba fallara y nos
hiciera conscientes del problema. Aunque este es un ejemplo pequeño y limitado,
demuestra la idea de que las pruebas deben escribirse en código, en lugar de
hacerse manualmente (por ejemplo, ejecutando el código y verificando los
números que se generan mirándolos). Escribir pruebas en código significa que las
mismas pruebas pueden correr repetidamente sin humano intervención. En grande
sistemas, este ayuda a nosotros a Realizar pruebas de regresión, donde podemos
verificar si la adición de código nuevo a un sistema ha provocado errores en algún
código existente debido a las interacciones entre ellos. En el capítulo 10 nosotros
mirará en el JUnit pruebas herramienta eso poder hacer el proceso de escribiendo
y correr Pruebas muy fáciles.

4.1.6 "cambiar" Declaraciones

Porque un “ si ” La declaración solo puede manejar un máximo de dos cursos de


acción diferentes, él poder ser bastante pesado a controlar todo el posible diferente
Estados de a Variable única. Cuando una selección se basa en una única variable
(número entero) que puede tener muchos valores diferentes, y esos valores se
pueden expresar como números literales, entonces una declaración switch puede
ser útil. La declaración switch se ve así (observe que no hay punto y coma después
de la llave de cierre):
4.1 Making 63
Selections
La variable que se está comprobando debe ser de tipo int, char, short o byte (o
String desde Java 7). No se puede utilizar un valor largo o cualquier tipo de punto
flotante (estas restricciones están relacionadas con las estructuras de
implementación subyacentes dentro del código de bytes de Java) . Cada caso es
a específico valor eso el variable ser Probado Puede tener. El por defecto
cláusula es usado si el valor aprobado a el cambiar hace no coincide con
ninguno de los valores de caso especificados. Esto, al igual que la parte “ else ” de
una declaración “ if ” , es opcional. El cláusula de “ ruptura ” es importante
porque él Envía controlar a el fin de el Declaración de “ cambio ” sin
evaluando cualquier otro casos, de lo contrario, el resto de los casos también se
ejecutarán. Esto puede parecer bastante extraño, pero permite a nosotros a usar a
soltero respuesta a más que uno posible valor. Por ejemplo, nosotros podría
usar él a controlar para ambos casos de a personaje si nosotros Estaban
analizando una cadena de caracteres y no les preocupaba si estaban en mayúsculas
o minúsculas:

Dado que el caso de “ a ” no tiene cláusula de interrupción, si “ aChar ”


contiene una “ a ”, entonces el control pasará al siguiente caso ( “ A ” ) y se
ejecutará ese código.

4.1.6.1 A “cambiar” Ejemplo: El hombre de los dados


En Lucas De Reinhart libro " El Dados Hombre " , el principal personaje en el
historia comienza Para controlar su vida, lanza un dado que determinará sus
acciones. En este ejemplo, hacemos algo similar. Se lanza el dado y luego
comprobamos su valor y mostramos un mensaje. narración a nosotros qué a hacer.
Porque a morir tiene seis posible Estados, nosotros quería Tengo que usar seis “ si
” Declaraciones para decidir cómo responder a ello. En circunstancias De esta
manera, sería mejor utilizar una declaración " switch " .
Este " Dados Hombre " programa usos a cambiar declaración a mirar en el
estado de el morir. La cláusula “ predeterminada ” cubre cualquier caso en el que
el número pasado a la declaración switch está fuera de rango.
64 4 Control
Structures
4.1 Making 65
Selections
Este es el producción similar a eso logrado por el Dados Hombre.

Cabe señalar que sería conveniente leer el libro antes de seguir esta filosofía de
toma de decisiones, ya que no tiene un final feliz.

4.1.6.2 "romper" y "continuar"


El uso de “ break ” en una sentencia switch no es el único contexto en el que se
puede utilizar esta palabra clave. De hecho, se puede utilizar en cualquier parte de
un bloque de código Java y siempre se mueve ejecución a el fin de el actual
bloquear (es decir el próximo cierre Hay otra palabra clave, “ continue ” , que
tiene una función similar. Sin embargo, la diferencia es eso " continuar " acepta
control atrás a el comienzo de el actual bloque de código bastante que el fin. Estos
Palabras clave poder ser útil en, para ejemplo, buscar y ordenar matrices grandes
para hacer que el proceso sea más eficiente al eliminar atajos innecesarios
regiones de el proceso. Alguno Lectores familiar con semejante cosas podría He
observado que “ break ” y “ continue ” actúan más bien como declaraciones “
goto ” estructuradas.
Ejercicio 4.2
• En a " principal " método, generar a aleatorio entero entre 1 y 13 a representar
los valores posibles en un palo de cartas.
• Usar a " cambiar " declaración eso se aplica casos a su aleatorio entero
• Si el aleatorio número es 1, imprimir afuera " As " a el consola
• Si el aleatorio número es 11, imprimir afuera " Jack " a el consola
• Si el aleatorio número es 12, imprimir afuera " Reina " a el consola
• Si el aleatorio número es 13, imprimir afuera " Rey " a el consola
• El por defecto caso debería simplemente imprimir el aleatorio entero a el consola.

4.1.7 El "cambiar" Expresión

Es posible que hayas notado que la declaración switch tiene un par de


características limitantes. Por ejemplo, no puede devolver un valor, por lo que en “
The Dice Man ” En el código anterior teníamos que asignar un valor a una
variable declarada previamente y establecer su valor en cada “ caso ”. La sintaxis
“ break ” también es bastante torpe y potencialmente propensa a
errores. Para solucionar estos problemas, se lanzó una nueva expresión
switch en Java 14. Entonces, ¿cuál es la diferencia entre a declaración y un
¿Expresión? Básicamente, una declaración administra el flujo de control del
código, mientras que una expresión proporciona un valor. El ejemplo siguiente
utiliza una expresión switch como sintaxis alternativa a la declaración switch de
Dice Man. previamente introducido. En este Por ejemplo hay varios características
a nota:
66 4 Control
Structures
• El cambiar expresión devoluciones a valor — un Cadena en este ejemplo.
• " producir " es usado a devolver a valor de a específico caso
• Pareo a múltiple valores es hecho por simplemente puesta el casos en a lista
separada por comas (casos 5 y 6 en este ejemplo)
• Allá es a punto y coma después el cierre abrazadera de el expresión

En lugar de utilizar el operador de dos puntos y simplemente obtener un valor,


también existe una sintaxis alternativa que utiliza el operador de flecha, donde se
puede colocar una expresión en el lado derecho de la flecha. En nuestro ejemplo,
la expresión solo devuelve la cadena, pero podría ser una expresión más compleja.

Finalmente, tanto “ yield ” como el operador de flecha se pueden utilizar


juntos, donde una expresión consta de varias líneas (encerradas entre llaves ) .
debe usarse para especificar el valor de retorno de la expresión de varias líneas.
4.1 Making 67
Selections

Tenga en cuenta que es probable que la expresión switch se desarrolle aún más
en futuras versiones de Java. a permitir más opciones para patrón Coincidencia.
También tenga en cuenta que el introducción El uso de la expresión switch no
significa que se esté reemplazando la declaración switch, solo que se está
proporcionando otra opción de codificación.

4.1.8 El Ternario Operador

Este operador es a taquigrafía “ si-si no ” declaración eso poder ser usado cuando
a condición se utiliza para seleccionar un valor que se devolverá en lugar de
administrar el flujo de un programa. La sintaxis es

Si la expresión es verdadera, se devolverá el primer valor; de lo contrario, se


devolverá el segundo.
68 4 Control
Structures
En este ejemplo, a ternario operador es usado a devolver el Cadena " incluso "
si a El número no tiene resto cuando se divide por dos. Si tiene resto, se devuelve
la cadena “ odd ” .

No es necesario utilizar operadores ternarios ya que se puede lograr el mismo


efecto. con un “ si … de lo contrario ” , pero alguno desarrolladores podría preferir
el brevedad de el código.

4.2 Iteración

En el primero parte de este capítulo, nosotros sierra cómo métodos podría ser
escrito eso selecciones incluidas entre más que uno posible curso de acción.
Ejemplos usado ambos “ si ” y “ cambiar ” declaraciones. Nosotros ahora lo
veremos cómo escribir código que itere, lo que significa que poder repetir una
sección de código más que una vez. Cada aprobar a través de el código repetido es
a soltero iteración. La iteración puede ser logrado en tres Un poco diferente
maneras:

1. " mientras " bucles


2. “ hacer … mientras ” bucles
3. " para " bucles

En cada caso, habrá una condición que permita que el bucle finalice. Cuál
utilizar depende de varios factores y, a menudo, encontramos que más de una
cumplirá con nuestros requisitos, pero debemos ser conscientes de sus diferencias
para poder utilizarlas correctamente.

4.2.1 "mientras" y “haz…mientras” Bucles

Estos bucles son muy similar en eso ambos ejecutar mientras a dado condición es
verdadero, pero ahí es uno llave diferencia entre a ellos. El " mientras " bucle
pruebas para a condición previa, es decir, que la condición se evalúa al comienzo
de cada bucle. Por el contrario, el bucle “ do … while ” prueba una condición
posterior, donde se evalúa la condición. en el fin de cada bucle. Este medio eso el
“ hacer … mientras ” bucle ejecuta al menos una vez, mientras que el bucle “
while ” puede no ejecutarse en absoluto (si la condición ya es falsa). Un bucle “
while ” Un bucle "do … while" se ejecuta cero o más veces, mientras que un
bucle " do … while " se ejecuta una o más veces. La opción que elija en una
aplicación determinada depende completamente del contexto, pero la opción
predeterminada sensata probablemente sea un bucle " while " , que siempre
verifica la condición antes de ejecutar cualquier código.
El bucle “ mientras ” tiene el siguiente sintaxis:
4.2 69
Iteration
Similarmente, el “ hacer … mientras ” bucle tiene este sintaxis

Nota el punto y coma eso debe seguir a “ hacer … mientras ” bucle. Hacer no
poner a punto y coma después de la condición al comienzo de un bucle “ while ” ,
o obtendrá un bucle sin fin dentro del cual no sucede nada (el punto y coma
separará el “ while ” de sus acciones asociadas para que no puedan ejecutarse).

4.2.1.1 A “haz…mientras” Ejemplo


El siguiente programa de ejemplo demuestra un bucle “ do … while ” que simula
el lanzamiento de de a morir hasta él muestra a 6. Como en a anterior ejemplo
nosotros generar a Número aleatorio en el rango 1 – 6, pero esta vez lo hacemos
dentro de un bucle para que el dado pueda ser “ lanzado ” varias veces hasta que
su valor sea 6. Tiene sentido usar un bucle “ do … while ” aquí porque nosotros
necesidad a ir a través de el código en el menos una vez en orden a generar un
valor para el “ die ” . Sin embargo, sería trivial cambiar el ejemplo para utilizar
un “ while ” bucle, desde el inicial dados valor es colocar a cero, entonces a "
mientras " bucle quería También ejecutar al menos una vez.
70 4 Control
Structures
A muestra prueba correr Producido este producción, pero de curso este
voluntad cambiar cada hora en que se ejecuta el programa:

Con el sintaxis tenemos cubierto así lejos, es es difícil de proporcionar bien


Ejemplos de selección entre un “ mientras ” o un “ hacer … mientras ” bucle. Sin
embargo, veremos muchos ejemplos. más tarde en el libro dónde nosotros
voluntad ser Seleccionando uno o el otro dependiente sobre los requisitos del
código.

4.2.2 "para" Bucles

Al igual que los bucles “ while ” , los bucles “ for ” tienen una condición que
controla la iteración del bucle. Además, tienen acciones de inicialización y
actualización integradas en la sintaxis. Esto los hace muy útiles cuando se utiliza
un valor de índice dentro del cuerpo del bucle. Un bucle “ for ” tiene tres
elementos principales:

1. El inicialización acción, ejecutado una vez antes el bucle comienza


2. El terminando (mientras) condición — la bucle ejecuta mientras este
condición es verdad
3. El actualizar acción eso acepta lugar en el fin de cada iteración.

El formato es

Tenga en cuenta que las tres partes de la declaración que siguen a la palabra “
para ” están encerrados entre corchetes y separados por punto y coma.
Cualquier o todo de el tres Secciones poder ser izquierda vacío. Este, para
ejemplo, quería ser un bucle sin fin:

Sin embargo, si nosotros son no usando todo tres Secciones entonces nosotros
quería ser mejor apagado usando un “ mientras ” bucle. Un “ para ” El bucle
debe usarse solo cuando sus secciones de inicialización y actualización son
necesario, de lo contrario él marcas el código más complejo que él necesidades a
Un bucle “ while ” sin fin es, por ejemplo, más legible.
4.2 71
Iteration
4.2.2.1 Iteración con a "para" Bucle
Nuestro primero ejemplo de a " para " bucle proporciona un ejemplo de cómo un
incrementado El número de índice puede ser útil dentro del bucle. Es una clase
que muestra algunos caracteres del conjunto de caracteres Unicode. El “ char ”
de Java de 16 bits El carácter es lo suficientemente grande para representar
todos los caracteres internacionales en el conjunto Unicode, pero para la mayoría
de los propósitos, los programas escrito para Idioma en Inglés Los lectores
necesitan solo a usar el básico caracteres imprimibles en la tabla ASCII (Código
estándar americano para el intercambio de información). El Visor de tablas ASCII
clase descrito aquí muestra el (seguramente) personajes imprimibles en el ASCII
personaje colocar. El principal método usos a " para " bucle a mostrar el
imprimible personajes de el ASCII mesa. Estos caer en el rango 33 – 126,
entonces El bucle se ve así:

Esto significa que el entero “ i ” se declara con el valor 33. La condición de


terminación es una condición “ while ” ; el bucle continúa mientras el
valor de “ i ” sea menor que 127. Cada vez que se repite el bucle, “ i ” se
incrementa en uno ( “ i ++ ” ). Esto sucede en el fin de el bucle. El producción de
el programa muestra ambos el Valor ASCII (Unicode) de un carácter y el carácter
en sí. Dado que el bucle cuenta números enteros, podemos mostrarlo directamente
como valor ASCII. Para mostrar el carácter, convertimos el valor entero (32 bits) a
un tipo char (16 bits).

Este yeso es necesario para que cuando pasemos el “ char ” variable a la


instrucción “ println ” , se muestra el carácter en sí en lugar de su valor ASCII. La
siguiente instrucción muestra tanto el valor como el carácter:

Aviso eso el escapar secuencia personaje '_t' es usado a poner a pestaña


detener entre cada par de valores. La cadena literal ( “ : ” ) incluida en la
declaración es importante. Recuerde que el uso del “ + ” El operador con solo
variables numéricas (es decir, sin una cadena) se interpreta como una suma por el
compilador. Si no hay cadenas que se concatenen, como en este ejemplo, el
operador “ + ” El operador sumará los valores, ¡no lo que queremos!

Porque nosotros son mostrando el producción con pestañas al otro lado de el


pantalla, nosotros voluntad pronto sin de espacio y necesidad a mover en a el
próximo línea. En el programa, este es manejado por
72 4 Control
Structures
una declaración " si " que funciona si hay nueve pares de números/caracteres en la
corriente línea (este valor poder fácilmente ser cambió a dar diferente línea
longitudes). Si hay, él Fuerza un salto de línea utilizando '\n' secuencia de
escape para un carácter de nueva línea. aritmética eso calcula este usos el resto
operador. Oso en mente eso El primer carácter que mostramos tiene el valor 33,
por lo que ignoramos los primeros 32 caracteres restando 32 del valor actual de “ i
” (la variable que se está incrementando ). por el " para " bucle). Si el resultante
número poder ser dividido por 9 con Sin resto, entonces nosotros debe ser en el
noveno personaje de el actual línea, entonces a nuevo Se necesita una línea.
Observe el uso de paréntesis para garantizar que la resta se realice antes del resto
cambiando la precedencia:

Este es el completo clase.


4.2 73
Iteration
El producción de este programa es

Puede modificar este programa para imprimir cualquier subconjunto de la tabla


Unicode (o incluso la totalidad de ella) simplemente cambiando el valor del índice
de inicio y la condición de terminación. Por ejemplo, puede imprimir los
caracteres del conjunto de caracteres braille modificando el bucle “ for ” de la
siguiente manera:

Sin embargo, el capacidad de su máquina a mostrar varios personajes de La


tabla Unicode variará dependiendo de las fuentes que se hayan instalado.

4.2.2.2 "para" Bucles y Matrices


“ for ” se utilizan con frecuencia para recorrer una matriz. Podemos utilizar el
valor del índice en el bucle “ for ” bucle para acceder a los elementos de la matriz
y usar el campo " length " de la matriz para controlar la iteración del bucle. Por
ejemplo, aquí hay un bucle " for " que itera a través de dos matrices, la matriz de
números enteros que representa la precipitación promedio que introdujimos en el
anterior capítulo, y otro formación eso contiene el nombres de Los meses de el
año. Nota cómo el mismo índice variable tiene estado usado a acceso ambas
matrices. Nosotros usar dos separado matrices aquí, bastante que a soltero
bidimensional matriz, porque las matrices tienen tipos estrictos. No podemos
colocar cadenas y números enteros en la misma matriz.
74 4 Control
Structures

Aquí es el producción de correr el clase:

4.2.2.3 Iterando A través de el Formación Aprobado a "Principal"


En el anterior ejemplo nosotros sabía eso allá eran 12 elementos en el matrices,
Porque ellos eran inicializado en el mismo pedazo de código. Este es no siempre el
caso, cual Es por eso que se utiliza la " longitud " El campo es muy útil. Para el
siguiente ejemplo, utilizaremos un bucle " for ". a iterar a través de el Cadena
formación eso poder ser aprobado como a parámetro a “ principal ” . El
parámetro nosotros siempre usar con " principal " es un formación de
Instrumentos de cuerda, cual puede o no puede estar vacío
4.2 75
Iteration
El tamaño de este formación depende enteramente en cómo muchos
Instrumentos de cuerda son aprobado a él desde la línea de comandos o IDE
cuando se ejecuta el programa, por lo que necesitamos usar el campo “ length ”
para controlar un bucle que itera a través de esta matriz, porque cuando se compila
el código no sabemos cuánto tiempo durará la matriz en tiempo de ejecución. En
este ejemplo, usamos el parámetro “ main ” para mostrar cualquier cadena que se
pase a la clase cuando se ejecuta.

De curso, a prueba este pedazo de código nosotros necesidad a tener alguno


forma de paso Cadenas al “ principal ” método. Si está ejecutando el programa
desde la línea de comandos, las cadenas se agregan a la invocación de la clase. Si
desea que alguna de sus cadenas contenga espacios, debe colocarlas entre comillas
dobles, como en el caso de “ algunas cadenas ”. en este ejemplo (tenga en cuenta
que todo esto deberá ingresarse como una sola línea en el símbolo del sistema):

Al ejecutar la clase desde Eclipse, envía cadenas de parámetros a “ main ”


utilizando “ Ejecutar configuraciones ” diálogo. Seleccione “ Ejecutar ” Desde la
barra de menú principal, seleccione “ Ejecutar configuración …” en el menú. Esto
mostrará la opción “ Ejecutar configuraciones ”. diálogo (Figura 4.1 ). En este
diálogo, seleccionar el clase de el lista en la izquierda y luego haga clic en “
Argumentos ” Si no puede ver la clase en la lista, intente ejecutarla primero sin
ningún argumento. En este panel con pestañas, puede ingresar tantas cadenas
como desee en “ Argumentos del programa ”. Área. Estos serán aprobado al
método “ principal ” como una matriz cuando se ejecuta la clase.
Independientemente de si ejecuta la clase desde la línea de comandos o desde
Eclipse, la salida será
76 4 Control
Structures

Higo. 4.1 Usando el " Correr Configuraciones ” diálogo en Eclipse a aprobar argumentos a el
principal método de una clase

Tenga en cuenta que cada cadena aparece en una nueva línea, ya que cada una
de ellas se muestra mediante una llamada independiente a “ System.out.println ”
dentro del bucle ( “ algunas cadenas ” es una sola cadena debido a las comillas
dobles).
El tipo de datos que normalmente se envían a “ principal ” Suelen ser datos de
configuración opcionales, como nombres de archivos o “indicadores ” que
cambian el comportamiento de un programa (como los parámetros del
generador de documentos “ Javadoc ” que veremos más adelante en este libro).
En a más tarde capítulo, nosotros voluntad ver un ejercicio eso marcas más
práctico usar de un parámetro pasado al principal.

4.2.2.4 Múltiple Inicializaciones y Comportamiento


Antes de concluir este capítulo, hay otra característica de “ para ” bucles que
pueden ser útiles para conocer, que son las secciones de inicialización y acción de
la declaración “ for ” poder contener liza de valores, apartado por comas. Aquí,
para ejemplo, tres variables ( “ letterCount ” , “ upperCount ” y “ lowerCount ” )
se inicializan y todos se actualizan al final de cada iteración. Este puede ser un
ejemplo un tanto artificial, pero utiliza múltiples contadores para mostrar
caracteres de diferentes partes de la Unicode mesa, en este caso el más bajo y
superior caso letras de el latín alfabeto.
4.2 77
Iteration

El producción voluntad aparecer como Sigue


78 4 Control
Structures
Ejercicio 4.3
Crear a nuevo clase con a método “ principal ” . En " principal " , llevar el siguiente
pasos

1. Crear y inicializar un formación que contiene el números enteros 1, 2, 3, 4, 5, 6, 7, 8, 9 y


10.
2. Usar a bucle “ for ” a imprimir afuera el contenido de el formación
3. Agregar a " mientras " bucle eso huellas dactilares afuera el contenido de el formación
en contrarrestar orden
4. Agregar a “ hacer … mientras ” bucle eso itera adelante a través de el
formación. Adentro el bucle, agregue una declaración “ if ” para que solo se
impriman los valores pares de la matriz .

Se garantiza virtualmente que este ejercicio le dará ArrayIndexOutOf


BoundsExceptions, que son causadas al intentar acceder a un elemento de la
matriz. eso hace no existir. Clasificación afuera estos problemas voluntad ayuda tú
convertirse familiarizado con la forma en que funcionan los bucles y las matrices
en Java.

4.3 Resumen

En este capítulo nosotros tener visto cómo Java control estructuras son usado para
selección y la iteración. Observamos varios tipos de sintaxis de selección,
incluidas las declaraciones “ if ” y “ switch ” , e introducimos los operadores
relacionales y booleanos que se utilizan en las condiciones que controlan las
declaraciones “ if ” y los bucles. También vimos el operador ternario, que
proporciona una forma abreviada de escribir selecciones simples que devuelven un
valor. En el contexto de las declaraciones switch, analizamos el operador “ break
”. palabra clave y comparado él con el comportamiento de el " continuar "
palabra clave. También vimos las opciones de sintaxis en la expresión switch
introducida recientemente, que a diferencia de a cambiar declaración poder
devolver a valor y incluye sintaxis semejante como el La palabra clave “ yield ”
(para devolver un valor) y el operador “ arrow ” para invocar una expresión.
Ejemplos de diferente tipos de bucle eran ilustrado, incluido " mientras " bucles, “
hacer … mientras ” bucles y varios configuraciones de " para " bucle, cual son
particularmente Útil para iterando a través de matrices. Código ejemplos también
presentado cómo el Matemáticas clase poder se puede utilizar para la generación
de números aleatorios y cómo se puede pasar una matriz de cadenas a la "
principal " método de a clase en tiempo de ejecución, cualquiera de el dominio
inmediato o a través de la opción “ Ejecutar configuraciones ” dentro de
Eclipse.
Creando Objetos
5

Ya hemos visto que Java tiene tanto tipos primitivos como tipos de referencia.
Pasamos algún tiempo analizando los tipos primitivos en el Capítulo 3 , pero
también presentamos cadenas y matrices, que son ambos tipos de referencia. Los
tipos de referencia incluyen todo tipo de clases, incluidos los tipos definidos por el
usuario (como BankAccount, InsurancePolicy, Customer, etc.). etc. creado para
usar en específico aplicaciones), recopilación clases como Listas, datos clases eso
grupo múltiple piezas de relacionado datos juntos como aquellos eso manejar
fechas y horas, y mucho más. Los tipos de referencia son más complejos que los
primitivos. cual justo representar a soltero valor, y son accedido a través de a
referencia a un área específica de la memoria.
En este capítulo, nosotros voluntad comenzar por mirando en el básico
mecánica de objetos; cómo se crean, cómo podemos llamar a sus métodos y cómo
se manejan en la memoria. Nosotros voluntad explicar el distinción entre a clase y
un objeto y comenzar Para interactuar con alguno simple objetos de el Java
bibliotecas y explorar alguno de sus constructores y métodos.

5.1 Clases y Objetos

A clase tiene varios diferente roles en Java. En anterior ejemplos, nosotros tener
visto que las clases pueden proporcionarnos directamente métodos que podemos
utilizar en nuestros programas. ejemplo, el Sistema clase poder ser usado a
mostrar producción en el consola, y La clase Math se puede utilizar para generar
un número aleatorio. También hemos visto muchos ejemplos. de clases ser creado
en orden a acto como el entrada punto para a programa Al contener a " principal "
método. Ambos roles son útil, pero un incluso más importante papel de a clase es
a acto como el especificación para a tipo de objeto. En otro palabras, el La clase
describe un objeto tipo en términos de es atributos (el datos campos eso él
contiene) y sus operaciones (los métodos que pone a disposición).

© Saltador Naturaleza Suiza Estado 2020 79


D. Parsons, Foundational Java , Textos en Ciencias de la
Computación, https://doi.org/10.1007/978-3-030-54518-5_5
80 4 Control
Structures
80 5 Creating
Objects
Los objetos individuales se instancian (crean) a partir de una clase específica, y
muchos objetos poder ser Creado de el misma clase, Por ejemplo, puede haber
muchas cadenas diferentes en un solo programa, pero todas ellas son miembros de
la clase String.
Recordando lo que hemos cubierto anteriormente, cuando declaramos una
variable de una primitiva tipo, nosotros declarar el tipo y nombre de el variable y
asignar a valor a Por ejemplo:
entero miVariable = 0;

Hemos visto en ejemplos de uso de matrices que crear una variable de un tipo
de referencia es algo diferente, ya que requiere el “ nuevo ” palabra clave. Sin
embargo, hay es aún a declaración de el datos tipo y el nombre de el formación,
para ejemplo:
entero[] miMatriz = nuevo int[5];

Creando objetos Sigue a similar patrón; nosotros aún necesidad a especificar el


tipo de El objeto, cual es definido por es clase nombre, y el nombre de el variable
eso nosotros se utilizará para hacer referencia a este objeto. El objeto en sí es
Creado por vocación Un especial método de la clase llamado constructor.

5.1.1 Objeto Creación— Constructores

El trabajo de un constructor es construir objetos de una clase específica. Métodos


del constructor tener el mismo nombre como el clase a cual ellos pertenecer
entonces eso, para Por ejemplo, los constructores de la clase “ String ” También
se denominan " cadenas " . Al igual que las matrices, los objetos se crean
utilizando el comando " new ". Palabra clave, aunque la sintaxis es diferente ya
que las matrices no tienen métodos constructores. Para crear un nuevo objeto,
primero declare una variable de referencia del tipo requerido y luego invoque el
método constructor después de la palabra clave “ new ” . Por ejemplo, podemos
construir un nuevo objeto:
Objeto miObjeto = nuevo Objeto();
// miObjeto es un Objeto, Objeto() es el constructor

La clase “ Object ” se proporciona como parte de las bibliotecas de Java.


Quizás te preguntes cuál es el propósito de una clase “ Object ”. es porque no
representa ningún tipo particular de objeto, Y en Todo lo que quisieras Tengamos
razón. Lo hacemos. No es frecuente encontrar uno Es necesario crear instancias de
Object, pero ¿es útil hacerlo cuando se observan ejemplos de sintaxis simples?
5.1 Clases y Objetos 81

De curso, allá son muchos otro tipos de objeto eso poder ser creado. Nosotros
podría, por ejemplo, crea un nuevo objeto String:
Cadena s1 = nuevo Cadena(); // s1 es a Cadena (un vacío ¡uno!)

Algunos métodos constructores pueden aceptar argumentos de parámetros. Por


ejemplo, podemos crear un nuevo objeto String pasándole una String literal como
parámetro:
Cadena s2 = nuevo Cadena("Hola"); // s2 es otro Cadena

Tú voluntad aviso eso estos son diferente maneras de creando Instrumentos de


cuerda de el tarea sencilla a a literal eso nosotros tener usado antes, pero él marcas
él claro eso Cadena es De hecho, se trata de un tipo de referencia, no de un tipo
primitivo. Cuando asignamos referencias de cadena a literales, el compilador crea
objetos de cadena a partir de estos literales.
Cadena s3 = "Hola";
// mismo efecto como Cadena s3 = nuevo Cadena("Hola");

La clase String tiene varios constructores diferentes, que varían según los tipos
de parámetros que se pasan. característica, donde más de una versión de Existe un
método, pero cada versión tiene una lista diferente de argumentos de parámetros,
se conoce como sobrecarga y es una característica común de los constructores, así
como de otros tipos de métodos.
Es necesario inicializar una referencia de objeto, pero no siempre es necesario
que haga referencia a un objeto. Un alternativa es a inicializar él a " nulo " , cual
es a Java palabra clave usado para una referencia que actualmente no apunta a
nada:
Cadena nombredelcliente = nulo;

Esto es particularmente útil cuando, debido al alcance, necesitamos crear una


referencia a un objeto en una parte del programa diferente a donde se creará el
objeto.

5.2 Clases y Métodos para Cadena Datos

Los métodos son operaciones que un objeto puede realizar. Se invocan mediante el
operador “ . ” (punto). Cuando invocamos un método de un objeto, el nombre del
método siempre va seguido de paréntesis. Estos paréntesis se utilizan para
enumerar los argumentos de los parámetros que utiliza el método:
objectName . methodName ( parámetro argumentos )
82 5 Creating
Objects

Si no se pasan argumentos, los paréntesis estarán vacíos. En este caso sección,


nosotros voluntad mirar en alguno de el métodos disponible para objetos eso
Representar datos de cadena.

5.2.1 El Cadena Clase

Como hemos visto en ejemplos anteriores, una cadena es simplemente una cadena
de caracteres Unicode (letras, números, espacios u otros símbolos), que pueden
variar en longitud desde ningún carácter (una " cadena nula " ) hasta oraciones
completas o incluso documentos (por ejemplo, un XML documento podría ser
representado por a Cadena). Cadena personajes están indexados desde cero, como
una matriz (Fig. 5.1 ).
Instrumentos de cuerda en Java son también “ inmutable ” , significado eso
ellos no puedo ser cambió una vez creadas. Por lo tanto, la mayoría de los métodos
disponibles para cadenas se ocupan de consultar el estado actual de la cadena,
como su longitud, buscar elementos dentro de la cadena, como caracteres o
subcadenas, o realizar comparaciones entre diferentes cadenas.
Todos los objetos tienen métodos para proporcionar su comportamiento. El
siguiente programa de ejemplo muestra algunos de los métodos proporcionados
para los objetos de la clase String, que se enumeran en Tabla 5.1 (Hay muchos
más que no se enumeran aquí). En esta tabla, la “ cadena original ” se refiere a el
Cadena eso el método es ser llamado al. El " longitud " método es no pasado
cualquier parámetros, entonces el paréntesis son vacío cuando él es llamado. Sin
embargo, el otro métodos usado en este ejemplo todo llevar en el menos uno
parámetro argumento. Algunos de estos métodos están sobrecargados, por lo que
funcionarán con caracteres individuales o cadenas que se pasen como argumentos
de parámetros.
La siguiente clase muestra algunos de los métodos de la clase String que se
utilizan con a Cadena objeto que contiene a muy simple HTML documento. Aquí
es el contenido de la cadena, formateado con saltos de línea y sangrías para
hacerlo más legible.

y m y y o Y o a y d
o i o o o o
0 1 2 3 4 5 6 7 8 9 10

Higo. 5.1 Instrumentos de cuerda contener Unicode personajes eso son indexado de cero, como un
formación
5.2 Classes and Methods for 83
String Data
Mesa 5.1 Alguno métodos de La clase String
Método Objetivo
longitud() Devoluciones un entero representando el número de personajes
en La cuerda
contiene(…) Devoluciones " verdadero " si el personaje o Cadena aprobado
a el método coincide dentro de la cadena original, de lo
contrario devuelve falso
comienza con(…) Devoluciones " verdadero " si el personaje o Cadena aprobado
a el método coincide dentro de la cadena original, de lo
contrario devuelve falso
índiceDe(…) Devoluciones el índice (como un entero) dentro el original
Cadena de el
primero aparición de el especificado personaje o Cadena
(devuelve-1 si no se encuentra)
lastIndexOf(Cadena) Devuelve el índice (como un int) dentro de la cadena original
de la última aparición del valor especificado. personaje o
cadena (devuelve – 1 si no se encuentra)
subcadena(int, entero) Devoluciones otro Cadena eso es a Copiar de el parte de el
Cadena original entre los dos índices proporcionados

<!TIPO DE DOC html>


<html>
<cabeza>
<title>Mi HTML Página</title>
</cabeza>
<cuerpo>
Bienvenido a mi página
<p>Esto página es escrito en simple HTML
<p>
Desde HTML archivos son justo texto margen, ellos
poder estar contenido en objetos String de Java
</p>
</cuerpo>
</html>

Dado que los navegadores HTML descartan los espacios en blanco, podemos
representar esta página como una sola cadena en Java. Tenga en cuenta que en el
código real toda la cadena debe aparecer en una sola línea, sin los saltos de línea
que se utilizan a continuación para ajustar el texto a la página. Aunque este
programa de ejemplo no realiza ninguna función práctica, muestra cómo se
pueden procesar las cadenas utilizando sus métodos. El tipo de procesos que se
muestran aquí se pueden utilizar para, por ejemplo, extraer datos de una página
web, comprobar el documento tipo ser usado o identificar elementos a ser usado
cuando adjuntando hojas de estilo.
84 5 Creating
Objects
paquete com.foundjava.chapter5;

público clase Ejemplo de cadena

HTML
{
público estático vacío principal(Cadena[]
argumentos) { Cadena HTMLString = nueva
Cadena(
"<!DOCTYPE html><html><head><title>Mi HTML Página
</title></head><body><h1>Bienvenido a mi página</h1><p>Esta
página esta escrito en simple HTML<p><p>Desde HTML archivos son
justo marcado de texto, ellos poder ser contenido en Java
Cadena objetos </p></body></html>");
System.out.println("Cadena longitud: " +
HTMLString.length());
// longitud de toda la página HTML
System.out.println("Tiene nivel 1 encabezados: " +
HTMLString.contains("h1"));
// comprobar encabezados de nivel 1
System.out.println("Tiene nivel 2
encabezados: " +
HTMLString.contains("h2"));
// comprobar encabezados de nivel 2
System.out.println("Tiene a TIPO DE
DOCUMENTO: " +
HTMLString.startsWith("<!DOCTYPE"));
// controlar eso el página tiene a TIPO DE DOCUMENTO de alguno tipo
System.out.println("Posición de el \'!\' " +
HTMLString.indexOf('!'));
// resultado es 1, porque el primero índice es
cero entero Índice de inicio =
HTMLString.indexOf("cuerpo");
// resultado es primero carbonizarse de
"cuerpo" startIndex += 5;
// ir pasado el descansar de el personajes en el
etiqueta int finÍndice =
HTMLString.lastIndexOf("cuerpo");
// resultado es primero carbonizarse de
"cuerpo" endIndex -= 2;
// ir atrás a eliminar el primero personaje y el principal
'<' Cadena cuerpoContenido =
HTMLString.substring(índice de inicio, endIndex);
System.out.println("Cuerpo contenido " + cuerpoContenido);
}
}

Cuando el programa es correr, el siguiente producción es desplegado:


Cadena longitud: 239
Tiene encabezados de nivel
1: verdadero Tiene nivel 2
encabezados: false Tiene
un DOCTYPE: true Posición
del '!' 1
Cuerpo contenido Bienvenido a mi página</h1><p>Esta página
es Escrito en HTML simple<p><p>Dado que los archivos HTML
son solo marcado de texto, pueden estar contenidos en
objetos String de Java</p>
5.2 Classes and Methods for 85
String Data
5.2.2 Largo Instrumentos de cuerda y Texto Bloques

En el ejemplo anterior, se sugirió que la cadena HTML utilizada en el código


debería aparecer en una sola línea, pero esto no hace que el código HTML sea
muy legible. Para ejemplo, nosotros podría desear a agregar pestaña y nueva línea
personajes entonces eso El código es legible cuando se imprime. Para que el
código fuente y la salida sean legibles, es posible que tengamos que dividir la
cadena en varias líneas y concatenarlas todas. Pudimos Escribe la declaración de
la cadena algo como esto:
Cadena Cadena HTML = nuevo
Cadena( "<!DOCTYPE html>\n"
+ "<html>\n" +
"\t<cabeza>\n" +
"\t\t<título>Mi HTML Página</title>\n"
+ "\t</head>\n" +
"\t<cuerpo>\n" +
"\t\t<h1>Bienvenido a mi página</h1>\n" +
"\t\t<p>Esto página es escrito en simple HTML<p>\n" + "\t\
t<p>Dado que los archivos HTML son solo marcado de texto,
ellos poder ser contenido en Java Cadena objetos</p>\n" +
"\t</body>\n" +
"</html>");

Esto funciona perfectamente bien, pero es una solución bastante complicada.


Dado que los programadores de Java se encuentran de vez en cuando en la
necesidad de manejar cadenas de código fuente (como como HTML o (SQL) allá
es a " Texto Bloquear " característica (primero vista previa en Java 13) que utiliza
comillas triples para encerrar un bloque de texto formateado de varias líneas. Con
esta función, podríamos reemplazar la declaración de la cadena formateada
anterior por la siguiente:
Cadena miCadenaLarga = """
<!TIPO DE DOC html>
<html>
<cabeza>
<title>Mi HTML Página</title>
</cabeza>
<cuerpo>
Bienvenido a mi página
<p>Esto página es escrito en simple HTML
<p>Desde HTML archivos son justo texto margen,
ellos poder ser contenido en Java Cadena objetos</p>
</cuerpo>
</html>
""";

Ambas versiones proporcionan la misma salida, como se muestra a


continuación, pero la versión de bloque de texto es mucho más fácil de escribir y
mantener.
86 5 Creating
Objects
<!TIPO DE DOC html>
<html>
<cabeza>
<title>Mi HTML Página</title>
</cabeza>
<cuerpo>
Bienvenido a mi página
<p>Esto página es escrito en simple HTML
<p>Desde HTML archivos son justo texto margen, ellos poder
ser contenido en objetos String de Java</p>
</cuerpo>
</html>

Nota
La versión del bloque de texto que se muestra arriba es la versión de vista previa
proporcionada en Java 14. es posible eso él puede no ser apoyado En lo sucesivo
versiones de Java.

5.2.3 Cadena Constructores

En nuestra cobertura anterior de la clase String, discutimos el hecho de que las


cadenas son inmutables. (no puedo ser cambió una vez creado). Métodos de a
Cadena eso podría en A primera vista, parece que cambiar la cadena (por ejemplo,
“ toUpperCase ” , que devuelve una versión en mayúsculas de la cadena original)
simplemente crea nuevos objetos String que tienen un estado diferente; la cadena
original permanece sin cambios. Sin embargo, a veces es útil poder cambiar
directamente una cadena de caracteres existente. La clase que le permite hacer esto
en Java es la clase StringBuilder. El constructor StringBuilder crea un
StringBuilder con una capacidad predeterminada de 16 caracteres, más la longitud
de cualquier argumento String pasado al constructor, pero se redimensionará
automáticamente si es necesario.
Constructor de cadenas Registrador de eventos = nuevo Constructor de
cadenas();
// No argumentos – capacidad voluntad ser 16

Constructor de cadenas Registrador de eventos = nuevo


StringBuilder("Errores:\n");
// un argumento de longitud 8 – capacidad voluntad ser 24

Nosotros poder encontrar afuera el actual capacidad de a Constructor de cadenas con el


capacidad
método, p.ej
entero capacidad = eventLogger.capacidad();

El principal operaciones en a Constructor de cadenas son a cambiar el


contenido de el Cadena Contiene caracteres adicionales que se agregan o insertan.
Para agregar caracteres adicionales al final de un StringBuilder, usamos una de las
funciones append sobrecargadas. métodos, por ejemplo,
5.2 Classes and Methods for 87
String Data
eventLogger.append( " más texto " );

Para insertar caracteres utilizamos el método “ insert ” , que toma dos


parámetros: la posición donde realizar la inserción, y la cadena de caracteres, por
ejemplo:
eventLogger.insert(0, " nuevo texto " )

El siguiente ejemplo, que es un tanto artificial, demuestra los métodos “


capacity ” , “ append ” e “ insert ” mostrando cómo se puede cambiar un
StringBuilder con el tiempo. Aquí, simulamos un registro de eventos con errores y
advertencias agregadas. a él como ellos ocurrir. El constructor de cadenas es
inicialmente creado que contiene el Se muestra la etiqueta “ Errores: ” y su
capacidad inicial, luego se agrega la etiqueta “ Advertencias ” . Después
eso, error y advertencia mensajes son Adjunto sobre el fin de El constructor de
cadenas o insertado en él por adquisidor el adecuado índice valores y Luego se
agregan los mensajes nuevos en la posición correcta. Al final se muestra la nueva
capacidad del StringBuilder.
paquete com.foundjava.chapter5;

público clase Ejemplo de

constructor de cadenas
{
público estático vacío principal(Cadena[] argumentos)
{
// Crear a nuevo Constructor de cadenas
Constructor de cadenas Registrador de eventos = nuevo
StringBuilder("Errores:\n");
// El inicial capacidad de el Constructor de cadenas es 16
// más el longitud de el Cadena argumento
System.out.println
("Inicial capacidad " + eventLogger.capacidad());
// Agregar más datos de cadena
eventLogger.append("Advertencias:\
n");
// Agregar a advertencia a el registro - fácil como él llega en el fin
eventLogger.append("Nevera equivocado color\n");
// Agregar un error - a poco más difícil como nosotros debe
// insertar él antes el advertencias
// Encontrar el primero personaje índice de el "Advertencias" cadena
// a agregar un error antes él
entero índice de error =
eventLogger.indexOf("Advertencias:");
eventLogger.insert(errorIndex, "Refrigerador en
fuego\n");
// Imprimir afuera el entero Sistema StringBuilder.out.println
(eventLogger);
// Imprimir afuera el final capacidad (más extenso que cuando él
comenzó)
Sistema.out.println
("Final capacidad " + eventLogger.capacidad());
}
}

Este es el producción de este programa. Nota cómo el capacidad de el


88 5 Creating
Objects
StringBuilder aumenta a medida que agregamos e insertamos datos adicionales.
5.2 Classes and Methods for 89
String Data
Inicial capacidad
24 errores:
Refrigerador en
Advertencias de
incendio :
Refrigerador
equivocado Color
Capacidad final 102

5.2.4 Cadena Buffers

La clase StringBuffer proporciona la misma interfaz que StringBuilder pero es


potencialmente menos eficiente ya que es segura para subprocesos (es decir, solo
permite que un solo subproceso acceda a ella en cualquier momento). Cuando no
utilizamos múltiples subprocesos, StringBuilder es una mejor opción porque no
conlleva la sobrecarga innecesaria de la gestión de subprocesos en situaciones en
las que esto no es necesario. Exploramos el subprocesamiento múltiple en el
Capítulo 16 .

5.2.5 El “aCadena” Método

Uno de los métodos que es común a todos los objetos en Java es el “ toString ”
método, que devuelve una representación de cadena de un objeto. La
implementación predeterminada de este método poder ayuda a nosotros a entender
cómo referencia tipos son manejado en memoria. Los ejemplos que siguen
aprovechan la función “ toString ”. Método para analizar el comportamiento de
algunos tipos de referencia.
Aquí, creamos un objeto, obtenemos los resultados del método “ toString ” de
ese objeto y luego mostramos el resultado.
Objeto miObjeto = nuevo Objeto();
Cadena miCadena = miObjeto.toString();
System.out.println(miCadena);

De hecho, no tenemos que llamar a “ toString ” explícitamente si queremos


imprimir cualquier tipo de objeto. Si ponemos una referencia de objeto en un “
System.out.println ” declaración, “ toString ” se llama implícitamente para
mostrar el objeto, por lo que el código anterior podría escribirse de manera más
simple como:
Objeto miObjeto = nuevo Objeto();
System.out.println(miObjeto); // en cadena llamado
implícitamente

Puede que los resultados de esto le parezcan bastante extraños en comparación


con la impresión de objetos String, que simplemente muestran el texto que
contienen. El resultado será algo como (aunque probablemente no exactamente)
java.lang.Objeto@36d64342
90 5 Creating
Objects

¿Qué representa esto? En realidad, es una combinación del nombre de la clase y


a valor derivado de el memoria DIRECCIÓN de el objeto sí mismo (de hecho el
código hash del objeto, que es un entero derivado de la dirección de memoria y
mostrado como un número hexadecimal). El nombre de la clase es
java.lang.Object; en otras palabras el Objeto clase es en el “ java.lang ” paquete.
El resto de el producción es el código hash, precedido por el símbolo “ @ ” . Si
crea dos objetos nuevos, debería ver en sus valores mostrados que tienen
direcciones de memoria diferentes, lo que por supuesto es necesario, no puede
tener dos objetos diferentes compartiendo la misma memoria DIRECCIÓN. Ser
capaz a demostrar este role de a referencia voluntad Aclarar el contenido del
siguiente apartado.
Nota eso el actual direcciones desplegado cuando tú correr este tipo de código
voluntad Varían para cada ejecución. No esperes que el resultado sea igual al de
algunos de estos ejemplos.
Nota
Dado que el código hash no es en realidad la dirección de memoria del objeto, es
posible que dos códigos hash sean iguales, dependiendo de cómo se calcule el
código hash, por lo que no todos los objetos generarán necesariamente códigos
hash únicos.
Ejercicio 5.1

• Crear a clase con a " principal " método.


• En " principal " , crear a nuevo Cadena objeto eso contiene más bajo caso letras.
• Crear otro Cadena objeto eso contiene superior caso letras.
• Crear a Constructor de cadenas objeto eso contiene el primero Cadena
convertido a mayúsculas .
• Añadir a más bajo caso versión de el segundo Cadena a el Constructor de cadenas.

Ejercicio 5.2

• Crear a clase con a " principal " método.


• En " principal " , crear tres objetos usando el Objeto constructor.
• Imprima todos los objetos usando “ System.out.println ” — tenga en cuenta
que sus códigos hash deben aparecer diferentes.
• Imprimir afuera el picadillo código de uno de el objetos usando el “ Código
hash ” método. Tenga en cuenta que se ve diferente del generado por “
toString ” porque esa es la representación hexadecimal del mismo valor.
• Utilice el método “ Integer.toHexString ” para convertir el código hash de uno
de los objetos a hexadecimal. Tú debería ver eso el valor aspecto el mismo
como el uno generado por el método “ toString ” .
5.2 Classes and Methods for 91
String Data
5.3 Referencias y Memoria

Una característica importante de Java es que no utiliza punteros a la memoria sino


que utiliza referencias. en cambio. A referencia es muy mucho como a puntero, en
eso él hace acceso un área de la memoria, pero no expone el acceso a esa memoria
de la misma manera que un puntero tradicional. Una referencia no se puede
utilizar para, por ejemplo, eliminar algo de la memoria o acceder y manipular
direcciones de memoria directamente. Sin embargo, necesitamos tener cierta
comprensión de la forma en que las referencias se relacionan con la memoria de la
computadora para poder manejarlas correctamente.
Entonces lejos, nosotros tener visto eso nosotros poder crear nuevo objetos, y
estos objetos voluntad tienen diferentes memoria direcciones. Nosotros poder
también usar asignación operadores con objetos. Si utiliza la asignación con tipos
primitivos, los valores se copian de una variable a otra, por ejemplo:
entero var1 =
5; entero
var2 = 9;var1
= var2;var2 =
10;

En este fragmento de código, comenzamos con dos variables enteras


independientes con valores diferentes. Cuando asignamos el valor de “ var2 ” a “
var1 ” , el valor de “ var2 ” (9) se copia en “ var1 ” . Luego, cambiamos el valor
de “ var2 ” a 10. “ var1 ” permanece inalterado. por este y retiene el valor 9.
Todo muy directo. Con En el caso de los tipos de referencia, la vida es un poco
más complicada, ya que el operador de asignación actúa sobre las referencias, no
sobre los objetos a los que apuntan. Por ejemplo, podríamos crear dos objetos,
usando referencias llamado " a " y " b " . Inicialmente estos dos referencias
Señala diferentes áreas de la memoria:
Objeto a = nuevo
Objeto(); Objeto b =
nuevo Objeto();
Sistema.out.println(a);
Sistema.out.println(b);

Correr este pedazo de código podría dar tú producción algo como el A


continuación; como era de esperar, dos ubicaciones de memoria diferentes.
java.lang.Object@19821f
java.lang.Object@addbf1

Qué sucede si nosotros usar el asignación operador con estos objeto ¿referencias?
a = b;

Si se tratase de tipos primitivos, el valor de “ b ” se copiaría en “ a ” . Con los


tipos de referencia, solo se copia la dirección de la referencia, por lo que si
imprimimos las dos referencias de nuevo, obtendremos algo como esto:
5.3 References and 91
Memory
java.lang.Objeto@addbf1
java.lang.Objeto@addbf1

Lo que sucede es que ambas referencias terminan apuntando al mismo objeto.


Esto tiene implicaciones para el estado del objeto y para la gestión de la memoria.
Para mostrar lo que esto significa para el estado del objeto, crearemos un ejemplo
ligeramente diferente utilizando StringBuilder. A diferencia del comportamiento
de “ toString ” cuando se utiliza con un objeto, el método “ toString ” de un
StringBuilder devuelve los caracteres actuales en el StringBuilder. entonces este
voluntad ser útil para vidente qué sucede cuando nosotros redirigir referencias a
otros objetos StringBuilder.
Este fragmento de código crea dos Constructor de cadenas objetos y entonces
huellas dactilares afuera Su contenido actual:
Constructor de cadenas palabra1 = nuevo
StringBuilder("Primero"); StringBuilder palabra2 =
nuevo StringBuilder("Segundo");
System.out.println(palabra1);
System.out.println(palabra2);

Como tú quería esperar, el consola producción quería espectáculo:


Primero
Segundo

¿Qué sucede si asignamos la primera referencia a la segunda? De los ejemplos


anteriores que utilizan la clase Object, debería esperarse que ambas hagan
referencia al mismo objeto, y de hecho esto es lo que sucede. Este fragmento de
código asigna “ word1 ” a “ word2 ” para que ambas referencias apunten al
segundo objeto:
palabra1 = palabra2;
System.out.println(palabra1);
System.out.println(palabra2);

Cuando nosotros imprimir afuera ambos Constructor de cadenas referencias ellos ambos
mostrar " Segundo " :
Segundo
Segundo

Ahora que ambas referencias apuntan al mismo objeto, ambas pueden cambiar
su estado. Para ejemplo, nosotros poder llamar el " contrarrestar " método (cual
revierte el orden de los caracteres en StringBuilder) usando una de las referencias,
en este ejemplo “ word1 ” (aunque también podríamos haber usado “ word2 ” ).
palabra1.reverse();
Sistema.out.println(palabra1);
Sistema.out.println(palabra2);

Debido a que el objeto único al que apuntan ambas referencias ha cambiado, el


resultado de ejecutar este código sería
92 5 Creating
Objects

word1 = word2 word1.reverse()

palabr
word1 word1
a1 “First” “First”
"Primero"

palabr word2 word2


"Segundo" “Second”
a2 “dnoceS”

Higo. 5.2 El efectos de redirigir referencias de objetos

noceS
noceS

Obviamente, esto es algo que debemos tener en cuenta si redirigimos


referencias a objetos. Cifra 5.2 muestra el estado de el objetos encima tiempo.
Primero, el dos las referencias apuntan a objetos diferentes, luego apuntan al
mismo objeto, luego el estado de ese objeto se cambia usando un método de una
de las referencias.

5.3.1 Basura Recopilación

Allá es a más asunto con qué tiene sucedió en Figura 5.2 , cual es eso el El objeto
que contiene “ First ” ya no es referenciado por nada. Por lo tanto, se ha
convertido en “ basura ”. objeto en memoria que necesita ser limpiado. En
algunos lenguajes de programación El programador es responsable de liberar
memoria cuando los objetos que se han creado ya no son necesarios. Esto puede
tener algunos efectos secundarios desafortunados. si errores son hecho cuando
codificación. En el uno mano, un objeto puede ser eliminado de memoria por uno
parte de el programa cuando él es aún necesario por alguno otro parte del
programa. Esto provocará una excepción en tiempo de ejecución cuando el
programa intente acceder al objeto que ya no existe. Por otro lado, el programador
puede fallar a escribir código eso elimina objetos de memoria una vez ellos se
terminan. Esto puede llevar a un número cada vez mayor de objetos " perdidos "
en la memoria, ocupando espacio que puede ser necesario. Esto se conoce como "
fuga de memoria " y si el programa corre largo suficiente él voluntad correr afuera
de memoria. A superar Para solucionar estos problemas, Java se hace cargo de la
gestión de la memoria proporcionando un mecanismo automático de recolección
de basura .
En Java, una El objeto que ya no necesita no se puede eliminar manualmente.
Si Si ha terminado con un objeto, la única acción que puede realizar es redirigir
cualquier referencia que actualmente apunte a él a otros objetos, o a " null " , o
simplemente dejar las referencias caer afuera de alcance. Objetos eso son No
más extenso ser referenciado son entonces
5.3 References and 93
Memory
elegible para la recolección automática de basura por parte del entorno de
ejecución de Java. En la figura 5.2 El constructor de cadenas objeto ( " Primero "
) eso es No más extenso referenciado voluntad ser basura recogido si el memoria
él es tomando arriba es necesario por el programa. El basura coleccionista es parte
del sistema de ejecución que se ejecuta automáticamente en segundo plano cuando
la JVM lo necesita más memoria a continuar ejecutando. El basura coleccionista
solo corre cuando Es necesario a gratis arriba memoria. Tú no puedo fuerza él a
correr, aunque allá es a “ gc ” método en la clase Sistema que le permite sugerir
que podría querer hacer algo de recolección de basura, aunque en realidad puede
que no haga ninguna.
Sistema.gc();

Dependiendo de cuánto tiempo se ejecute un programa y de cuánta memoria


utilice, es posible que el recolector de basura nunca se ejecute. Con el tiempo, el
mecanismo de recolección de basura de Java ha convertirse cada vez más
sofisticado entonces eso él obras muy eficientemente.

5.3.2 Objeto Igualdad

El “ == ” y “ != ” operadores (igualdad y desigualdad) poder ser usado con


objetos, pero es importante entender que comparan las referencias, no los objetos a
los que se hace referencia. El operador de igualdad (==) devuelve “ verdadero ”
solo si las dos referencias ser comparado punto a el mismo objeto en memoria. La
actual estado del objetos ellos mismos es no importante. Cifra 5.3 muestra el
comportamiento de el operador de igualdad en relación a objeto referencias. En el
izquierda de el figura, dos Objetos StringBuilder (referenciado por “ word3 ” y “
word4 ” ) tienen un estado idéntico (contienen el mismo caracteres), pero porque
ellos son separado objetos, comparando su Las referencias significan que no son
iguales. A la derecha de la figura, dos referencias apuntan exactamente al mismo
objeto. En este caso, el operador de igualdad devolverá “ true ” .

Higo. 5.3 El comportamiento de el igualdad operador cuando usado con objeto referencias
94 5 Creating
Objects
El siguiente código fragmento muestra este ejemplo. El primero parte de el
código se mostrará el mensaje “ Objetos son no igual " . Después ambos
referencias tener estado asignado al mismo objeto, la segunda parte del código
imprimirá “ Los objetos son iguales ” :
Constructor de cadenas palabra3 = nuevo
StringBuilder("algunos texto"); Generador de cadenas
palabra4 = nuevo StringBuilder("algunos texto");
si(palabra3 == palabra4)
{
System.out.println("objetos son igual");
}
demás
{
System.out.println("Objetos son no igual");
}
palabra3 =
palabra4;
si(palabra3 ==
palabra4)
{
System.out.println("objetos son igual");
}
demás
{
System.out.println("Objetos son no igual");
}

Nota
Hacer no intentar este ejemplo con Cadena objetos. Si tú crear dos Instrumentos
de cuerda de el mismo literal de cadena, el compilador solo creará una única
cadena y dirigirá ambas referencias a eso. esto Esto se debe a que las cadenas
son inmutables y, por lo tanto, no pueden ser alteradas por ninguna de las
referencias que apuntan a ellas, lo que hace que sea seguro utilizar el mismo
objeto String para múltiples referencias.

5.3.3 Cadena Concatenación y Memoria

Una última cosa que debemos tener en cuenta mientras analizamos la recolección
de basura es que, debido a que todas las operaciones sobre cadenas devuelven
nuevas cadenas, la concatenación puede generar mucho trabajo para el recolector
de basura. En el siguiente fragmento de código, se concatenan tres cadenas, pero
se reutiliza una de las referencias:
Cadena saludo = "Hola";
String nombre = "Mundo";
saludo = saludo + " " + nombre; // resultado es "Hola Mundo"

El resultado de este proceso poder ser visto en Figura 5.4 . A nuevo Cadena
tiene estado creado conteniendo el requerido texto, pero el original Cadena
referenciado por " saludo " es Ahora, basura. Cuando trabaje con grandes
cantidades de manipulación de cadenas, vea si puede reducir la cantidad de trabajo
del recolector de basura, por ejemplo, utilizando generadores de cadenas en lugar
5.3 References and 95
Memory
de cadenas.
5.4 Java Library 95
Packages

Higo. 5.4 Cadena concatenación poder crear extra trabajar para el basura coleccionista

5.4 Java Biblioteca Paquetes

Las numerosas clases Java proporcionadas en las bibliotecas de tiempo de


ejecución se encuentran en varios paquetes que contienen grupos de clases eso
tener similar roles. Para ejemplo, todo el clases que nos permiten crear interfaces
gráficas de usuario están en un conjunto de paquetes, mientras que todas las clases
para manejar la entrada y la salida están en otro.
Las clases que ya hemos visto, como String, provienen del paquete Java
predeterminado “ java.lang ” , por lo que el nombre completo de la clase String
es, de hecho, “ java.lang.String ” . Sin embargo, hasta ahora no hemos tenido que
preocuparnos por los nombres de los paquetes de las clases en nuestros ejemplos
porque “ java.lang ” es un paquete tan fundamental en Java que podemos hacer
referencia a las clases de este paquete directamente sin hacer referencia a “
java.lang ” en absoluto.
Sin embargo, este es no el caso para cualquier de el otro paquetes. Para
ejemplo, uno de las clases Date en Java (que representan tanto una fecha como una
hora) aparece en el archivo “ java.util ” paquete (cual contiene varios utilidad
clases). Es completamente calificado nombre
96 5 Creating
Objects
Por lo tanto, es “ java.util.Date ” . Como no está en “ java.lang ” , para usarlo en
nuestro código necesitamos el nombre de clase completo tanto para las
declaraciones de referencia como para las llamadas al constructor. Para crear un
nuevo objeto Date, entonces, tendríamos que escribir:
java.util.Fecha fecha = nuevo java.util.Fecha();

Esta clase es un buen ejemplo de por qué los paquetes son importantes, ya que
existe otra clase Date de Java llamada “ java.sql.Date ” , para trabajar con fechas
de bases de datos. Sin el nombre del paquete, sería imposible para el compilador
saber cuál de las clases Date queríamos utilizar.
Nota
La clase java.util.Date todavía está disponible en Java, pero las antiguas clases
de fecha y hora fueron reemplazadas en Java 8 con un nuevo conjunto de clases
en el paquete “ java.time ” . desde usando estos más nuevo clases requerir un
comprensión de varios Las características del código que aún no hemos
presentado las dejaremos para un capítulo posterior y trabajaremos con
java.util.Date mientras tanto.

5.4.1 Importador Clases

Aunque es perfectamente aceptable utilizar el nombre completo de una clase


(incluido es paquete nombre) en código, él poder dirigir a bastante De aspecto
complejo Programas. Una alternativa más elegante a utilizar el nombre completo
es importar las clases requeridas. La importación significa que solo necesitamos
indicar el nombre del paquete de una clase una vez, en lugar de cada vez que
hacemos referencia a ella.
Lo hacemos con una “ importación ” declaración al principio del código
(después de la declaración del paquete), seguida del nombre del paquete y el
nombre de la clase que queremos importar. La clase Date está en “ java.util ” ,
Entonces la declaración de importación para usar esta clase dice:
importar java.util.Fecha;

El importar declaración proporciona, en ambos compilar tiempo y tiempo de


ejecución, a general ruta para localizar clases de manera que podamos, en este
ejemplo, simplemente referirnos a “ Fecha ” en nuestro código en lugar de “
java.util.Date ” Cada vez que queramos utilizarlo. Aquí hay una clase de ejemplo
muy breve que importa la clase Date, crea un objeto de la clase y luego imprime el
objeto Date en la consola.
5.4 Java Library 97
Packages
paquete com.foundjava.capitulo5;

//importar el definición de el 'Fecha' clase de java.util


importar java.util.Fecha;

público clase FechaEjemplo


{
público estático vacío principal(Cadena[] argumentos)
{
//el por defecto 'Fecha' constructor conjuntos el objeto a el actual
//fecha y tiempo
Fecha hoy = nuevo Fecha();
//nosotros poder mostrar a Fecha objeto porque él tiene a 'aCadena'
//método, cual es implícitamente llamado aquí
System.out.println("El fecha y tiempo es " + hoy);
}
}

Cuando el “ toString ” El método se llama en un objeto Date y muestra la


fecha y la hora. De su creación, usando un por defecto formato, entonces el salida
de esto programa Será algo así como
El fecha y tiempo es Sol Mar 01 14:58:08 Tarifa horaria de Nueva Zelanda
2020

El resultado real dependerá, por supuesto, de la fecha, la hora y la zona horaria


de ejecución del programa .

5.4.2 Salvaje Tarjetas y Múltiple Importaciones

Tú poder tener como muchos importar declaraciones como tú como en el


arriba de su clase, entre el nombre del paquete y la declaración de clase:
paquete xxxx ;

importar…;
importar…;
público clase

Puede importar los nombres de clase individuales o usar el comodín “ * ” para


incluir todas las clases de un paquete. Por ejemplo, es posible que queramos usar
dos clases diferentes. clases de “ java.util ” , el Fecha clase y el Formateador
clase, cual se puede utilizar a formato el salida de números, fechas, etc. Usando el
comodín, el La declaración de importación podría verse así:
importar java.util.*;

Alternativamente, nosotros podría importar el dos clases por separado.


98 5 Creating
Objects
importar java.util.Date;
importar
java.util.Formatter;

Él es mejor para especificar Todo tuyo importaciones por separado, porque en


una clase que importa mucho otro clases, él es duro para alguien lectura el código
a saber fácilmente dónde Un individuo clase tiene venir de si salvaje Las tarjetas
son usado. Por específicamente Nombramiento Cada clase importada permite ver
fácilmente a qué paquete pertenece.
En este corto programa nosotros crear a Fecha objeto y a Formateador objeto.
Uno de Los métodos del formateador son “ format ” , una versión de la cual toma
como argumentos de parámetro una cadena de formato y el valor que se va a
formatear (en nuestro ejemplo, un objeto de fecha). Hay muchas formas de
especificar la cadena de formato para una fecha, pero Java incluye algunas simples
que están precedidas por los caracteres “ %t ” . Este ejemplo utiliza el formato
personaje “ R ” , cual muestra una formateado tiempo usando el horas y minutos
del reloj de 24 horas.
paquete com.foundjava.capitulo5;

importar java.util.Date;
importar
java.util.Formatter;

público clase Ejemplo de importación


{
público estático vacío principal(Cadena[] argumentos)
{
Fecha mi cita = nuevo Fecha();
Formateador miFormatoDate = nuevo Formateador();
myDateFormatter.format("%tR", myDate);
System.out.println(myDateFormatter);
}
}

El producción de este programa voluntad ser algo como este:


06:10

Tabla 5.2 muestra el colocar de formato Instrumentos de cuerda eso poder ser
usado para común fecha y el tiempo formato, aunque nota eso allá son también
específico fecha y tiempo formateadores para las clases más nuevas en el paquete
“ java.time ” que veremos en el Capítulo 11 .

5.4.3 Módulos, Paquetes y Sub Paquetes

Quizás recuerdes que cuando creamos por primera vez nuestro proyecto Java,
Eclipse agregó un archivo “ module-info.java ” , que inicialmente estaba vacío,
pero incluía el nombre del módulo. eso nosotros eligió para nuestro propio clases (
" com.foundjava.examples " ). Desde Java 9, Java sí mismo tiene estado dividido
5.4 Java Library 99
Packages
en múltiple módulos. El principal ventaja de este
10 5 Creating
0 Objects
Mesa 5.2 Común formato Instrumentos de cuerda para Fecha objetos
Caden Producción Formato
a de
format
o
%tR Tiempo formateado para el 24 horas reloj como horas y minutos, p.ej 12:00
%tT Hora formateada para el reloj de 24 horas como horas, minutos y segundos, p.
ej. 12:00:00
%tr Tiempo formateado para el 12 horas reloj como horas, minutos y artículos de
segunda clase más SOY o PM, por ejemplo 12:00:00 AM
%tD Fecha formateado como día mes y (corto) año, p.ej 01/01/20
%tF Fecha formateado como (largo) año, mes y día, p.ej 01-01-2020
%tc Fecha y hora formateadas como día, fecha, hora, zona y año, p. ej., miércoles 01
de enero 12:00:00 EDT 2020

división de a sistema en separado módulos es eso solo el módulos eso son Los
requisitos de una aplicación deben implementarse con esa aplicación para que
funcione, en lugar de con todo el entorno de ejecución de Java (JRE). Para quienes
trabajan con sistemas heredados, también permite que los distintos módulos
utilicen distintas versiones de Java, lo que permite utilizar algunas funciones más
nuevas en un módulo de un sistema sin romper las dependencias de versiones
anteriores que pueda tener el código de otro módulo.
El paquetes nosotros tener usado entonces lejos ( “ java.lang ” y “ java.util ” )
ambos venir de Un módulo llamado “ java.base ” . Desde este módulo contiene
todo el centro paquetes de Java, no necesitamos hacer nada para que nuestro
código acceda a este módulo. Hay una cantidad relativamente grande de pequeño
número de centro Java paquetes en este módulo, cual usar el Carpeta “ java ” y
tiene una subcarpeta en el nombre del paquete:

• java.io
• java.lang
• Java.matemáticas
• Java.net
• java.nio
• seguridad java
• java.text
• java.tiempo
• java.util

También hay un paquete “ javax ” (de extensión), “ javax.net ” , que


proporciona clases para aplicaciones de redes.
Además, hay muchos subpaquetes. Por ejemplo, en el capítulo 11 . Estaremos
presentando alguno clases de el “ java.time ” paquete, cual proporciona un
conjunto actualizado de fecha y tiempo clases a reemplazar el original fecha y
tiempo relacionado clases de “ java.util ” . El paquete “ java.time ” tiene varios
subpaquetes, incluido “ java.time.format ” , que contiene clases para imprimir y
analizar fechas y horas.
Inde 101
x
Las instrucciones de importación en Java solo se aplican a un paquete
específico, no incluyen ningún subpaquete. Por lo tanto, si quisiéramos, por
ejemplo, utilizar clases tanto de “ java.time ” como de “ java.time.format ” en un
programa, entonces necesitaríamos importar desde ambos paquetes (se han
utilizado comodines para este ejemplo, pero sería preferible utilizar importaciones
específicas).
importar java.time.*;
importar
java.time.formato*;

Nota
Hay un paquete de extensión, que tiene un nombre de paquete que comienza con “
javax ” en el “ java.base ” módulo, pero hay muchos en otros módulos. Muchos
de estos paquetes relatar a el empresa y micro ediciones de Java pero allá son
También algunos en la edición estándar, como el paquete javax.swing (del
módulo “ java. desktop ” ) que veremos en el Cap. 17 .

5.4.4 Gerente Importaciones con Eclipse

Eclipse tiene alguno útil herramientas eso poder ayuda tú con su importar
declaraciones. Estos pueden ser accedido de el " Fuente " menú, cual es en el
principal herramienta bar y poder También se puede acceder desde el menú
emergente que aparece al hacer clic con el botón derecho del ratón en la ventana
del editor de código. Una de las opciones en “ Fuente ” es “ Agregar importación
” . Si el cursor está posicionado sobre el nombre de una clase que necesita ser
importada, entonces Eclipse voluntad crear el importar declaración para el
requerido Clase.A más general opción en el Fuente menú es “ Organizar
Importaciones ” . Este voluntad Importa todas las clases necesarias para tu archivo
fuente. Además, si ya has importado clases usando un comodín, Eclipse resolverá
estas importaciones en las clases individuales que hayas usado.
Sin embargo, debe tener en cuenta algunos posibles efectos secundarios no
deseados del uso de las herramientas de importación. Un problema es que algunos
nombres de clases aparecen en más de un paquete. Si este es el caso, Eclipse
voluntad proporcionar a diálogo como eso mostrado en Fig. 5.5 , listado todo el
disponible clases de eso nombre en su diferente paquetes. Tú necesidad Tenga
cuidado porque la opción predeterminada será la primera en orden alfabético, que
puede no ser la que desea. En la Fig. 5.5 Puedes ver que la fecha predeterminada
clase eso tiene estado seleccionado es “ java.sql.Fecha ” , no el uno nosotros tener
estado using, que es “ java.util.Date ” . Revise este cuadro de diálogo con
atención si aparece y asegúrese de haber elegido la clase correcta.
El otro lado efecto a ser consciente de es eso tú puede tener agregado un
importar a tu código, y entonces tal vez temporalmente comentado afuera o
remoto el código relativo a la clase a la que se refiere esa importación. Si utiliza la
opción “ Organizar importaciones ” opción, Eclipse eliminará todas las
declaraciones de importación que ya no se utilicen. Si entonces reintroducir el
clase eso era remoto o comentado afuera, entonces el importar habrá desaparecido
y tendrás que añadirlo de nuevo.

También podría gustarte