Professional Documents
Culture Documents
JDK. Java Development Kit, es un software que provee herramientas de Desarrollo para la creación
de programas en Java. Puede instalarse en una Computadora local o en una unidad de Red.
Definición
Se puede definir como un conjunto de herramientas, utilidades, documentación y ejemplos para
desarrollar aplicaciones Java.
A continuación se explican más en profundidad cada uno de ellos, así como su sintaxis, indicando
entre corchetes aquellos elementos que sean opcionales.
Todos los programas permiten la inclusión de una serie de opciones sobre su ejecución antes del
primer argumento. Estas opciones se indican precedidas de un menos(-):
Todas las opciones que los ejecutables del JDK presentan se muestran llamando al programa sin
parámetros o con las opciones -? o -help:
programa
programa -help
programa -?
Compilador
Se utiliza para compilar archivos de código fuente Java (habitualmente *.java), en archivos de
clases Java ejecutables (*.class). Se crea un Archivo de clase para cada clase definida en un archivo
fuente.Este compilador es una utilidad en línea de comandos con la siguiente sintaxis:
javac [Opciones] ArchivoACompilar
Visualizador de applets
Es una herramienta que sirve como campo de pruebas de applets, visualizando cómo se mostrarían
en un navegador, en lugar de tener que esperar. Al ser activado desde una línea de órdenes abre una
ventana en la que muestra el contenido de la applet. Se activa con la sintaxis:
appletviewer [Opciones] Applet
Depurador
Es una utilidad de línea de comandos que permite depurar aplicaciones Java.
No es un entorno de características visuales, pero permite encontrar y eliminar los errores de los
programas Java con mucha exactitud. Es parecido en su funcionamiento al depurador gdb que se
incluye con las distribuciones del compilador gcc/g++ para C/C++. Se activa con la sintaxis:
jdb [Opciones]
Generador de documentación
Es una herramienta útil para la generación de documentación API directamente desde el código
fuente Java. Genera páginas HTML basadas en las declaraciones y comentarios javadoc, con el
formato /** comentarios */:
La documentación que genera es del mismo estilo que la documentación que se obtiene con el JDK.
Las etiquetas, que se indican con una arroba (@), aparecerán resaltadas en la documentación
generada. Su sintaxis es:
javadoc Opciones NombreArchivo
Applets de demostración
El JDK incluye una serie de applets de demostración, con su código fuente al completo.
Código fuente la API. El código fuente de la API se instala de forma automática, cuando se
descomprime el JDK, aunque permanece en formato comprimido en un archivo llamado "scr.zip"
localizado en el directorio Java que se creó durante la instalación.
¿Qué significa JRE, para qué es y cómo funciona?
Así es cómo funciona JRE (Java Runtime Environment). También conoceremos los componentes que
cuenta. ¿Sabes realmente lo que es JRE?
Class Loader: El Class Loader carga todas las clases necesarias para la ejecución de un
programa. Proporciona seguridad al separar los espacios de nombres del sistema de archivos
local, de los importados a través de la red. Estos archivos se cargan desde un disco duro, una red
o desde otras fuentes.
Byte Code Verifier: La JVM coloca el código en Byte Code Verifier que verifica el formato y
busca un código ilegal. El código ilegal, por ejemplo, es un código que infringe los derechos de
acceso en los objetos o viola la implementación de los punteros.
El Byte Code verifier (verificador de código de bytes) asegura que el código se adhiere a la
especificación de la JVM y no viola la integridad del sistema.
1. Ejecute el ByteCode
Nosotros instalaremos el JDK ya qué con el JRE solo podríamos ejecutar los programas una vez
compilados y con extensión .class.
Como vimos anteriormente en las características de Java, se destaca por ser independiente de la
plataforma, y precisamente esto se debe a la JVM, pero ¿qué es realmente la máquina virtual de
Java?
JVM es la que realmente llama al método principal presente en un código Java. JVM es una parte del
JRE (Java Run Environment).
Las aplicaciones Java se llaman WORA (Write Once Run Everywhere). Esto significa que un
programador puede desarrollar código Java en un sistema y puede esperar que se ejecute en cualquier
otro sistema habilitado para Java sin ningún ajuste. Todo esto es posible gracias a la JVM.
Carga
Enlace
Inicialización
1.1.1. Carga
El cargador de clases lee el archivo .class, genera los datos binarios correspondientes y los guarda en
el área de métodos (“method area” –vea la imagen anterior). Para cada archivo .class, JVM almacena la
siguiente información en el área de método.
Después de cargar el archivo .class, JVM crea un objeto de tipo Class para representar este archivo en la
memoria heap. Tenga en cuenta que este objeto es de tipo Class predefinido en el paquete java.lang.
Este objeto Class puede ser utilizado por el programador para obtener información de nivel de clase
como nombre de clase, nombre principal, métodos e información de variable, etc. Para obtener esta
referencia de objeto, podemos usar el método getClass() de la clase Object.
Por ejemplo:
1. // Un programa de Java para demostrar el funcionamiento de un objeto de tipo Class
2. // creado por la JVM para representar el archivo .class en momoria
3. import java.lang.reflect.Field;
4. import java.lang.reflect.Method;
5.
6. // Código Java para demostrar el uso del objeto Class
7. // creado por JVM
8. public class Test
9. {
10. public static void main(String[] args)
11. {
12. Student s1 = new Student();
13.
14. // Obtener el objeto Class creado
15. // por la JVM.
16. Class c1 = s1.getClass();
17.
18. // Imprimir el tipo de objeto usando c1.
19. System.out.println(c1.getName());
20.
21. // Obteniendo todos los métodos en una matriz
22. Method m[] = c1.getDeclaredMethods();
23. for (Method method : m)
24. System.out.println(method.getName());
25.
26. // Obteniendo todos los campos en una matriz
27. Field f[] = c1.getDeclaredFields();
28. for (Field field : f)
29. System.out.println(field.getName());
30. }
31. }
32.
33. // Una clase de muestra cuya información se obtiene anteriormente usando
34. // su objeto class.
35. class Student
36. {
37. private String name;
38. private int roll_No;
39.
40. public String getName() { return name; }
41. public void setName(String name) { this.name = name; }
42. public int getRoll_no() { return roll_No; }
43. public void setRoll_no(int roll_no) {
44. this.roll_No = roll_no;
45. }
46. }
Salida:
Student
getName
setName
getRoll_no
setRoll_no
name
roll_No
Verificación: asegura la exactitud del archivo .class, es decir, comprueba si este archivo está
formateado correctamente y generado por un compilador válido o no. Si la verificación falla,
obtenemos la excepción de tiempo de ejecución java.lang.VerifyError.
Preparación: JVM asigna memoria para las variables de clase e inicializa la memoria a los
valores predeterminados.
Resolución: es el proceso de reemplazar referencias simbólicas del tipo con referencias directas.
Se realiza buscando en el área del método (method area) para localizar la entidad a la que se
hace referencia.
1.1.3. Inicialización
En esta fase, todas las variables estáticas se asignan con sus valores definidos en el código y en el bloque
estático (si corresponde). Esto se ejecuta de arriba a abajo en una clase y de padres a hijos en la jerarquía
de clases.
Cargador de clases Bootstrap (Bootstrap class loader): cada implementación de JVM debe
tener un cargador de clases de arranque, capaz de cargar clases confiables. Carga las clases API
centrales de java presentes en el directorio JAVA_HOME/jre/lib. Esta ruta se conoce
popularmente como ruta de arranque. Se implementa en lenguajes nativos como C, C++.
Cargador de clases de extensiones (Extension class loader): es un elemento secundario del
Bootstrap class loader. Carga las clases presentes en los directorios de
extensiones JAVA_HOME/jre/lib/ext (Ruta de extensión) o cualquier otro directorio
especificado por la propiedad del sistema java.ext.dirs. Está implementado en Java por la clase
sun.misc.Launcher$ExtClassLoader.
Cargador de clases de sistema/aplicación (system/Application class loader): es secundario del
cargador de clases de extensión. Es responsable de cargar las clases desde la ruta de la clase de
aplicación. Internamente utiliza la variable de entorno asignada a java.class.path. También se
implementa en Java mediante la clase sun.misc.Launcher$AppClassLoader.
Por ejemplo:
null
sun.misc.Launcher$AppClassLoader@73d16e93
Nota: JVM sigue el principio Delegación-Jerarquía para cargar clases. El cargador de clases
del sistema delega la solicitud de carga al cargador de clases de extensión y la solicitud de
delegado del cargador de clases de extensión al cargador de clases bootstrap. Si la clase se
encuentra en la ruta boot-strap, la clase se carga; de lo contrario, solicite de nuevo las
transferencias al cargador de clases de extensión y luego al cargador de clases del sistema. Por
último, si el cargador de clases del sistema no puede cargar la clase, entonces obtenemos la
excepción de tiempo de ejecución java.lang.ClassNotFoundException.
Área de método (Method area): en el área de método, se almacena toda la información del
nivel de clase, como el nombre de clase, el nombre inmediato de la clase principal, la
información de métodos y variables, etc., incluidas las variables estáticas. Solo hay un área de
método por JVM, y es un recurso compartido.
Área Heap (Heap area): la información de todos los objetos se almacena en el área heap.
También hay un área heap por JVM. También es un recurso compartido.
Área de pila (Stack area): para cada subproceso, JVM crea una pila en tiempo de ejecución que
se almacena aquí. Cada bloque de esta pila se llama registro de activación/marco de pila que
almacena los métodos de llamadas. Todas las variables locales de ese método se almacenan en
su marco correspondiente. Una vez que finaliza un hilo, JVM destruirá la pila en tiempo de
ejecución. No es un recurso compartido.
Registros de PC (PC Registers): Almacena la dirección de la instrucción de ejecución actual de
un hilo. Obviamente, cada hilo tiene registros de PC separados.
Pilas de métodos nativos (Native method stacks): para cada hilo, se crea una pila nativa
separada. Almacena información del método nativo.
Intérprete: interpreta el bytecode línea por línea y luego lo ejecuta. La desventaja aquí es que
cuando se llama un método varias veces, cada vez se requiere interpretación.
Compilador Just-In-Time (JIT): se usa para aumentar la eficiencia del intérprete. Compila
todo el bytecode y lo cambia a código nativo para que cada vez que el intérprete vea llamadas a
métodos repetidos, JIT proporcione código nativo directo para esa parte, de modo que la
reinterpretación no es necesario, por lo tanto, se mejora la eficiencia.
Recolector de basura: destruye objetos no referenciados.
Los IDE ofrecen un marco de trabajo amigable para la mayoría de los lenguajes de programación
tales como C++, Python, Java, C#, Delphi, Visual Basic, etc. En algunos lenguajes, un IDE puede
funcionar como un sistema en tiempo de ejecución, en donde se permite utilizar el lenguaje de
programación en forma interactiva, sin necesidad de trabajo orientado a archivos de texto, como es
el caso de Smalltalk u Objective-C.
Es posible que un mismo IDE pueda funcionar con varios lenguajes de programación. Este es el
caso de Eclipse, al que mediante plugins se le puede añadir soporte de lenguajes adicionales.
Multiplataforma
Soporte para diversos lenguajes de programación
Integración con Sistemas de Control de Versiones
Reconocimiento de Sintaxis
Extensiones y Componentes para el IDE
Integración con Framework populares
Depurador
Importar y Exportar proyectos
Múltiples idiomas
Manual de Usuarios y Ayuda
Componentes
Editor de texto.
Compilador.
Intérprete.
Herramientas de automatización.
Depurador.
Posibilidad de ofrecer un sistema de control de versiones.
Factibilidad para ayudar en la construcción de interfaces gráficas de usuarios.
Ejemplos
NetBeans: Programa que sirve como IDE que permite programar en distintos
lenguajes, es ideal para trabajar con el lenguaje de desarrollo JAVA (y todos sus
derivados), además ofrece un excelente entorno para programar en PHP. También
se puede descargar una vez instalado NetBeans, los complementos para
programar en C++. La IDE de NetBeans es perfecta y muy comoda para los
programadores. Tiene un excelente balance entre una interfaz con múltiples opciones y un aceptable
completamiento de código.
Geany: Es un IDE que hasta hace bien poquito sólo estaba disponible para
sistemas Linux, Mac OS X y BSD, pero ya está disponible para Windows. Este
entorno es muy sencillo, pero proporciona las funcionalidades necesarias para desarrollar
aplicaciones sin problemas. Su interfaz está dividida en tres zonas: panel lateral con el árbol de
carpetas y documentos abiertos, sección principal para el código y panel inferior para los mensajes
de la aplicación, compilación, etc. Este IDE permite programar en diferentes lenguajes como:
C, C++, Java, Python, Pascal, SQL o HTML
Son variables de entorno, y ¿que son las variables de entorno? no son mas que variables
que almacenan configuraciones y direcciones de nuestro sistema como carpeta de usuarios,
direcciones de librerías o recursos del sistema, etc.
Entonces:
PATH:-Para poder ejecutar programas Java desde cualquier carpeta, la carpeta con los
archivos javac.exe y java.exe debe estar incluida en el PATH del sistema.
CLASSPATH:-la cual determina dónde buscar tanto las clases o librerías de Java (el API
de Java) como otras clases de usuario. La variable CLASSPATH puede incluir la ruta de
directorios o ficheros *.zip o *.jar en los que se encuentren los ficheros *.class. En el caso
de los ficheros *.zip hay que observar que los ficheros en él incluidos no deben estar
comprimidos.