Unidad de Aprendizaje - Lenguaje de Programación Java
Unidad de Aprendizaje - Lenguaje de Programación Java
Unidad de Aprendizaje - Lenguaje de Programación Java
UA Unidad de aprendizaje
Lenguaje de programación Java
1
Objetivos
Objetivo general:
Entender los fundamentos del lenguaje de programación Java y poder hacer frente a problemas
sencillos a través de las herramientas de programación que este posee.
2 JDK y JRE
2.1 ¿Cómo funciona la JRE?
5 Espacios de nombre
6 Operadores
6.1 Distintos tipos de operadores
6.2 Casting o casteo y conversión automática de tipos
7 Arrays
7.1 Arrays como objeto
7.2 Arrays multidimensionales
Introducción
Hoy en día Java es uno de los lenguajes más extendidos y usados en el mundo de la programación, y una de las
claves de su éxito deriva en su naturaleza.
Este eslogan creado por la propia Sun Microsystem refleja la filosofía de Java. Su objetivo es que los
programadores escriban el código una vez, y pueda ser ejecutado desde cualquier dispositivo. ¿Cómo lo
consigue?
Se apoya en la plataforma Java. Normalmente una plataforma se estructura como un sistema mixto, una parte
del sistema se basa en el hardware, y otra parte en el software en el que se ejecutará una aplicación. La
plataforma Java se diferenció del resto de plataformas del momento en que esta se soporta únicamente de
software. Dicho software será ejecutado en cualquier plataforma, de manera independiente de su hardware.
Este sistema cuenta con distintas plataformas de computación capaces de crear y ejecutar aplicaciones Java y
está compuesta por un gran número de tecnologías. Java puede ser ejecutada desde las distintas ediciones de
esta plataforma. Java Enterprise Edition está dirigida a la creación de aplicaciones empresariales distribuidas,
pero antes que esta se debería conocer toda la estructura de la Java Standard Edition, que es la que
proporciona una base para compilar y desplegar aplicaciones estandarizadas.
Dentro de las herramientas más importantes de Java destaca la JRE. Este es el entorno en el que se ejecutarán
sus aplicaciones una vez compiladas. Consta de una Máquina Virtual (la JVM), que ejecuta las aplicaciones. Otra
de las herramientas más importantes que nos proporciona Java es el JDK (Java Development Kit), el cual es un
superconjunto de la JRE, que coge el código fuente que hayamos escrito en Java y compila a través de Javac a
un bytecode un tipo de código independiente del hardware o del sistema operativo.
Todas estas cualidades hacen de Java un lenguaje de alto rendimiento. El tipo de aplicación, que antes solo
podía haber sido llevado a cabo por un equipo con un alto número de personas, ahora está al alcance de la
mayoría, ya que Java es considerado un lenguaje de alto rendimiento por el número de líneas que ahorramos
con respecto a lenguajes anteriores y la velocidad a la que ejecuta sus programas. Para explicar todas estas
tecnologías, nos basaremos en el caso de una pequeña startup tecnológica llamada Digital Mushroom, S. L.,
creada por dos antiguos compañeros de clase, Juan y Ramón, que se enfrenta a la creación de su primer
producto innovador.
UA 1: Lenguaje de programación Java
En Digital Mushroom, S. L., han empezado a realizar el análisis de un proyecto con mucha proyección.
Uno de los requisitos que están definiendo en este documento de análisis es que se necesita de la
capacidad de un lenguaje multiplataforma, por tanto, empiezan a investigar sobre Java, y en qué se basa
la JVM para poder ofrecer tal capacidad.
También conocida como JVM o, en inglés, Java Virtual Machine, es la encargada de que Java sea interpretado.
Se dedica a interpretar el código escrito en el lenguaje Java y pasado a bytecode o lenguaje intermedio a
lenguaje máquina o lenguaje de bajo nivel. Gracias a ella Java consigue la portabilidad de la que hace gala.
Sabías que...
Java SE, EE, ME, la JVM y demás tecnologías y herramientas Java son modos de funcionamiento de los
distintos elementos de la plataforma. Hay múltiples implementaciones de estas tecnologías. Por
ejemplo, la JVM se implementa en Oracle como HotSpot, existiendo otras alternativas incluso de la
plataforma de Java, como por ejemplo la OpenJDK.
Para que esto suceda el código de los archivos fuente Java está compilado de acuerdo con un formato binario
portable estandarizado llamado bytecode con extensión .class. Estos archivos de clase, que componen un
programa, se empaquetan en un archivo con formato .jar.
Este empaquetado se llevó a cabo porque Java, en cierto tipo de aplicaciones (por ejemplo, los applets), crea
una sobrecarga excesiva, realizando la apertura y cierre de conexiones de manera continua, ya que funcionan
descargando los archivos de clase necesarios en tiempo de ejecución (programación JIT o Just in Time), y el
empaquetado aliviaba este problema.
El caso del lenguaje Java a la hora de ser ejecutado es poco común. Los lenguajes de programación
normalmente son compilados o interpretados, pero con Java suceden ambas cosas. El Java Development Kit
(JDK) compila los programas a un lenguaje intermedio llamado bytecode y, en el momento de ejecutarlos, es
interpretado por la JVM.
Los pasos a seguir por Java para la ejecución de cualquier programa, a rasgos generales, son:
Paso 1
Se escribe el programa Java (.jar).
Paso 2
Se compila con el compilador javac a bytecode (.class).
Paso 3
Se interpreta en la JVM a código máquina.
El intérprete de Java es el encargado de ir leyendo el código instrucción a instrucción. Esta operación consume
más espacio de memoria que un programa máquina nativo, ya que, en este caso, es el propio microprocesador
el que gestiona la traducción de las instrucciones en hardware, lo que es muchísimo más óptimo para que no se
produzcan fugas de memoria.
Otra manera que tiene Java de optimizar sus recursos y no producir gastos de memoria innecesarios es con el
recolector de basura. Este es el encargado de eliminar los objetos que quedan sin referenciar a la hora de
optimizar el rendimiento del código. El recolector de basura identifica cuándo un objeto pierde cualquier
referencia, desde el programa o desde otros objetos. Entonces este los elimina y libera la memoria que tenían
reservada, acabando con su ciclo de vida. De este ciclo de vida se encarga el Entorno en Tiempo de Ejecución
de Java o Java Runtime, el cual veremos en el siguiente apartado.
De nición
Lenguajes compilados
Son los lenguajes de programación que, en el momento de ser ejecutados, son convertidos de lenguaje
de alto nivel a lenguaje máquina. Requiere de un paso intermedio antes de ser ejecutado: la compilación.
Lenguajes interpretados
Lenguajes que, al ser ejecutados, no requieren de un paso previo, es decir, es convertido en lenguaje
máquina a medida que va siendo ejecutado. El intérprete es un programa que ejecuta o interpreta las
instrucciones directamente en lenguaje de alto nivel.
También cuenta con la técnica de compilarse en tiempo de ejecución. Aporta una manera de compilar Just in
Time que le permite tener un alto rendimiento. La traducción dinámica o compilación en tiempo de ejecución es
una técnica que consiste en producir mejoras de rendimiento en plataformas que compilen en bytecode, y
ayuda a convertir Java en un lenguaje de alta productividad.
La JDK tiene las herramientas encargadas de compilar el código a bytecode, y posteriormente la JVM interpreta
este a código máquina. Veamos cómo se realiza el compilado del código fuente a código máquina:
Código fuente
Bytecode
Código máquina
1
public class Do_While {
int v;
do {
v=datos.nextInt();
if (v>=100) {
System.out.println("Es de 3 dígitos.");
} else {
if (v>=10) {
System.out.println("Es de 2 dígitos.");
} else {
System.out.println("Es de 1 dígito.");
} while (v!=0);
2
03 3b 34 la 450 56 0 1a f 67 ff la 45 03 3b 34 la 450 56 0 1a f 67 ff la 4503 3b
34 la 450 56 0 1a f 67 ff la 4503 3b 34 la 450 56 0 1a f 67 ff la 4503 3b 34
la 450 56 0 1a f 67 ff la 4503 3b 34 la 450 56 0 1a f 67 ff la 4503 3b 34 la
450 56 0 1a f 67 ff la 4503 3b 34 la 45 0 56 0 1a f 67 ff la 4503 3b 34 la
450 56 0 1a f 67 ff la 4503 3b 34 la 450 56 0 1a f 67 ff la 4503 3b 34 la 450
56 0 1a f 67 ff la 4503 3b 34 la 450 56 0 1a f 67 ff la 450 3 3b 34 la 450 56
0 1a f 67 ff la 4503 3b 34 la 450 56 0 1a f 67 ff la 45 03 3b 34 la 450 56 0
1a f 67 ff la 4503 3b 34 la 450 56 0 1a f 67 ff la 4503 3b 34 la 450 56 0 1a
f 67 ff la 4503 3b 34 la 450 56 0 1a f 67 ff la 4503 3b 34 la 450 56 0 1a f
67 ff la 4503 3b 34 la 450 56 0 1a f 67 ff la 4503 3b 34 la 450 56 0 1a f 67
ff la 4503 3b 34 la 450 56 0 1a f 67 ff la 4503 3b 34 la 450 56 0 1a f 67 ff
la 4503 3b 34 la 450 56 0 1a f 67 ff la 4503 3b 34 la 450 56 0 1a f 67 ff la
4503 3b 34 la 450 56 0 1a f 67 ff la 4503 3b 34 la 450 56 0 1a f 67 ff la
4503 3b 34 la 450 56 0 1a f 67 ff la 4503 3b 34 la 450 56 0 1a f 67 ff la
4503 3b 34 la 450 56 0 1a f 67 f
3
001101 0000 1010 1001 01001 0010 00001010 1001
00001010 1001 00001010 1001 00001010 1001 00001010
1001 00001010 1001 00001010 1001 0010 00001010 1001
000010 00001010 1001 00001010 1001 00001010 1001
00001010 1001 00001010 1001 00001010 1001 00001010
1001 001010 1001 00001010 1001 00001010 1001
00001010 1001 00001010 10v0010 00001010 1001
00001010 1001 00001010 1001 00001010 1001 00001010
1001 00001010 1001 00001010 1001 01 00001010 1001
0010 00001010 1001 00001010010 00001010 1001
00001010 1001 00001010 1001 0010 00001010 1001
00001010 1001 00001010 1001 00001010 1001 00001010
1001 00001010 1001 00001010 1001 0010 00001010 1001
00001010 1001 00001010 1001 00001010 1001 00001010
1001 00001010 1001 00001010 10000001010 1001
00001010 1001 00001010 1001 000010100010 00001010
1001 00001010 1001 00001010 1001 00001010 1001
00001010 1001 00001010 000101001010
A modo de resumen, la Máquina Virtual de Java es un puente entre el conjunto de instrucciones y el entorno
sobre el que se ejecuta. Para cada tipo de dispositivo encontraremos una concreta, y esta JVM traducirá el
código escrito en lenguaje Java en un código nativo que entienda la plataforma en la que este se vaya a
ejecutar. Esto sucede porque se compila el código nativo de Java a un formato de código intermedio llamado
bytecode, el cual se guarda en los archivos de clase de Java. Este bytecode es interpretado por la Máquina
Virtual de Java en Tiempo de Ejecución, lo que quiere decir que se interpretará mientras se ejecute. Su función
es abstraer el código escrito por los programadores que desarrollarán aplicaciones con el JDK, que
abordaremos a continuación.
Sabías que...
La interpretación del código es además una medida de seguridad, ya que el intérprete actúa a modo de
sistema operativo propio, y puede filtrar las operaciones de entrada/salida, impidiendo que un
desconocido lea la información privada de nuestros archivos.
UA 1: Lenguaje de programación Java
2. JDK y JRE
En la oficina de Digital Mushroom, S. L., han decidido implementar un sistema completo Java, empezando
por la JVM. Ahora, se ponen a investigar qué más herramientas son necesarias para poder empezar a
codificar sus programas en lenguaje de programación Java y cómo empezar a ejecutar sus primeros
programas de pruebas.
El JDK y el JRE son softwares que proveen de conjuntos de herramientas que hacen posible empezar a trabajar
con el lenguaje Java. El propósito de cada uno es distinto, y mientras el JRE o Java Runtime Environment hace
posible que las aplicaciones escritas en lenguaje Java puedan ser ejecutadas, el JDK o Java Development Kit
proporciona todavía más herramientas de desarrollo para Java.
El JRE o, en español, “entorno de ejecución de Java”, se debería utilizar cuando solo tenemos que cumplir
funciones de ejecución de programas basados en tecnología Java. Está compuesto por la Máquina Virtual de
Java o JVM, y un conjunto de bibliotecas de Java que hacen posible que un código en bytecode pueda ser
interpretado y ejecutado. Actúa como intermediario entre el lenguaje Java y el sistema operativo sobre el que se
ejecute.
Las librerías de clases estándar son las que se encargan de implementar el API de Java. Para entender cómo
funciona la JRE, tenemos que saber qué está compuesto por la JVM, más un conjunto de bibliotecas Java y
varios componentes:
Herramientas de implementación
Un usuario puede, con solo la JRE, ejecutar aplicaciones Java, pero no podría desarrollar nuevas aplicaciones en
dicho lenguaje, ya que entonces es necesario el entorno de desarrollo JDK. Para entender el concepto, es como
el programa reproductor de vídeo que te permite ver una película pero no puede crearla.
Class Loader
Realiza uno de los primeros pasos, ya que carga de manera dinámica las clases en lenguaje Java bajo
demanda de la Java Virtual Machine.
Interpreter
Es un interpretador que convierte el código bytecode a código máquina, traduciendo bytecode línea a
línea y aportando independencia y seguridad en nuestro programa.
El JDK es el paquete de herramientas más completo, con la finalidad de desarrollar aplicaciones con Java. En él
encontramos el JRE ya incorporado con la JVM en su interior. También encontramos el programa javac.exe, que
es el encargado de compilar el código de las aplicaciones Java a código intermedio bytecode.
Otro par de ejemplos de herramientas que proporciona son javadoc.exe y java.exe, uno dedicado a generar la
documentación necesaria de un programa, y el otro encargado de integrarse con los navegadores de internet
para que los protocolos necesarios basados en el bytecode de Java puedan funcionar.
Actividad de aprendizaje 1
En la empresa donde trabaja nuestro compañero Marcos hay una sección de testers o personas
dedicadas a probar las aplicaciones que allí se desarrollan. Acaba de entrar un nuevo compañero como
probador de software, y se acerca a Marcos para preguntarle, para poder ejecutar los programas
compilados en Java que su equipo de desarrollo le pasará, qué herramientas de Java debería
descargarse.
Para que podamos compilar y ejecutar nuestros programas en Java es necesario configurar las variables de
entorno. La primera implicada que nos encontramos en la instalación del Java Development Kit es la variable
PATH, que se encarga de asignar la dirección donde se ubicará nuestro JDK. Es posible modificarla tanto desde
la línea de comandos como dentro de scripts.
Dentro del sistema operativo Windows, las variables que tenemos que configurar serían:
JAVAPATH: es una ruta completa del directorio donde está instalado JDK.
Appletviewer.exe
Permite la vista previa de las aplicaciones de tipo Applets, ya que estas no se pueden ejecutar desde
el programa de Java y necesitan generar vistas previas.
Javac.exe
Es el encargado de crear el archivo .class, que más tarde se ejecutará la JVM de Java.
Java.exe
Es el encargado de lanzar el programa Java. Se encarga de localizar el JRE, carga la bibliotecas,
fuentes y recursos, crea una Máquina Virtual de Java usando la API de invocación y llama al método
main().
Javadoc.exe
Genera la documentación de los archivos Java.
JRE al completo
La Java Runtiment Enviroment es la plataforma dedicada a la ejecución de las aplicaciones Java.
Sabías que...
Vamos a crear un primer programa “HolaMundo” ejecutable con las herramientas que Java nos
proporciona. Para ello se pide realizar la primera descarga de Java en caso de no tenerlo instalado,
configurar las variables de entorno necesarias y traducir con Javac el código a lenguaje interpretable por
Java.
java -version.
En caso de no tener instalado Java en nuestro sistema, avanzamos al paso 2, en caso de tenerlo
instalado, iremos al paso 3.
En Windows:
Entrar en la Con guración Avanzada del Sistema y luego acceder a Variables de Entorno.
Tendremos que crear una nueva variable con el nombre JAVA_HOME en el sistema, y con el valor de
la ruta donde hayamos instalado nuestro Java JDK.
>export PATH=$PATH:$JAVA_HOME/bin
Después de guardar el archivo, reiniciamos el ordenador y comprobamos con este comando que esté
bien establecida la variable de entorno.
>echo %JAVA_HOME%
Paso 4: Ahora podemos crear el fichero que vamos a ejecutar. Abrimos un nuevo documento con el
Notepad de Windows ejecutando por consola:
>notepad HolaMundo.java
Entonces se abrirá un nuevo fichero en el que habremos de escribir lo siguiente antes de guardarlo y
cerrar:
public class HolaMundo {
public static void main (String [ ] args) {
System.out.println ("Hola mundo");
}
}
Nuestros compañeros de Digital Mushroom, S. L., ya han realizado su primer Hola Mundo, pero esto se
les queda corto, ya que el Notepad no es para toda la vida, así que están buscando algún IDE o entorno
de desarrollo integrado que provea de más herramientas además de compilar el programa. Investigando
y viendo ventajas y desventajas de cada tipo, tienen tres posibles ganadores: NetBeans, Eclipse e IntelliJ
IDEA.
Podemos pensar en los editores o IDE como en las herramientas que vamos a usar para desarrollar nuestras
aplicaciones. Si un carpintero tiene un martillo en malas condiciones (este se astilla, está sucio o es difícil de
usar), o elige el martillo que no es el adecuado para el trabajo que va a realizar, el carpintero dará resultados
más deficientes y tendrá que hacer un sobreesfuerzo que, a la larga, acaba saliendo más caro que comprar un
buen martillo. El IDE sería este martillo para el programador.
Un entorno de desarrollo integrado (IDE), o, en inglés, Integrated Development Enviroment, consiste en una
aplicación que trata de ayudar al programador en la tarea de creación de software. Reúne en una misma
plataforma las herramientas necesarias para el desarrollo de una aplicación en los lenguajes que este cubra.
Editor de textos
Un editor de textos plano no provee formato. Dentro de un IDE, el editor tiene que ser más
especializado y tener soporte para el lenguaje, correcciones de sintaxis, sugerencias, etc.
Intérprete
Traduce instrucciones escritas en lenguaje de alto nivel en un lenguaje intermedio para ser
directamente ejecutado.
Compilador
Traduce instrucciones de alto nivel directamente a lenguaje máquina.
Herramientas de automatización
Nos facilitan el trabajo en el autocompletado de código cuando estamos desarrollando nuestra
sintaxis.
Depurador
Es un programa usado para depurar código. Permite establecer puntos de ruptura, donde nuestra
ejecución se detendrá y aportará información importante sobre todo lo que sucede en ese punto en
concreto.
Se crearon para aumentar la productividad del programador, además de agilizar el aprendizaje de cualquier
lenguaje nuevo de programación, ya que el IDE te previene de los errores de sintaxis, tiene autocompletado
inteligente de código y te referencia las librerías asociadas a dicho lenguaje.
Cualquier IDE, para ser considerado como tal, además, debe cumplir las siguientes características:
3.1 ¿Qué IDE son los más recomendados dentro de la
programación Java?
Dentro de las posibles elecciones que podemos hacer con respecto a los IDE que trabajan con Java,
conoceremos tres.
NetBeans
El primero del que vamos a hablar es NetBeans.
NetBeans es un IDE que se creó inicialmente para el trabajo con Java, pero que fue incluyendo otros lenguajes
como C, C++, PHP o lenguajes de marcas como HTML5.
Consta de un sistema de componentes arrastrables que aporta fluidez a la creación de una interfaz gráfica,
reduciendo la escritura de código. Es multiplataforma y tiene una gran comunidad de colaboradores detrás.
Una desventaja es el rendimiento del IDE. Podemos ejemplificarlo en que cuantos más proyectos tienes
abiertos, este se ralentiza de manera considerable, o que al instalar NetBeans se recomienda instalar solo el
idioma que vayamos a necesitar, pero no se recomienda la versión con todos los lenguajes o el consumo de
memoria RAM sería muy elevado.
Eclipse
El segundo IDE que tenemos que mencionar es Eclipse.
Eclipse es ampliamente conocido por estar
relacionado con la programación Java, aunque
pueda aceptar muchos más idiomas de
programación
Soporta más lenguajes de programación aparte de Java. Fue creado por IBM, pero es propiedad de la
Fundación Eclipse, que fomenta que sea un software de código abierto.
El SDK de Eclipse incluye las herramientas para desarrollo con Java y se caracteriza por poseer analizador
sintáctico, compilar en tiempo real, crear pruebas unitarias, refactorizar y la posibilidad de instalar nuevas
funcionalidades a través de plugins. Esto también nos lleva a una de sus desventajas, ya que, a más plugins
instalados, mayor cantidad de recursos, haciendo Eclipse uno de los IDE más pesados a la larga.
IntelliJ IDEA
El IDE IntelliJ IDEA fue desarrollado por JetBrains y está disponible en su edición comercial y en la edición para
la comunidad.
Es multiplataforma y es compatible con Java EE, Android, JavaScript, etc. Añade la posibilidad de instalar
plugins.
JetBrains proporciona también la herramienta Android Studio, que abordaremos en la segunda parte de este
material.
1. NetBeans
Ventajas: facilidad de uso
Inconvenientes: bajo rendimiento
2. Eclipse
Ventajas: estabilidad y robustez
Inconvenientes: pesadez
3. Intellij IDEA
Ventajas: mayor eficacia en sintaxis y rendimiento.
Inconvenientes: de pago
Aplicación práctica 1
Duración: 20 minutos
Objetivo:
Identificar correctamente la mejor decisión a tomar del IDE a instalar dependiendo de las
necesidades que tengamos.
Enunciado:
Carlos comienza sus prácticas en una gran multinacional, y actualmente le van a incluir en un
subproyecto de un producto escrito en código Java, por tanto, ese es el primer requisito.
Ayuda a Carlos a evaluar las opciones que tiene y a tomar la decisión correcta sobre el IDE más indicado
para su situación. Indica qué IDE podría servir en cada uno de los requisitos y cuál no, describiendo las
razones que te llevan a dar esa solución.
UA 1: Lenguaje de programación Java
Después de haber probado los distintos IDE y haber tomado la decisión de usar el editor IntelliJ IDEA,
pasan a comenzar un estudio exhaustivo del lenguaje Java. En la carrera nuestro compañero Juan era
muy bueno en el tema de Java, pero para Ramón siempre fue un hueso duro de roer, así que se dispone
a repasar desde lo más básico: la declaración de variables y el tipo de los datos.
El lenguaje Java consta para su escritura de la creación de variables. Una variable es un espacio en la memoria
principal de un ordenador, y necesita estar asociado a un nombre para crearse. Es un contenedor donde se
guarda cierta información que determina el programador. Esta información puede ser conocida o desconocida,
pero lo que sí se tiene que conocer y determinar en el momento de la declaración dentro del lenguaje de
programación Java es el tipo del dato que será guardado.
Para hacer esto Java proporciona una serie de tipos, llamados tipos o datos primitivos. Con ellos podremos
definir de qué tipo será la variable que vamos a crear.
Ejemplo
int count;
int miPrimeraVariable;
int a,b,c;
Aquí estamos creando una variable llamada miPrimeraVariable, y diciendo a Java que será de tipo int, que es
uno de los tipos primitivos que veremos a continuación. Se reserva un espacio en memoria para el valor que
contengan esas variables, en el cual se almacenará la información. Sobre esta información de momento solo
sabemos el tipo del que será.
Los tipos de datos de Java se pueden organizar según el tipo de información que contienen. Según este criterio,
los tipos se clasificarían en dos tipos: datos primitivos y datos referenciados.
Hay ocho tipos de datos primitivos, que podemos definirlos a su vez en cuatro tipos más amplios dependiendo
de la naturaleza de estos:
1. byte
1 5 7 8
Representa un entero de 8 bits de complemento a dos, y puede tomar un valor entre -128 a 127,
incluyendo ambos. Se suele usar para guardar ahorrando en memoria los Arrays de grandes
dimensiones. También puede ser usado como una “documentación” del código, donde sus limitados
2 6
valores aportan información por sí mismos.
2. short
3
Este tipo de entero se usa de manera muy parecida a byte y representa un entero de complemento de
dos formado
4 por 16 bits. También sirve para ahorrar memoria guardando grandes arrays, donde este
ahorro aligera realmente los procesos. Comprende los valores entre -32.768 y 32.767 (inclusive).
3. int
Ocupa un espacio de 32 bits. Es un valor entero numérico de complemento a dos, y comprende
valores entre (-231) a (231-1). Es el tipo más usado por las personas que empiezan a aprender
programación en Java.
4. long
Es un valor numérico de complemento de dos, que pesa 64 bits en memoria. Comprende un rango de
valores más amplio que el tipo int, entre (-263) a (263-1).
5. oat
Almacena valores en coma flotante con precisión simple de 32 bits. Es usado también para guardar
Arrays de números en coma flotante de grandes dimensiones.
6. double
Almacena valores numéricos y tiene una precisión doble de 64 bits. Su nombre (double) es por el
hecho de la doble precisión que tienen estos con respecto a su compañero oat.
7. boolean
Este es la representación de solo un bit de información. Es un operador lógico y puede tomar el valor
más primitivo: true (verdadero) o false (falso). Cuando se declara una variable tipada como booleana,
esta no puede convertirse a través de cast en ninguna otra. No tiene correlación con el número 1 o 0
como estamos acostumbrados en otros lenguajes de programación como el lenguaje de
programación C.
8. char
Es un valor simple Unicode de 16 bits, es decir, representaría un solo carácter. Unicode se creó para
tener alcance mundial, y Java usa este sistema de caracteres con char para tener el mismo alcance.
De nición
Tipado estático
Tipado dinámico
Es el que se caracteriza por que la comprobación de la tipificación se hace durante su ejecución en vez
de comprobar durante la compilación.
UA 1: Lenguaje de programación Java
5. Espacios de nombre
A nuestro socio Ramón una duda le asalta. No para de oír la palabra “clase”, y se dedica a comprobar una
definición básica en la que descubre que son estructuras básicas de datos dentro de las aplicaciones
Java. El primer paso en cualquier declaración de una clase es el establecimiento de una organización en
paquetes. Se dispone a profundizar en este apartado que le lleva al concepto de namespace.
Para conocer los espacios de nombre o namespaces, tenemos que pasar primero por el concepto de los
paquetes en Java. Estos sirven para agrupar distintas clases que están relacionadas entre sí. Establecen una
región declarativa, en la cual dos clases no pueden tener el mismo nombre dentro del mismo namespace, el
cual se establece a través de la definición de nuestros paquetes. Dentro de cada uno de los namespaces
establecidos, cada una de las clases ha de tener un nombre único.
Sabías que...
Las clases en Java siempre pertenecen a algún paquete. Si no se declara de manera explícita, se hace de
manera automática. El paquete que se crea de manera predeterminada se conoce como global, y su
creación es invisible o implícita.
Cuando declaramos un paquete en una clase, esta ha de estar dentro de su correcto directorio dentro del
sistema de archivos del programa. Al colocar una clase dentro de un directorio ya estamos creando un nuevo
namespace para esa clase, que será el nombre del paquete más el nombre que le demos a la clase.
package actividades;
En la creación de paquetes hay que respetar la jerarquía, y que esta sea la que se refleje en los diferentes
directorios. Para llevar esto a la práctica, separa cada paquete del nombre del paquete que está por encima de
él a través del uso de un punto. No hay alias en los paquetes, sino que deben usar una declaración en forma de
importación.
package actividades.ejercicio;
…/actividades/ejercicio
Esto se definiría como una declaración de paquete multinivel, y con esta se hace posible la creación de
jerarquías de clases.
Los namespaces y la declaración del nombre de
nuestros paquetes son herramientas
fundamentales del lenguaje Java para tener
control sobre nuestras clases
Si el paquete ejercicio contuviese una clase de Java llamada Matematicas, esta se podría importar a través de
su namespace y la palabra reservada import de la siguiente manera:
import actividades.ejemplo.Matematicas;
Si quisiéramos importar todas las clases que contuviese el paquete ejemplo podríamos realizar la importación
de la siguiente manera:
import actividades.ejemplo.*;
Con el símbolo asterisco (*) estaríamos diciendo que importamos todo el contenido que haya dentro del
paquete ejemplo, dentro del paquete actividades, y es una buena manera de refactorizar código. Hay que tener
en cuenta que el asterisco solo importa las clases que contenga ese paquete, no las que contengan los
posibles subpaquetes que este a su vez contenga.
De nición
Refactorización
Es la técnica de ingeniería de software por la que los programadores cambian la estructura interna del
código de un programa para mejorarlo sin cambiar su comportamiento externo.
Actividad de aprendizaje 2
../familia/Padre.java
../familia/Madre.java
../familia/Abuelo.java
../familia/Hijo.java
Vamos a seleccionar cuál es la manera correcta de refactorizar esas cuatro líneas de código.
a. import familia;
b. import familia.Padre.Madre.Abuelo.Hijo;
c. import familia.Padre;
d. import familia.*;
UA 1: Lenguaje de programación Java
6. Operadores
A nuestro socio Ramón el estudio de los tipos en Java le ha sido muy ilustrativo, ya que solía tener dudas
básicas y confundía varios tipos. Ahora que esto ya no le ocurre, está preparado para pasar a aprender
más sobre qué hacer con esos tipos de datos, aprendiendo a inicializar variables y empezando a trabajar
con ellas y usando para ello los operadores básicos y avanzados que Java ofrece.
Antes de explicar los operadores, tenemos que ahondar en qué es una variable.
De nición
Variables
Herramientas que tienen los programadores para acceder a la información que hay guardada en
memoria. Con estos datos es con los que van a trabajar nuestros programas. Se trata realmente de un
identificador de nuestro valor, un nombre, y automáticamente el compilador lo pasa a un acceso en
memoria.
Las variables tienen ciertas características que hay que respetar a la hora de su inicialización. Un nombre de
variable tiene que empezar por una letra minúscula o un guion bajo (_) o dólar ($). En el estilo de escritura de
java, predomina empezar con una letra minúscula, e ir añadiendo una mayúscula para separar de la siguiente
palabra.
Como hemos visto en el punto anterior, al declarar la variable también le decimos el tipo para determinar qué
espacio en memoria tiene que reservarse para esta.
int count = 1;
String miPrimeraVariable = “”;
long a = -2123423454;
En el primer caso estamos declarando e inicializando a la vez una variable llamada count, la cual la vamos a
declarar como de tipo int, es decir, contendrá un valor numérico de complemento a dos que ocupará un
espacio en memoria de 32 bits. Este espacio en memoria será ocupado por el valor 1.
Con la declaración de miPrimeraVariable, estamos dando este nombre como identificador a una variable, la cual
contendrá la instancia de la clase String nativa de Java, un tipo de clase referenciada en el propio Java. En este
caso la estamos inicializando como una cadena vacía. Hay que recordar que no es lo mismo una cadena vacía
que un valor nulo, que se inicializará de la siguiente manera: String miPrimeraVariable = null, en cuyo caso sería
un valor nulo.
En el tercer caso inicializamos la variable con nombre a de tipo long. Esta variable contendrá el valor
-2123423454 en el espacio que se habrá reservado en memoria. Este espacio viene determinado por el tipo long,
que ocupa 64 bits.
Operadores de asignación
Entre estos está el =, que ya hemos visto durante el aprendizaje de la inicialización de variables. Es el encargado
de asignar un valor a una variable. No hay que confundirlo con el operador unario de igualdad (==), ya que
implican cosas diferentes.
= ASIGNACIÓN
int a = 1;
+= SUMA Y ASIGNACIÓN
int b += a; // b = 2
-= RESTA Y ASIGNACIÓN
int c = 2;
int d -= c; // d = 1
*= PRODUCTO Y ASIGNACIÓN
int e = 2;
e *= c; // e = 4
/= DIVISIÓN Y ASIGNACIÓN
int f = 4;
e /= f; // e = 2
%= RESTO Y ASIGNACIÓN
f %= e; // f = 0
+ SUMA
int a = 1;
int b = 5 + a; //b = 6
- RESTA
int c = 2 - 1; //c = 1
* PRODUCTO
int d = 24 * 2; //d = 48
/ DIVISIÓN
int e = b - c; //e = 5
% RESTO
int f = 20 % 7; //f = 6
++ INCREMENTO
int a = 4;
a++;
int b = ++a; //b = 5
-- DECREMENTO
int c = 5;
c --; //c = 4
Podemos ver la diferencia entre posincrementar y preincrementar a través del uso de la función
System.out.prinln de Java.
De nición
System.out.println();
Es la línea de código que llama a la impresión de datos por pantalla. Se utiliza la clase System, el atributo
out y el método println() o print(). La diferencia entre estos es que print imprime el contenido por pantalla,
y prinln hace lo mismo, pero deja un salto de línea tras él, lo que hace más legible la salida por consola.
Ejemplo
int a = 1;
System.out.println(a--); // imprime 1
System.out.println(a); // imprime 0
int a = 1;
System.out.println(--a); // imprime 0
System.out.println(a); // imprime 0
Cuando escribimos a--, estamos posincrementando. En este caso estamos imprimiendo el valor de la variable
antes de que sea almacenado. Cuando se realiza un preincremento --a, sí que podemos ver impreso el valor de
la variable ya almacenada. La diferencia realmente no es que el incremento se ejecute antes o después de que
la variable sea evaluada, sino en el valor que retorna la propia expresión es distinta, ya que en caso de poner a--
devuelve el valor que tenía, y de poner --a, devuelve el valor que tiene actualmente.
Aplicación práctica 2
Duración: 15 minutos
Objetivo:
Saber manejar el funcionamiento de los distintos operadores que se pueden usar en Java.
Enunciado:
Miguel está preparando una entrevista de trabajo para un nuevo puesto en el cual necesitaría el
desarrollo de aplicaciones con Java. Está realizando un repaso de los operadores con los que cuenta
este lenguaje y se encuentra en la tesitura en la que necesita alguno concreto para que, al realizar una
asignación, este asigne pero a la vez reste un entero a ese valor asignado.
Trata de razonar la respuesta para el problema de Miguel y ayúdale a evaluar las opciones que tiene y a
tomar la decisión correcta sobre el operador más indicado para su situación. Investiga si el operador
asignado existe en otros lenguajes de programación diferentes a Java.
Operadores relacionales
Realizan comparativas entre datos que pueden ser numéricos, caracteres o booleanos. Tienes que hacer la
comparación entre datos compatibles, y dicha comparación siempre resultará un valor booleano, es decir, o true
o false. Entre estos operadores de comparación encontramos: igual, distinto, menor y mayor.
OPERADOR OPERACIÓN
== IGUAL
!= DISTINTO
Operadores lógicos
Son los que realizan operaciones sobre los valores evaluando los valores como boolean, arrojando un resultado
booleano (true o false).
OPERADOR OPERACIÓN
! NOT (NO)
|| OR LÓGICO (O)
& AND (Y E)
| OR INCLUSIVO
ˆ OR EXCLUSIVO
La principal diferencia entre los operadores &, | y ˆ con los operadores && y || es que, cuando los primeros
comparan los valores, lo hacen de todas las condiciones planteadas, mientras que en los AND y OR lógicos, si la
primera condición arroja un resultado false, la segunda no será evaluada.
Recuerda
No deberías confundir la expresión = con ==. Son expresiones diferentes e implican cosas distintas. Una se
utiliza para asignar un valor a una variable, y el segundo para evaluar la condición de si dos variables son
iguales, devolviendo true en caso de que lo sea o false en caso de que no lo sea.
Otros operadores
Dentro de los operadores tenemos también algunos especiales por ser menos usuales o de uso más avanzado,
como los operadores condicionales o and y or entre bits.
OPERADOR OPERACIÓN
() AGRUPACIÓN
. ACCESO A VARIABLES
?: OPERADOR CONDICIONAL
| OR INCLUSIVO
ˆ OR EXCLUSIVO
Actividad colaborativa 1
En esta actividad deberás determinar la respuesta a las siguientes peticiones a través de un par de
números guardados en variables:
Comparte los resultados con tus compañeros/as en el foro y comprueba las soluciones propuestas por
los demás.
Para realizar las Actividades colaborativas debes acceder a la página principal del curso, allí
encontrarás la información necesaria para realizarla. Podrás identi car las Actividades colaborativas
por la numeración correspondiente.
Para realizar la conversión automática de tipos hay que seguir ciertas normas de compatibilidad, como asignar
un tipo más pequeño a otro tipo de datos más grande.
short
int
long
oat
double
Además, los datos boolean y char no permiten conversión automática ni entre ellos ni con el resto de los datos
numéricos primitivos de Java.
int i = 100;
long l = i;
float f = l;
System.out.println(“Valor int: ” + i + “ , Valor long: ” + l + “, Valor float: ” + f);
// imprime “Valor int: 100, Valor long: 100, Valor float: 100.0”
El Casting o conversión explícita de tipos se realiza cuando queremos, por ejemplo, asignar un valor mayor a un
tipo de dato más pequeño. Es muy práctico en los casos que no podemos realizar conversión automática de
tipos porque los tipos son incompatibles. Podemos pensar en esto cambiando el orden de la tabla de
compatibilidad de tipos numéricos que hemos visto anteriormente. Podríamos pasar un tipo double a un oat, o
un int a un short.
char c = “c”;
int i = 12;
c = i;
double d = 100.04;
long l = (long)d;
int i = (int)l;
System.out.println(“Valor double: ” + d + “ , Valor long: ” + l + “, Valor int: ” + i);
// imprime “Valor double: 100.04, Valor long: 100, Valor int: 100”
Para saber más
La variable char es equivalente al valor de este mismo carácter dentro de la tabla ASCII. Por ejemplo, la
letra a es equivalente al entero 97, ya que este es el valor que ocupa este carácter. Para saber más,
puedes consultar el siguiente enlace:
http://www.asciitable.com/ (http://www.asciitable.com/)
Actividad colaborativa 2
a. Declarar los siguientes tipos de variable: byte, int, short, oat, double y char.
b. Declarar una variable llamada resultado1 que sea de tipo float y asignarle el resultado de multiplicar
el valor oat con el valor byte.
c. Declarar una variable llamada resultado2 que sea de tipo int y asignarle el resultado de dividir el valor
int con el char.
d. Declarar una variable llamada resultado3 que sea de tipo double y asignarle el resultado de
multiplicar el valor double con el short.
e. Declarar una variable llamada resultado4 que sea el resultado de dividir el valor int con el char.
f. Sumamos los valores resultado creados y lo mostramos por pantalla.
Comparte los resultados de cada apartado en el foro y comprueba los diferentes resultados con los
demás compañeros/as.
Para realizar las Actividades colaborativas debes acceder a la página principal del curso, allí
encontrarás la información necesaria para realizarla. Podrás identi car las Actividades colaborativas
por la numeración correspondiente.
UA 1: Lenguaje de programación Java
7. Arrays
Ramón estaba tan contento haciendo ejercicios con operadores numéricos cuando se encontró ante un
problema al necesitar guardar un número de datos dentro de una variable. Al no entender cómo podía
realizarse eso, preguntó a Juan si podía darle alguna clase. Juan le dijo que podía empezar buscando y
documentándose sobre los Arrays...
Los Arrays son un tipo de objeto de Java, que podemos usar para introducir los valores de otras variables. Java
posee la capacidad de agrupar varios elementos de un mismo tipo bajo la definición de un objeto Array. La
declaración de un Array podría darse de las siguientes maneras.
De nición
Al inicializarse un Array, se inicializan automáticamente cada posición de la matriz. Se le otorga el valor por
defecto del tipo al que se haya inicializado la misma. Observemos el siguiente caso:
int[] c;
Con este código estamos declarando una variable de tipo objeto Array, llamada c, en la cual todos los valores
que guardará en su interior van a ser int:
Ya estaríamos inicializando tres variables int en el interior del Array c, con el valor que trae por defecto el tipo
primitivo al que hemos decidido inicializarla. El valor por defecto de cada tipo de dato es el siguiente:
byte 0
int 0
long 0
oat 0.0
double 0.0
char /u0000
boolean False
Object null
De nición
Función
Método
Hay que tener en cuenta que, para llegar a la última posición de un Array, hay que sumar el número de espacios
menos uno, ya que empiezan a numerarse por el cero (si tiene 10 elementos, el último índice no será el 10, sino
el 9). En caso de que intentemos acceder a una posición del array que no existiese, se lanzará una excepción
java.lang.ArrayIndexOutOfBoundsExpeption, que nos alertará que el índice al que tratamos de acceder no
existe.
Aunque todavía no hemos visto el tema de los bucles, que veremos un poco más adelante, adelantaremos
algunos conceptos en el ejemplo que presentamos a continuación. Los bucles están íntimamente ligados a los
Arrays, ya que son la herramienta principal que usamos a la hora de recorrerlos:
Array también nos proporciona una función muy útil que es clone, que nos permite clonar el cualquier Array de
Java, independientemente de sus dimensiones, a una copia totalmente nueva:
Actividad de aprendizaje 3
En esta actividad que se presenta, tendrás que determinar cuál es el código y los operadores correctos
para realizar operaciones aritméticas a partir del material dado.
notas[0] = 6;
notas[1] = 4;
Se pide ayudar a Natalia a imprimir por consola a través de las operaciones oportunas la media
aritmética de las notas del alumno.
Arrays multidimensionales
Cuando entendemos mejor el concepto de Array, podemos usarlos de manera más avanzada si nos hiciera falta,
a través de la posibilidad de crear Arrays multidimensionales, cambiando el concepto de Array como lista al del
Array como matriz de m x n dimensiones. Veremos más fácil este concepto con un ejemplo, ya que su
declaración también varía de la del Array tradicional.
En este caso estamos creando un Array con 2 dimensiones, uno de 3 posiciones y otro con 2. El contenedor
ocupará un número total de 6 elementos, ya que 3 · 2 = 6, donde el 3 sería el número de filas y 2 el número de
columnas. Un ejemplo gráfico de este Array podría ser:
[0][0] [0][1]
[1][0] [1][1]
[2][0] [2][1]
Este mismo Array podríamos inicializarlo de diferentes maneras, inicializando en su declaración el valor que
contendrá cada espacio del Array:
int [][] a = {
{7,2,23},
{12,3,1},
{50,7,78}
}
También podríamos declarar Array de 3 dimensiones, de 4, de 5… Estos seguirán la misma lógica pero aplicada a
cada dimensión que se añada, aunque es menos habitual encontrarnos con estos.
Se puede acceder al valor de cada posición a través de este mismo índice. Para recorrer el contenido de los
Arrays, utilizamos los bucles combinando con la función length. Esto lo trataremos en profundidad en unidades
posteriores.
Actividad colaborativa 3
En esta actividad deberás realizar tres Arrays: los tres han de ser de tipo int, pero el primero se inicializará
a través de new, el segundo con un bloque, y el tercero será un Array multidimensional que contendrá
por lo menos tres Arrays en su interior.
Longitud de Array 1.
Longitud de Array 2.
Longitud de Array 3.
Longitud de elemento 0 del Array 3.
Longitud de elemento 1 del Array 3.
Longitud de elemento 2 del Array 3.
Para realizar las Actividades colaborativas debes acceder a la página principal del curso, allí
encontrarás la información necesaria para realizarla. Podrás identi car las Actividades colaborativas
por la numeración correspondiente.
Pero ¿qué hacemos si no sabemos de antemano el número de elementos que contendrá nuestro Array? Para
este tipo de casos usamos ArrayList.
Los Arrays se utilizan como contenedores donde se
guardan otro tipo de datos. Pueden ser
bidimensionales o tener múltiples dimensiones
ArrayList es una clase que nos permite añadir, editar y eliminar los elementos que contendrá, siendo estos
siempre de clases objeto, no pudiendo contener datos primitivos. Es una herramienta muy útil y transparente en
su uso para el programador. La manera de declararse, al ser de clase objeto, es a través de new(). Veámoslo a
continuación:
ArrayList<String> nombreArrayList = new ArrayList<String>();
Aquí estamos inicializando un ArrayList, sin necesidad de decir de antemano el espacio que ocupará este en
memoria, ya que no es necesario conocer el número de elementos que contendrá. Este tipo de contenedor es
más avanzado y los estudiaremos con más profundidad en unidades posteriores.
Sabías que...
También es aceptada la declaración e inicialización del Array colocando los corchetes que lo
caracterizan detrás del tipo en vez del nombre. Es la siguiente fórmula:
tipo[] nombre;
int[] matriz = new int[12];
UA 1: Lenguaje de programación Java
Para Ramón el aprendizaje de los Arrays no tenía sentido si no podía recorrerlos. Además, en ciertos
ejercicios empezaba a necesitar alguna herramienta que le permitiese realizar acciones de acuerdo con
alguna condición.
Para esto, buscando en la documentación, pronto encontró las sentencias de control de flujo que
empezó a usar de inmediato para resolver múltiples situaciones.
El control de ujo es la herramienta que tiene el lenguaje de programación Java para que la ejecución de un
programa realice las acciones que un programador le indique. Se usa para determinar el orden en el que se
ejecutarán las acciones o sentencias de un programa.
En Java hay varios tipos de sentencias de control de flujo, que podemos categorizar en: sentencias de toma de
decisiones, bucles y alguna otra especial, como las excepciones, que también son un tipo de sentencia de
control de flujo, pero que dejaremos para apartados de programación más avanzada.
if-else
La primera, más importante y que no deja de usarse a lo largo del aprendizaje de casi cualquier lenguaje de
programación, es la sentencia if-else. Las sentencias que introducimos en el interior del if solo se ejecutarán si
el criterio que se le asigne es verdadero (true). Esta puede ser varias condiciones, y todas tienen que ser true
para que el if se ejecute.
El algoritmo típico del Array nos entrará en una
condición o no dependiendo de si una condición es
verdadera o no
Pero ¿y si queremos ejecutar un juego de sentencias donde la condición sea falsa (false)? Para eso utilizamos el
else. El else siempre cubrirá los casos que no cubra el if. Un ejemplo del uso de ambos sería:
int i = 5;
String mensaje = “”;
if (i == 4) {
mensaje = “Soy un cuatro”;
} else {
mensaje = “Soy distinto de cuatro”;
} // imprime Soy distinto de cuatro
Aparte de if y else, tenemos la sentencia else if. Este se utiliza para cubrir nuevas condiciones, y se usa junto con
el operador if anidándolo tras este. No puede usarse de manera independiente.
if (i == 4){
mensaje = “Soy un cuatro”;
} else if (i == 5){
mensaje = “Soy un cinco”;
} else {
mensaje = “Soy distinto de cuatro y cinco”;
} // imprime Soy un cinco
También tenemos la posibilidad de escribir esta sentencia a través del operador ternario (?:), un operador
especial de Java que nos permite escribir sentencias condicionales de tipo if-else con una sentencia en una
misma línea:
Actividad colaborativa 4
En esta actividad deberás imprimir por pantalla una frase afirmando que un número sea positivo o
negativo, o, en caso de ser cero, otra frase que lo confirme.
Además, necesitas saber, de entre dos números, cuál es el mayor y cuál es el menor, y verificar si un
número es par o impar.
Recuerda que hay distintas maneras de hacerlo, así que consulta las soluciones de tus compañeros/as
en el foro y no olvides compartir las tuyas.
Para realizar las Actividades colaborativas debes acceder a la página principal del curso, allí
encontrarás la información necesaria para realizarla. Podrás identi car las Actividades colaborativas
por la numeración correspondiente.
switch
Por otro lado, tenemos la sentencia switch, que nos da una ventaja respecto a if siempre que el número de
anidamiento de los else if a evaluar se nos pueda disparar. Estos se usan de manera más directa, ya que no va
evaluando cada condición. Esto se debe a que en cada case (caso) del switch se cierra con una etiqueta break,
que corta la ejecución. Estas sentencias break son opcionales, permitiéndonos ejecutar más de una condición al
mismo tiempo.
También consta de una condición que ofrece de serie, default, que permite cubrir todos los casos que no se
hayan cubierto con anterioridad, funcionando como el else. Este default es también opcional, como el break,
pero conviene ponerlo para realizar “buenas prácticas”.
De nición
Buenas prácticas
Son las pautas que seguir dentro de la programación para que nuestros programas sean más óptimos de
cara al rendimiento, más homogéneos y más mantenibles. Aunque hay consenso con estas, también
dependen del lenguaje de programación en el que estemos desarrollando nuestras aplicaciones.
switch (i) {
case 4:
mensaje = “Soy un cuatro”;
break;
case 5:
mensaje = “Soy un cinco”;
break;
default: // cubriría los casos distintos de 4 o 5
mensaje = “Soy distinto de cuatro y cinco”;
break;
}
El operador switch te limita a que el valor de la variable a evaluar y los valores de los casos sean de tipos
simples, ya que cumple una condición simple de comparación de un valor. Los valores que acepta switch son
char, byte, short o int.
Al final el uso que se debería dar tanto de if o de switch dependerá de la complejidad de las condiciones que
queramos evaluar. Mientras que switch gana en rendimiento con condiciones simples que tienen que evaluar
múltiples valores, el if nos proporciona mejores opciones en casos complejos.
Actividad colaborativa 5
En esta actividad deberás guardar un número entre 1 y 7 en una variable, y que el programa calcule e
imprima el nombre del día de la semana (lunes, martes, miércoles…) al que corresponde ese número.
Recuerda consultar los resultados en el foro, ya que podrías aprender cosas nuevas de los resultados de
tus compañeros/as.
Para realizar las Actividades colaborativas debes acceder a la página principal del curso, allí
encontrarás la información necesaria para realizarla. Podrás identi car las Actividades colaborativas
por la numeración correspondiente.
while
El bucle while es la sentencia de bucle más básica que hay en Java. Se puede considerar como una instrucción
if repetida varias veces. En el bucle while se evalúa una condición, y se ejecuta la sentencia hasta que esta
condición deje de cumplirse.
En este ejemplo estamos creando un bucle while, al que decimos que tiene que imprimir por pantalla con la
orden System.out.println mientras que la variable condición sea menor o igual a 5. Después, incrementamos el
valor de la variable condición con el operador de incremento unario, sumando así 1 al valor de dicha variable en
cada vuelta del bucle.
El algoritmo típico del bucle while se caracteriza
por seguir inde nidamente cumpliendo una
condición hasta que esta sea false
do-while
El bucle do-while es similar al while, solo que la condición se ejecuta al final del cuerpo de la expresión. Se
utiliza para ejecutar las sentencias que contiene el bucle por lo menos una vez. Se utiliza poco, pero aun así el
bucle do-while tiene sus usos.
do {
System.outprintln(“Soy la condición “ + condición);
} while (condicion > 5);
// imprime Soy la condición 1
En este caso el bucle do-while imprime solo una línea por pantalla, ya que la sentencia solo se ejecuta en la
primera vuelta, y al final de esta, se evalúa la condición, y al no cumplirse, la ejecución del programa termina.
Actividad colaborativa 6
Para la realización de esta actividad queremos realizar un programa que imprima por pantalla un saludo
si encuentra el nombre de una persona dentro de un Array de nombres. Para ello, deberás dar dos
soluciones, utilizando while y for e incluyendo equals o == para comparar los nombres. Además, deberás
buscar la diferencia entre estos últimos.
Para realizar las Actividades colaborativas debes acceder a la página principal del curso, allí
encontrarás la información necesaria para realizarla. Podrás identi car las Actividades colaborativas
por la numeración correspondiente.
for
El bucle más usado es el bucle for. Este bucle se caracteriza por ser usado para iterar a través de los elementos
de un Array. Para su ejecución involucra tres acciones:
Dichas acciones son separadas mediante comas en la escritura del bucle for. Esta coma garantiza que cada
operador se ejecute en el orden correcto, de izquierda a derecha. La primera cláusula se ejecuta una única vez
al arrancar el bucle.
Veámoslo mejor en un ejemplo, traduciendo el mismo bucle que hemos usado con el bucle while.
for (int condicion = 1; condicion <= 5; condición++) {
System.out.println(“Soy la condición ” + condicion);
}
// imprime
Soy la condición 1
Soy la condición 2
Soy la condición 3
Soy la condición 4
Soy la condición 5
En este caso la primera cláusula es la inicialización de la variable condición a 1. Esta cláusula solo se ejecutará la
primera vuelta del bucle. La segunda contiene la condición que ha de cumplirse para mantener la ejecución, y
se evaluará en cada vuelta del bucle. La tercera cláusula modifica el valor de la variable creada en la primera
vuelta, así podemos poner un fin a la ejecución de nuestro bucle.
Actividad colaborativa 7
En esta actividad queremos guardar un Array de 5 números entre 0 y 999. Para ello, deberás realizar un
programa que recorra ese Array e imprima el número de dígitos que tiene cada valor que haya en esa
posición del Array.
Para realizar las Actividades colaborativas debes acceder a la página principal del curso, allí
encontrarás la información necesaria para realizarla. Podrás identi car las Actividades colaborativas
por la numeración correspondiente.
UA 1: Lenguaje de programación Java
Resumen
El lenguaje de programación Java se caracteriza por ser escrito una vez, aunque puede ser ejecutado en
cualquier Máquina Virtual de Java. El programador escribe una vez el código nativo, que sería lenguaje de alto
nivel, con las herramientas que le proporciona la JDK o Java Development Kit. Este código es pasado a código
intermedio o bytecode por la JRE. El archivo .java se codifica a través de la herramienta Javac, y es codificado a
bytecode como .class, y es interpretado por la JVM. Para programar los desarrolladores contamos con una
herramienta conocida como IDE, que proporciona ciertos componentes que permiten facilitar nuestro trabajo.
Este trabajo consiste en la redacción de código, que comienza con la creación de los elementos más básicos,
las variables. Lo primero que hacemos al crear una variable es la asignación del tipo de estas. Para ello,
podemos hacerlo a través de tipos primitivos, que son los más básicos de Java. Estos pueden ser numéricos.
Encontramos una colección de herramientas llamadas operadores, que nos permiten hacer operaciones
aritméticas y lógicas. Todas estas operaciones se complementarán con el uso de sentencias de código más
avanzadas, como la clase Array, los condicionales (if else y Switch) o las sentencias de repetición o bucle (while,
do while y for).