Este documento presenta una introducción a la tecnología Java. Explica que Java es un lenguaje de programación, entorno de desarrollo, entorno de aplicaciones y entorno de implementación. Describe los objetivos fundamentales de Java, incluyendo la máquina virtual de Java, el reciclaje de memoria dinámica y el entorno de ejecución. También resume las tareas clave de la máquina virtual de Java como cargar código, verificar código y ejecutar código.
2. Introducción
El contenido de la siguiente presentación es íntegramente el
contenido del curso Java Programming Language, Java SE 6 de
Oracle, con algunos agregados propios de Iberotec.
Se utiliza el material oficial de Oracle, por ser Iberotec
miembro del Oracle Academy.
3. Actividad 1: Introducción
1. Qué es la tecnología Java
2. Objetivos fundamentales de la tecnología Java
o Máquina virtual de Java.
o Reciclaje de memoria dinámica.
o Entorno de ejecución de Java.
o Tareas de JVM™
3. Aplicación Java sencilla
o Solución de errores de compilación
4. Qué es la tecnología Java
La tecnología Java es:
o Un lenguaje de programación.
o Un entorno de desarrollo.
o Un entorno de aplicaciones.
o Un entorno de implantación.
5. Qué es la tecnología Java
La tecnología Java es:
o Un lenguaje de programación
La sintaxis del lenguaje Java es similar a la de C++. Es posible
utilizar Java para crear cualquier tipo de aplicación que pudiera
crearse con otro lenguaje.
o Un entorno de desarrollo
Como entorno de desarrollo, la tecnología Java proporciona
una amplia variedad de herramientas: un compilador, un
intérprete, un generador de documentos, una herramienta
para empaquetar archivos de clases y muchas más.
6. Qué es la tecnología Java
La tecnología Java es:
o Un entorno de aplicaciones
El lenguaje Java suele mencionarse en el contexto de las
aplicaciones World Wide Web (web) y los navegadores que son
capaces de ejecutar programas llamados applets
(miniaplicaciones). Los applets son programas escritos en
lenguaje Java que residen en los servidores web y que se
ejecutan a través de un navegador que los descarga en un
sistema cliente. Suelen ser de pequeño tamaño para reducir el
tiempo de descarga y la llamada para ejecutarlos se realiza
desde una página web HTML (Hypertext Markup Language).
Las aplicaciones Java son programas autónomos que no
requieren la presencia de un navegador de web para
ejecutarse. Normalmente son programas genéricos que se
ejecutan en cualquier máquina donde se encuentre instalado
el entorno de ejecución de Java (JRE).
7. Qué es la tecnología Java
La tecnología Java es:
o Un entorno de implementación
Existen dos grandes entornos de implementación.
El primero es el JRE suministrado a través del kit de
desarrollo de software (SDK) Java 2, que contiene el juego
completo de archivos de clases para todos los paquetes Java,
lo que incluye las clases básicas del lenguaje, las clases de
componentes de la interfaz gráfica (GUI) y un API avanzado
de colecciones (Collections) entre otros.
El otro entorno de implementación fundamental es el propio
navegador del usuario. La mayoría de los navegadores
comercializados proporcionan un intérprete y un entorno de
ejecución de Java.
8. Actividad 1: Introducción
1. Qué es la tecnología Java
2. Objetivos fundamentales de la tecnología Java
o Máquina virtual de Java.
o Reciclaje de memoria dinámica.
o Entorno de ejecución de Java.
o Tareas de JVM™
3. Aplicación Java sencilla
o Solución de errores de compilación
9. Objetivos fundamentales de la tecnología Java
Objetivos fundamentales de la tecnología Java
o Java proporciona lo siguiente:
Un lenguaje en el que resulta fácil programar porque:
Resuelve carencias de otros lenguajes como las relativas a la
aritmética de punteros y la gestión de la memoria, que afectan a
la solidez y fiabilidad del código.
Es orientado a objetos para ayudar a visualizar el programa de
una forma más cercana a la realidad.
Permite simplificar el código
Un lenguaje interpretado (genera código directamente en
bytes), lo que proporciona las siguientes ventajas:
Rapidez de desarrollo: reduce el ciclo compilación-enlace-carga-prueba.
Portabilidad del código: permite escribir código que puede
ejecutarse en numerosos sistemas operativos sobre cualquier
JVM certificada.
10. Objetivos fundamentales de la tecnología Java
Objetivos fundamentales de la tecnología Java
o Java proporciona lo siguiente:
Una forma de que los programas ejecuten múltiples procesos
de forma simultánea.
Una manera de cambiar los programas de forma dinámica
durante el tiempo de ejecución permitiéndoles descargar
módulos de código.
Una forma de garantizar la seguridad mediante la
comprobación de los módulos de código cargados.
11. Objetivos fundamentales de la tecnología Java
Objetivos fundamentales de la tecnología Java
o La arquitectura de Java utiliza los siguientes elementos para
cumplir los objetivos enumerados:
La JVM (Java Virtual Machine)
El reciclaje de memoria
El JRE (Java Runtime Environment)
JVM Tool Interface: interfaz de herramientas de JVM
12. Actividad 1: Introducción
1. Qué es la tecnología Java
2. Objetivos fundamentales de la tecnología Java
o Máquina virtual de Java.
o Reciclaje de memoria dinámica.
o Entorno de ejecución de Java.
o Tareas de JVM™
3. Aplicación Java sencilla
o Solución de errores de compilación
13. Objetivos fundamentales de la tecnología Java
Máquina Virtual de Java
o El documento The Java Virtual Machine Specification define la
máquina virtual de Java como:
Una máquina imaginaria que se implementa como una emulación de
software sobre una máquina real y actúa como puente entre el código
binario de Java y la plataforma (Sistema Operativo + Procesador). El
código de la JVM se guarda en archivos .class, cada uno de los cuales
contiene código de una clase pública como máximo.
o La especificación de la JVM incluye las especificaciones de las
plataformas de hardware para las que se compila todo el código de
Java. Esta especificación es la que permite que el software de Java
pueda ser independiente de la plataforma, porque la compilación
se realiza para una máquina genérica conocida como la JVM. Es
posible emular esta máquina genérica en software para que se
ejecute en diferentes sistemas informáticos del mercado o
implementarla en hardware.
14. Objetivos fundamentales de la tecnología Java
Máquina Virtual de Java
o El compilador lee el código fuente de la aplicación Java y genera
bytecodes o código de byte. El código de byte son instrucciones de
código en formato máquina para JVM. Cada intérprete de Java,
independientemente de que sea una herramienta de desarrollo de
aplicaciones Java o un navegador de web, tiene una
implementación de la JVM.
o La especificación de JVM proporciona definiciones concretas para
la implementación de los siguientes elementos: un juego de
instrucciones (equivalente al de una CPU o unidad de
procesamiento central), un juego de registros, el formato de
archivo de clases, una pila de tiempo de ejecución, un área de
almacenamiento y reciclaje de la memoria dinámica, una zona de
memoria, un mecanismo de comunicación de errores graves y
funciones de temporización de alta precisión.
15. Objetivos fundamentales de la tecnología Java
Máquina Virtual de Java
o El formato del código de la máquina virtual consta de códigos de
byte pequeños y eficientes. Los programas que presenten este
código deben atenerse a la disciplina de tipos de datos adecuada.
La mayor parte de la comprobación de tipos se realiza durante la
compilación.
o Cualquier intérprete de Java compatible debe ser capaz de ejecutar
cualquier archivo de clases que cumpla los requisitos de formato
especificados en el documento The Java Virtual Machine
Specification para este tipo de archivos.
o El diseño de JVM permite crear implementaciones para numerosos
entornos operativos. Por ejemplo, Sun Microsystems proporciona
implementaciones de JVM para Solaris, Linux y Microsoft
Windows.
16. Actividad 1: Introducción
1. Qué es la tecnología Java
2. Objetivos fundamentales de la tecnología Java
o Máquina virtual de Java.
o Reciclaje de memoria dinámica.
o Entorno de ejecución de Java.
o Tareas de JVM™
3. Aplicación Java sencilla
o Solución de errores de compilación
17. Objetivos fundamentales de la tecnología Java
Reciclaje de memoria dinámica
o Muchos lenguajes de programación permiten asignar la memoria
de forma dinámica durante el tiempo de ejecución. El proceso de
asignación de la memoria varía en función de la sintaxis del
lenguaje, pero siempre implica devolver un puntero a la dirección
de inicio de un bloque de memoria.
o Cuando la memoria asignada deja de ser necesaria (el puntero que
hace referencia a ella ha abandonado su referente), el programa o
el entorno de ejecución debería liberarla.
o En C, C++ y otros lenguajes, el programador es el responsable de
liberar la memoria. Esto puede ser una tarea complicada en
ocasiones, porque no siempre se sabe con antelación cuándo debe
quedar libre. Los programas que no liberan la memoria pueden
bloquearse en un momento dado porque ya no queda memoria en
el sistema para asignar. Cuando esto ocurre, se dice que el
programa pierde memoria.
18. Objetivos fundamentales de la tecnología Java
Reciclaje de memoria dinámica
o El lenguaje Java descarga al programador de la responsabilidad de
liberar la memoria. Proporciona un hilo en el nivel del sistema que
hace el seguimiento de cada asignación de memoria. Durante los
ciclos de inactividad de la JVM, el mecanismo de reciclaje busca la
memoria en desuso y la libera.
o Esta operación se realiza de forma automática mientras dura el
programa Java, lo que elimina la necesidad de liberar la memoria y,
con ello, el riesgo de “pérdidas”. No obstante, los modelos de
reciclaje de la memoria pueden variar considerablemente en cada
implementación de JVM.
19. Actividad 1: Introducción
1. Qué es la tecnología Java
2. Objetivos fundamentales de la tecnología Java
o Máquina virtual de Java.
o Reciclaje de memoria dinámica.
o Entorno de ejecución de Java.
o Tareas de JVM™
3. Aplicación Java sencilla
o Solución de errores de compilación
20. Objetivos fundamentales de la tecnología Java
Entorno de Ejecución de Java
o En la Figura se ilustra el entorno de ejecución de Java (JRE) y la
forma en que maneja la seguridad del código.
21. Objetivos fundamentales de la tecnología Java
Entorno de Ejecución de Java
o Los archivos de código fuente de Java se compilan en el sentido de
que se convierten en un conjunto de códigos de un byte a partir
del formato de texto en el que se escriben. Los códigos de byte se
guardan en archivos .class.
o Durante el tiempo de ejecución, los códigos de byte que componen
un programa Java se cargan, comprueban y ejecutan a través de un
intérprete. En el caso de los applets, es posible descargar los
códigos de byte para luego interpretarlos a través de la JVM
integrada en el navegador. El intérprete tiene dos funciones:
ejecuta dichos códigos y efectúa las llamadas apropiadas al
hardware de la plataforma.
22. Objetivos fundamentales de la tecnología Java
Entorno de Ejecución de Java
o En algunos entornos de ejecución de Java, una parte del código de
byte verificado se compila adaptándolo al código máquina nativo y
se ejecuta directamente en la plataforma de hardware. Esto
permite al código del programa Java ejecutarse a velocidades
próximas a las del lenguaje C o C++ con una pequeña demora en el
tiempo de carga para permitir que el código se compile en forma
de código máquina.
23. Objetivos fundamentales de la tecnología Java
Entorno de Ejecución de Java
Nota: Sun Microsystems ha mejorado la JVM agregando tecnologías que
aumentan el rendimiento. Una de ellas es la llamada máquina virtual Java
HotSpot™, con la que es posible conseguir que el lenguaje Java se ejecute a
la misma velocidad que el código C++ compilado.
24. Actividad 1: Introducción
1. Qué es la tecnología Java
2. Objetivos fundamentales de la tecnología Java
o Máquina virtual de Java.
o Reciclaje de memoria dinámica.
o Entorno de ejecución de Java.
o Tareas de JVM™
3. Aplicación Java sencilla
o Solución de errores de compilación
25. Objetivos fundamentales de la tecnología Java
Tareas de JVM
o En esta sección se examinan en mayor profundidad las tres tareas
fundamentales de la máquina virtual de Java:
Cargar el código: a través del cargador de clases.
Verificar el código: a través del verificador de códigos de byte.
Ejecutar el código: a través del intérprete de tiempo de ejecución.
26. Objetivos fundamentales de la tecnología Java
Cargador de clases
o El cargador de clases obtiene todas las clases necesarias para la
ejecución de un programa. Para mayor seguridad, lo hace
separando los espacios de nombres de las clases del sistema de
archivos local y los espacios de nombres procedentes de la red.
Esto reduce la posibilidad de entrada de troyanos, porque las
clases locales se cargan primero.
o Una vez cargadas todas las clases, se determina la distribución de
la memoria del archivo ejecutable. En este momento, se asignan
las direcciones concretas de memoria a las referencias simbólicas y
se crea la tabla de búsqueda. Dado que la distribución de la
memoria se produce en el momento de la ejecución, el intérprete
de Java introduce un mecanismo de protección contra accesos no
autorizados a zonas restringidas del código.
27. Objetivos fundamentales de la tecnología Java
Verificador de los códigos de byte
o El código del software Java se somete a distintas comprobaciones
antes de ejecutarse en una máquina. La JVM lo hace pasar a través
de un verificador de códigos de byte que busca posibles
fragmentos de código ilícito, es decir, código que falsea punteros,
infringe los derechos de acceso a los objetos o intenta cambiar los
tipos de los objetos.
Nota: Todos los archivos de clases importados desde la red pasan
por el verificador de códigos.
28. Objetivos fundamentales de la tecnología Java
Proceso de verificación
o El verificador de códigos efectúa cuatro pasadas sobre el código de
un programa. De esta forma se garantiza el cumplimiento de las
especificaciones de la JVM y la integridad del sistema. Si después
de las cuatro pasadas el verificador no encuentra ningún error,
significa que:
Las clases son conformes con el formato de archivos de clases de la
especificación de JVM.
No se han producido intentos de infringir las reglas de acceso.
El código no provoca desbordamiento ni falta de operandos en la pila.
Todos los tipos de parámetros de los códigos operativos son correctos.
No se han realizado conversiones de datos irregulares tales como la
conversión de enteros en referencias a objetos.
29. Actividad 1: Introducción
1. Qué es la tecnología Java
2. Objetivos fundamentales de la tecnología Java
o Máquina virtual de Java.
o Reciclaje de memoria dinámica.
o Entorno de ejecución de Java.
o Tareas de JVM™
3. Aplicación Java sencilla
o Solución de errores de compilación
30. Aplicación Java sencilla
o Como en el caso de cualquier otro lenguaje de
programación, Java se utiliza para crear aplicaciones. Los
ejemplos a continuación contienen una aplicación Java
sencilla creada para enviar un saludo a través de la pantalla.
// Ejemplo de aplicación de "Saludo“. Clase TestGreeting
public class TestGreeting {
public static void main (String[] args) {
Greeting hello = new Greeting();
hello.greet();
}
}
//Clase Greeting.java
public class Greeting {
public void greet() {
System.out.println("hola");
}
}
31. Aplicación Java sencilla
Cuando se especifica un nombre de clase en un archivo de
código fuente, al compilar dicho archivo se crea un archivo
nombreclase.class.
Si no se especifica ningún directorio de destino que pueda usar
el compilador, el archivo de clase se situará en el mismo
directorio en el que se encuentre el archivo fuente. En este caso,
el compilador crea un archivo llamado TestGreeting.class. Este
archivo contiene el código compilado de la clase pública
TestGreeting.
32. Aplicación Java sencilla
El método main es el punto donde empieza a ejecutarse el
programa. El intérprete de Java debe encontrar esta sentencia
exactamente tal y como se muestra o deniega la ejecución.
Otros lenguajes de programación, entre los que destacan C y
C++, también utilizan la declaración main() como punto de
partida de la ejecución. A continuación se describen las distintas
partes de esta declaración. Los detalles se explican más adelante
en este curso.
Si el programa recibe argumentos en su línea de comandos,
éstos se pasan al método main() en un array de String llamado
args. En este ejemplo no se ha utilizado ningún argumento.
33. Aplicación Java sencilla
A continuación se explica cada elemento del método main:
o public: al método main() puede acceder cualquier componente de
Java, incluido el intérprete.
o static: esta palabra clave indica al compilador que el método
main() puede utilizarse en el contexto de la clase TestGreeting. No
se necesita ninguna instancia de la clase para ejecutar métodos
estáticos.
o void: esta palabra clave indica que el método main() no devuelve
ningún valor. Esto es importante porque el lenguaje Java realiza
una cuidadosa comprobación de tipos para asegurarse de que los
métodos a los que se ha llamado devuelvan los tipos de datos con
los que se han declarado.
34. Aplicación Java sencilla
o String args[]: este método declara el único parámetro del
método main, args, y utiliza como tipo un array String.
Cuando se llama a este método, el parámetro args contiene
los argumentos introducidos en la línea de comandos detrás
del nombre de clase, por ejemplo:
java TestGreeting Hola Mundo
o La siguiente línea se muestra cómo crear un objeto al que
hace referencia la variable hello. La sintaxis new Greeting
indica al intérprete de Java que construya un nuevo objeto
de la clase Greeting.
Greeting hello = new Greeting();
35. Aplicación Java sencilla
o En la siguiente línea se muestra una llamada a un método de
un objeto. Esta llamada indica al objeto hello que envíe un
saludo (greet). La implementación de este método puede
verse en el archivo Greeting.java
hello.greet();
o La siguiente línea se muestra cómo crear un objeto al que
hace referencia la variable hello. La sintaxis new Greeting
indica al intérprete de Java que construya un nuevo objeto
de la clase Greeting.
Greeting hello = new Greeting();
36. Aplicación Java sencilla
o En las siguientes líneas se muestra la declaración de un
método. El método se ha declarado public, lo que permite al
programa TestGreeting acceder a él. No devuelve ningún
valor, por lo que se utiliza void como tipo de retorno.
public void greet() {
System.out.println(“hola”);
}
o El método greet envía un mensaje en forma de cadena de
texto a la salida stándar. El método println() se utiliza para
escribir dicho mensaje en la salida.
37. Aplicación Java sencilla
Compilación y ejecución del programa TestGreeting
o Después de crear el archivo de código fuente TestGreeting.java,
compílelo mediante la línea siguiente:
javac TestGreeting.java
o Si el compilador no devuelve ningún mensaje, el nuevo archivo
TestGreeting.class se almacena en el mismo directorio que el
archivo fuente, a menos que se especifique otra cosa. El archivo
Greeting.java se ha compilado en Greeting.class. El compilador
realiza esta operación automáticamente porque la clase
TestGreeting utiliza la clase Greeting.
38. Aplicación Java sencilla
Compilación y ejecución del programa TestGreeting
o Para ejecutar la aplicación TestGreeting, utilice el intérprete de
Java. Los archivos ejecutables de las herramientas de Java (javac,
java, javadoc, etc.) están situados en el directorio bin.
java TestGreeting
o Nota: Debe definir la variable de entorno PATH de forma que
encuentre java y javac. Asegúrese de que incluya raíz_java/bin
(donde raíz_java representa el directorio raíz donde está instalado
el software de la tecnología Java).
39. Actividad 1: Introducción
1. Qué es la tecnología Java
2. Objetivos fundamentales de la tecnología Java
o Máquina virtual de Java.
o Reciclaje de memoria dinámica.
o Entorno de ejecución de Java.
o Tareas de JVM™
3. Aplicación Java sencilla
o Solución de errores de compilación
40. Aplicación Java sencilla
Solución de errores de compilación
o En las próximas secciones se describen los errores que pueden
aparecer al compilar el código de los programas.
o Errores producidos durante la compilación
A continuación se citan algunos errores que suelen producirse
durante la compilación, junto con ejemplos de los mensajes
presentados por el compilador o por el programa en ejecución.
Los mensajes pueden variar en función de la versión de Java 2
SDK que esté utilizando.
41. Aplicación Java sencilla
Solución de errores de compilación
javac: Command not found
o La variable PATH no se ha configurado adecuadamente para
incluir el compilador javac. El compilador javac está situado
en el directorio bin, debajo del directorio donde se
encuentra instalado el software del JDK™ (Java Development
Kit).
42. Aplicación Java sencilla
Solución de errores de compilación
Greeting.java:4:cannot resolve symbol
symbol : method printl (java.lang.String)
location: class java.io.PrintStream
System.out.printl("hola");
^
o El nombre del método println se ha escrito de forma
incorrecta.
43. Aplicación Java sencilla
Solución de errores de compilación
Nombres de clases y archivos
o Si el archivo .java contiene una clase pública, el nombre del
archivo debe ser igual que el nombre de la clase. Por
ejemplo, la definición de la clase en el ejemplo anterior es:
public class TestGreeting
o Por tanto, el nombre del archivo fuente debe ser
TestGreeting.java. Si ha denominado al archivo
TestGreet.java, recibirá el siguiente mensaje de error:
TestGreet.java:4: Public class TestGreeting must be
defined in a file called "TestGreeting.java".
44. Aplicación Java sencilla
Solución de errores de compilación
Cantidad de clases utilizadas
o Sólo debe declarar una clase no estática de nivel superior en cada
archivo fuente y el nombre de la clase debe ser idéntico al del
archivo. Si declara varias clases públicas, aparecerá el mismo
mensaje que en el punto anterior por cada clase pública cuyo
nombre no sea idéntico al del archivo.
45. Aplicación Java sencilla
Errores producidos durante la ejecución
Can't find class TestGreeting
o Normalmente esto significa que el nombre especificado para la
clase en la línea de comandos difiere del nombre del archivo
nombrearchivo.class . En el lenguaje Java, existe diferencia entre
mayúsculas y minúsculas.
Por ejemplo:
public class TestGreet {
crea una clase TestGreet.class, que no tiene el nombre esperado por el
compilador (TestGreeting.class).
46. Aplicación Java sencilla
Errores producidos durante la ejecución
Exception in thread "main" java.lang.NoSuchMethodError: main
o .
o Esto significa que la clase que se ha pedido al intérprete que
ejecute no tiene ningún método main estático. Puede que haya un
método main, pero es posible que no se haya declarado con la
clave estática o puede que se haya declarado con parámetros
inadecuados, por ejemplo:
o En este ejemplo, args no es un array de cadenas, sino una sola
cadena.
o En este ejemplo, el programador ha olvidado incluir una lista de
parámetros.
public static void main(String args) {
public static void main() {
47. Aplicación Java sencilla
Errores producidos durante la ejecución
o En la Figura puede verse el proceso de compilación de Java y
su posterior ejecución en la JVM. Existen muchas
implementaciones de la JVM según las distintas plataformas
de hardware y sistemas operativos.