Parte 01 - Java Primeros Pasos
Parte 01 - Java Primeros Pasos
Esta área tiene como objetivo el desarrollo de aplicaciones móviles, tales como GPS, Handhelds
(por ejemplo la conocida Palm), celulares y otros dispositivos móviles programables. JME significa
Java Micro Edition.
JSE Java Standard Edition
Esta área tiene como objetivo el desarrollo de aplicaciones de escritorio, similares a las aplicaciones
tipo ventanas creadas con Visual Basic o Delphi. Incluye la funcionalidad básica del lenguaje como
manejo de clases, colecciones, entrada/salida, acceso a base de datos, manejo de sockets, hilos de
ejecución, etc. JSE significa Java Standard Edition.
JEE Java Enterprise Edition
Esta área tiene como objetivo el desarrollo de aplicaciones empresariales, de gran envergadura.
Contempla ambientes web, como los ambientes manejados por servidores de aplicación. Las
tecnologías principales incluidas en esta área son Servlets, JSP y EJB, entre otras. JEE significa
Java Enterprise Edition.
Un Asociado certificado por Oracle (OCA, por su sigla en inglés) posee destrezas fundamentales
y conocimientos básicos, y uno o dos años de experiencia.
Un Profesional certificado por Oracle (OCP, por su sigla en inglés) es la credencial insignia de
nuestro programa. Esta certificación mide un nivel más profundo y avanzado de destrezas.
Convertirse en un OCP demuestra sus capacidades y sus sólidos conocimientos en un área
específica de la tecnología de Oracle, y dos o tres años de experiencia.
La Historia
El comienzo
En el año 1990 nace Java, bajo el diseño y la implementación de la empresa Sun Microsystems. El
padre-fundador de la tecnología es el James Gosling, a través de una filial dentro de Sun llamada
First Person Inc.
Gosling tuvo la visión inicial de construir una lenguaje de programación capaz de ejecutar su
código sobre cualquier set de instrucciones, de distintos procesadores. Inicialmente el proyecto
apuntó a la programación unificada de distintos electrodomésticos, es decir programar una sola vez
y que el programa generado fuera útil para cualquier dispositivo.
El proyecto inicial de Java fue técnicamente un éxito, aunque comercialmente no tuvo el
rendimiento esperado, y debió ser relegado unos años.
Aparición de Internet
En el año 1993, Internet da el gran salto, y se convierte de una interfaz textual a una interfaz gráfica.
Java ve una oportunidad y entra fuertemente a internet con los Applets, pequeños programitas
construidos en Java – con todos sus beneficios – capaces de ejecutarse dentro de un navegador. Es
aquí donde Java comienza a dar sus primeros pasos firmes como lenguaje a difundir masivamente.
En el año 1995, el navegador Netscape Navigator comienza formalmente a soportar los Applets
Java.
Adicionalmente, el lenguaje podía adaptarse fácilmente a las múltiples plataformas, con lo cual
surge una de las primeras aplicaciones multiplataformas más conocidas: WebRunner (hoy HotJava),
un navegador multiplataforma construido en Java.
Por qué el nombre JAVA
Inicialmente la intención fue nombrar al lenguaje de programación con el nombre de Oak, pero este
ya estaba registrado. La leyenda cuenta que una visita a la cafetería le dio rápida solución al
problema.
En las confiterías norteamericanas hay un café denominado Java, en el cual esta inspirado el
nombre del lenguaje de programación. El logotipo de Java es justamente una taza café.
El Java Development Kit (JDK)
Oracle JDK
El Java Development Kit es el kit de desarrollo propuesto por Sun Microsystems para realizar
desarrollos en JAVA. Se puede bajar de forma gratuita de la pagina http://www.oracle.com.
El kit incluye herramientas de desarrollo tales como un compilador, un debugger, un documentador
para documentar en forma casi automática una aplicacion, un empaquetador para crear archivos de
distribucion, y otras herramientas mas.
El kit no incluye un entorno de desarrollo interactivo (o IDE) como pueden ser Netbeans,
JDeveloper, IntelliJ o Eclipse.
El 20 de marzo de 2018 se publicó la que es la versión 10 de Java siguiendo el nuevo calendario de
publicar una nueva versión cada seis meses, Java 9 fue publicado en septiembre del año anterior.
Con este nuevo calendario no pasarán tantos años entre cada nueva versión que era la queja de
algunos desarrolladores y el motivo de que la plataforma Java no evolucionar tan rápidamente como
algunos desarrolladores desean, quizá ahora la queja sea al contrario que se publican demasiadas
versiones y no da tiempo a asimilar los cambios. Para dar cabida a ambas necesidades y garantizar
un soporte prolongado cada año y medio será declarada una versión como de soporte a plazo largo o
LTS para que las empresas tengan seguridad en las aplicaciones que desarrollen.
Lo mejor de este nuevo calendario de publicaciones cada seis meses es que las empresas y
programadores tienen predictibilidad de cuándo se lanzará la siguiente versión aunque las nuevas
características que tenga no está predeterminado ya no pasarán varios años entre versiones
visibilizando que la plataforma evoluciona continuamente en pequeños saltos cada poco tiempo en
vez de saltos grandes cada mucho tiempo que son más disruptivos y hace más difícil la adopción.
Es un principio no añadir características según lo que está de moda sino pensando en décadas
futuras. Java 10 tiene una lista más reducida de cambios que Java 9 pero importantes y
significativos. Java es el último en unirse a la fiesta de la inferencia de tipos pero ha sido de forma
intencionada ya que el coste de implementarla de forma incorrecta supone un alto coste que hay que
mantener en adelante. Otras ideas que ha sido implementadas el lenguajes de programación
funcional y están listas para su uso masivo tomarán su propio camino en futuras versiones de Java.
El posible futuro JDK 11+, está planificado en seis meses después de Java 10 y con soporte
extendido, el soporte de Java 10 durará tan solo hasta 2018.09, el de Java 11 al ser una LTS durará
un periodo de 8 años hasta el 2026.09.
OpenJDK
Ej:
JDK10 se libera en Marzo 2018 con soporte hasta Septiembre 2018.
JDK11 LTS se libera en Septiembre 2018 con soporte hasta Septiembre 2026.
JDK12 se libera en Marzo 2019 con soporte hasta Septiembre 2019.
JDK13 se libera en Septiembre 2019 con soporte hasta Marzo 2020.
JDK14 se libera en Marzo 2020 con soporte hasta Septiembre 2020.
JDK15 se libera en Septiembre 2020 con soporte hasta Marzo 2021.
JDK16 se libera en Marzo 2021 con soporte hasta Septiembre 2021.
JDK17 LTS se libera en Septiembre 2021 con soporte hasta Septiembre 2029
Java 11 es la primera versión de soporte extendido publicada o LTS bajo el nuevo ciclo de
publicaciones que adoptó Java en la versión 9. Añade varias novedades importantes en cuanto a
seguridad y elimina otras que en versiones anteriores ya fueron marcadas como desaconsejadas.
En la plataforma Java era habitual que entre versión y versión mayor pasasen varios años
normalmente 3 o más. Este ciclo de publicaciones no se adapta a las necesidades de todas las
empresas, organizaciones y usuarios. Algunas empresas y usuarios desean ciclos de publicaciones
más cortos quizá con no tantas novedades en cada uno de ellos pero sí de forma más constante
incorporando mejoras. Otras organizaciones necesitan confiar en una versión que tenga un ciclo de
soporte largo para sus aplicaciones.
Para adaptarse a ambos requerimientos Java a partir de Java 9 adoptó un nuevo ciclo de
publicaciones siendo cada seis meses para los que desean mejoras de forma regular y cada tres años
para los que necesitan soporte extendido. Java 9 incorporó la esperada modularización que cambia
la forma de desarrollo de las aplicaciones con numerosas mejoras. Java 10 añadío la inferencia de
tipos para variables locales con la palabra reservada var. Ahora Java 11 siendo una versión de
soporte extendido o LTS, el soporte de Java 11 está planificado que dure hasta 2023 y hasta 2026 de
forma extendida lo que son 8 años de soporte.
En esta nueva versión de Java 11 publicada el 25 de septiembre de 2018 las novedades no son tan
relevantes como lo fuero Java 8 con las lamdas y Java 9 con los módulos pero continúa con las
mejoras incrementales y proporciona una versión LTS en la que empresas grandes confiarán como
base para sus desarrollos.
Sin embargo, sabiendo los cambios de licencias que estaban preparando, Oracle ha trabajado muy
duro para hacer que el OpenJDK se haya equiparado en todos los aspectos al JDK, hasta el punto
de que se puede decir que el OpenJDK y el JDK son idénticos desde un punto de vista técnico,
desde la versión 11.
Debido a ello, ahora el OpenJDK debería ser tu opción por defecto para programar en Java.
Esto no significa que Java deje de ser gratuito, ni es una gran tragedia para la plataforma tampoco.
Para la mayoría de desarrolladores y empresas no habrá una gran diferencia. El desarrollo se
trasladará a OpenJDK (que ahora es equiparable al JDK) en lugar de al tradicional JDK de Oracle, y
el soporte se obtendrá de la comunidad. Para ciertas grandes empresas y administraciones, el hecho
de pagar no les importará y de hecho será una ventaja porque tendrán garantizada la estabilidad y el
soporte directo de Oracle durante unos años.
Aún así Java sigue y seguirá siendo el lenguaje más popular del mundo, y el que más puestos de
trabajo genera, así que merece la pena aprenderlo bien.
Eclipse OpenJ9
OpenJ9 es una implementación de java de alto rendimiento, escalable.
El Eclipse OpenJ9 JVM es totalmente compatible con la especificación Java JVM. La misma
versión de la JVM puede ser utilizado en OpenJDK 8 y versiones posteriores, lo que significa que
muchas características y mejoras pueden ser explotados por las aplicaciones que se ejecutan en
diferentes versiones de Java.
Eclipse OpenJ9 incrusta Eclipse OMR , que proporciona componentes de ejecución de la base que
se pueden utilizar para construir entornos de ejecución para diferentes lenguajes de programación.
En el proyecto OpenJ9, una capa adicional de código añade la semántica del lenguaje para
proporcionar un entorno de ejecución de aplicaciones Java.
El nombre con el cual se deberá guardar el archivo debe ser HolaMundo.java, es importante que el
nombre del archivo sea igual al nombre de la public class.
Por otra parte, se debe tener cuidado al escribir el código puesto que el lenguaje es sensible al caso,
lo cual quiere decir que las mayúsculas y la minúsculas se interpretan diferente.
Compilar el archivo fuente en un archivo de bytecodes, Para compilar el archivo fuente, desde
terminal (consola) de sistemas, se debe cambiar al directorio en el que se encuentra el archivo y
ejecutar el compilador, javac, con el cuidado que el sistema operativo pueda encontrarlo (definir el
camino – path – para hacerlo).
javac HolaMundo.java
Si el prompt reaparece sin mensajes de error, el programa se ha compilado con éxito. El compilador
ha generado un archivo de bytecodes Java, HolaMundo.class. Ahora que existe un archivo .class, se
puede ejecutar el programa.
Nota: para realizar todos estos pasos se puede utilizar un entorno de desarrollo integrado (IDE).
Este tipo de entornos definen internamente la variable CLASSPATH y permiten editar, compilar,
ejecutar y depurar los programas en Java, pero más allá del entorno que se posea, siempre invocan
a los comandos aquí explicados aunque en forma transparente para el desarrollador.
La variable de entorno CLASSPATH
La variable de entorno CLASSPATH se utiliza para referenciar el directorio donde estarán ubicadas
todas las clases construidas en JAVA, para que el JRE al ejecutar una clase sepa dónde ubicar el
resto de las clases o archivos empaquetados que contienen clases.
java HolaMundo
Y el programa se ejecutara.
Primero armar un archivo Manifest.mf adentro de la carpeta del proyecto con el siguiente texto.
Main-Class: HolaMundo
La opción "c" indica que queremos crear un fichero.jar nuevo. Si ya existía, se borrará, así que hay
que tener cuidado.
La opción "m" para indicar que vamos a añadir un fichero de manifiesto.
La opción "f" sirve para indicar el nombre del fichero, que va inmediatamente detrás. En nuestro
caso, fichero.jar. Finalmente se pone una lista de HolaMundo.class (o de cualquier otro tipo) que
queramos meter en nuestro jar. Se pueden usar comodines, estilo *.class para meter todos los .class
de ese directorio.
Este comando armara el archivo.jar que puede ser ejecutado desde un entorno grafico haciendo
doble clic o desde consola de sistema, de la siguiente manera:
Compiladores e intérpretes
Los compiladores funcionan leyendo el programa de un archivo fuente almacenado en disco,
resuelven todas las sentencias definidas para el compilador y generan un archivo en formato .obj.
Estos archivos no están todavía en binario, sólo están en ese formato las instrucciones que pudo
resolver el compilador. El resto se dejan como marcas para que las resuelva el enlazador.
El enlazador recorre el archivo generado por el compilador, enlaza los llamados a procedimientos y/
o funciones y busca en las librerías las funciones que puedan encontrarse almacenadas allí cuyos
llamados se encuentre en el archivo .obj. Además, genera la estructura básica de todo programa
ejecutable para volcarlo como salida final del procesamiento. Este último paso es el que deja el
archivo totalmente en binario y ejecutable por la plataforma en donde se desarrolló la aplicación
Cuando el código se interpreta en lugar de compilarlo y enlazarlo, el intérprete lee cada instrucción,
la traduce e intenta ejecutarla siguiendo el mismo esquema de funcionamiento que un programa
compilado y enlazado, emulando la estructura que diseña el enlazador para ese tipo de programas.
Esto deriva en que la ejecución de un programa interpretado sea muy lenta.
En Java, para acelerar este proceso, el código pasa por un proceso de compilación de manera de
optimizar el trabajo de interpretación, disminuyendo considerablemente el tiempo de
procesamiento.
El compilador de Java
El compilador toma el código fuente Java y genera los bytecodes que componen el archivo de salida
.class. Los bytecodes son código de instrucciones de máquina para la Java Virtual Machine, por lo
tanto, todo componente de la tecnología de Java termina siendo un conjunto de estas instrucciones,
las cuales están definidas para implementar una máquina virtual y se componen de:
- Un conjunto de instrucciones
- Un conjunto de registros
- Un formato para los archivos de clases
- Un Stack
- Un heap con un recolector de basura (garbage collector)
- Un área de memoria
Donde:
Zona de Texto: Es el lugar donde se almacenan todas las instrucciones de programa
Memoria Estática: Es donde se almacenan las variables globales (según el lenguaje) y las
estáticas.
Stack: Es el lugar donde se almacenan los parámetros y variables locales de un método. Se agranda
o reduce dinámicamente en cada invocación a un método.
Heap: Es la memoria asignada a un programa que no se encuentra en uso actualmente pero que se
puede pedir dinámicamente.
Variables
En Java se puede hacer una primera clasificación de las variables según su procedencia en dos
grupos:
La principal diferencia entre estos dos grupos es que el primero son los tipos de datos prexistentes
definidos en el lenguaje mientras que los segundos son aquellos que pueden almacenar las
referencias que se obtienen al crear un objeto de cualquier clase que se haya definido.
Es necesario mencionar un área gris en el lenguaje. Hay ciertos tipos referenciados, o sea, que
provienen de clases definidas, que el lenguaje los maneja como tipos prexistentes. La razón de esto
es que dichas clases se consideraron con la importancia suficientes como para que el lenguaje las
maneje internamente. Este es el caso del tipo String, como se verá posteriormente.
El manejo de estas propiedades es lo que garantiza el buen uso de las mismas, por lo tanto, si se
puede asociar una variable con los atributos de una clase, es fundamental dominar el concepto para
saber donde utilizarlas y como.
boolean
El tipo de dato boolean se utiliza para almacenar las palabras claves true o false, es decir verdadero
o falso. Ocupan 1 byte en memoria.
char
El tipo de dato char se utiliza para almacenar un solo caracter, del tipo Unicode. Ocupan 2 bytes en
memoria.
Unicode 10 Java 11
Tratar texto es una parte importante casi de cualquier aplicación, este soporte de Unicode 10 añade
16018 nuevos caracteres soportados, 128 nuevos emojis y 19 símbolos nuevos para el estándar en
televisiones 4K.
byte
El tipo de dato byte es un tipo de dato numérico y entero, se utiliza para almacenar números
comprendidos entre -128 y 127. Ocupa 1 byte de memoria.
short
El tipo de dato short es un tipo de dato numérico y entero, se utiliza para almacenar números
comprendidos entre -32768 y 32767. Ocupa 2 bytes de memoria.
int
El tipo de dato int es un tipo de dato numerico y entero, se utiliza para almacenar numeros
comprendidos entre -2.147.483.648 y 2.147.483.647. Ocupa 4 bytes de memoria.
long
El tipo de dato long es un tipo de dato numérico y entero, se utiliza para almacenar numeros
comprendidos entre -9.223.372.036.854.775.808 y 9.223.372.036.854.775.807. Ocupa 8 bytes de
memoria.
float
El tipo de dato float es un tipo de dato numérico y de punto flotante, se utiliza para almacenar
números comprendidos entre -3.402823E38 a -1.401298E-45 y de 1.401298E-45 a 3.402823E38.
Ocupa 4 bytes de memoria, y maneja entre 6 y 7 cifras decimales.
double
El tipo de dato float es un tipo de dato numérico y de punto flotante, se utiliza para almacenar
números comprendidos de 1.79769313486232E308 a -4.94065645841247E-324 y de
4.94065645841247E-324 a 1.79769313486232E308. Ocupa 8 bytes de memoria, y maneja unas 15
cifras decimales.
Nota: Los tipos de datos primitivos de Java no son nulleables, es decir no se le puede asignar null
Comentarios
En Java existen tres formas de poner comentarios dentro del código y son los siguientes
La tercera alternativa es igual que la segunda. La primera diferencia radica es que comienza con /**
, y la segunda es que este tipo de comentarios los lee un programa de utilidad llamado javadoc y lo
utiliza para documentar la clase, como muestra el siguiente ejemplo
/**
Comentario JavaDoc
*/
Es para que lo lea el javadoc, lo que el programa de utilidad lee en comentarios como el anterior, lo
incluye en archivos HTML que conforman la documentación de la o las clases sobre las que se
ejecuto javadoc.
Este comentario es muy importante para la documentación de un proyecto, Las IDEs se valen del
javaDoc para asistir al programador, y a la vez es un comentario visible para actores de proyecto
que no tienen acceso al código fuente (analistas, diseñadores y testers).
Identificadores
Hay una regla muy simple para determinar si algo es un identificador:
Como se puede apreciar, dentro de esta característica entran varios elementos antes mencionados,
como ser, nombres de clases, variables, métodos, etc...
Hay otros elementos del lenguaje Java todavía no mencionados que son identificadores.
Estos se irán descubriendo como tales a medida que se aprenda más del lenguaje siguiendo la
simple regla antes mencionada.
Es preciso aclarar que cualquier palabra que el lenguaje defina como “reservada o clave”, no podrá
ser utilizada como identificador.
Por otro lado, crear un identificador es asignarle un nombre a un elemento que permite definir un
lenguaje de programación. Esta asignación de nombres debe seguir ciertas normas prestablecidas en
el formato del mismo que variarán de lenguaje a lenguaje. En el caso de Java, las reglas a seguir son
las siguientes:
Vale la pena mencionar que el espacio en blanco no es un carácter permitido como se puede
apreciar, por lo tanto no debe utilizarse para nombrar un identificador.
Además existen ciertas normas estandarizadas para crear identificadores, que si bien no son
obligatorias, han sido adoptadas por la mayoría de los programadores y seguirlas ayudan mucho a la
legibilidad del código. Algunas de ellas son las siguientes
No se debe olvidar el hecho de que Java es un lenguaje case sensitive (diferencia entre mayúsculas
y minúsculas), por lo tanto si dos identificadores son iguales en su significado a la lectura pero
difieren tan sólo en el caso de una letra, el lenguaje los considerará identificadores distintos.
Palabras Reservadas
Como en todo lenguaje existen palabras reservadas que no se pueden usar como identificador.
Tipos primitivos
Las declaraciones de las variables se realizan con el siguiente formato:
En otras palabras:
Si aparece “<>”, quiere decir “elegir uno entre los posibles”
Si aparece “[]”, quiere decir que es opcional
Si una palabra o símbolo aparece sin ninguna otra cosa, indica que ponerlo es
obligatorio
• public
• private
• protected
• Sin modificador
Nota: En este punto es bueno señalar que en Java toda sentencia termina con un “;”. El otro
símbolo que indica el fin de algo es la “}”, pero se utiliza para ciertos tipos de declaraciones que
se llaman bloques.
Ejemplo
int nroEmpleados=10;
int edad=20;
float sueldoFijo;
long documento;
int a=4, b=3, d=66; //declaración y asignación multiple
Nota: Cuando a una variable se le asigna un valor numérico dentro del código, dicho número se lo
identifica como “literal de asignación”. El lenguaje toma esos caracteres y los convierte al valor
binario que debe almacenar en la memoria para la variable.
Strings
Las cadenas de caracteres o “strings” en Java se manejan con una clase interna del lenguaje, por lo
tanto, siempre será un tipo referenciado.
El lenguaje permite varias formas de asignar una cadena de caracteres:
Ejemplo:
String nombre = new String("Juan");
String apellido = "Perez";
char[] vector = {‘h’,’o’,’l’,’a’};
String saludo = new String(vector);
String texto = null; //Los Strings son nulleables
Internamente un String almacena un array de caracteres (unicode 2 bytes). A partir de java 9 hay un
cambio importante llamado “Compact String” que almacena un array de bytes.
Hasta java 8 el String era almacenado como:
}
}
Tipo de datos var JDK10
Java 10 adiciona la nueva palabra reservada var, esto ayuda a no tener que repetir varias veces los
tipos en la construcción de un objeto. La inferencia de tipos es la idea que permite al compilador
obtener el tipo estático sin que sea necesario escribirlo de forma explícita.
System.out.println(v1);
System.out.println(v2);
System.out.println(v3);
System.out.println(v4);
System.out.println(v5);
System.out.println(v6);
System.out.println(v7);
System.out.println(v8);
totales = a + b + c + d + e + f;
El compilador separa las sentencias o llamados a función por cada “;” que encuentre.
Por otra parte, las sentencias del lenguaje se colocan dentro de bloques, los cuales se definen con un
par de llaves. Por lo tanto, se puede definir un bloque como una colección de sentencias limitadas
por la apertura y cierre de llaves:
{
x = y + 1;
y = x + 1;
}
Otra característica de los bloques es que definen sus propias visibilidades, por lo tanto las variables
declaradas dentro de ellos tienen alcance del bloque.
Los bloques se pueden anidar, por lo tanto, cuando se anidan bloques los que están anidados ven las
variables de los bloques que los contienen.
{
int x = 1;
System.out.println(x);
}
// System.out.println(x); //esta sentencia da error, por que la variable
//esta fuera de scope (alcance).
Los bloques se utilizan para separaciones sintácticas, como por ejemplo, el contenido de una clase:
Se pueden utilizar los espacios en blanco que se necesiten sin que afecten el código.
Ejemplo
public class UsaPersona {
public static void main(String[] args) {
System.out.println("Inicio del programa.");
System.out.println("Hola Mundo!!");
Persona p = new Persona();
}
}
• \n : Nueva línea.
• \t : Tabulador.
• \’ : Comilla simple.
• \” : Comilla doble.
Release
Date Description
Feature freeze. Merge window closes. Only fixes intended for next release to be
June 15th merged into master.
Release branch <version>.1 created and beta build(s) made available. NetCAT lite???
July 7th NB <version>.1 voting candidate created and release vote commences.
NetBeans 11.1 (in 2019)
July 15th NetBeans 12.1 (in 2020) NB <version>.1 released.
October 7th NB <version>.2 voting candidate created and release vote commences.
NetBeans 11.2 (in 2019)
October 15th NetBeans 12.2 (in 2020) NB <version>.2 released.
January 7th NB <version>.3 voting candidate created and release vote commences.
NetBeans 11.3 (in 2020)
January 15th NetBeans 12.3 (in 2021) NB <version>.3 released. (Start NetCAT with this release here???)
April 21st
GOTO 10
Comando jshell del terminal JDK 9
En java 9 tenemos un nuevo comando disponible en nuestro terminal, el comando jshell. Con este
comando podemos probar directamente por consola cualquier sentencia de java sin necesidad de un
IDE. Como vemos en el siguiente ejemplo, podemos usar variables, realizar imports o cualquier
sentencia que se nos ocurra. Además nos da detalles si encuentra algún error en el código.
Modularidad JDK 9
En el año 2000 el JDK tenía múltiples dependencias entre paquetes no relacionados:
Esto ocurre porque en un proyecto en el que no haya límites claros –como una división en librerías–
es fácil tomar atajos que creen dependencias sin que nadie lo note. Incluso en un proyecto con
desarrolladores disciplinados como el JDK, hicieron falta años para refactorizar hacia un sistema
modular.
En 2017, el JDK modularizado tiene este aspecto (versión simplificada):
java.activation@9
java.base@9
java.compiler@9
java.corba@9
...
Verás que los módulos tienen los siguientes prefijos:
Módulos del núcleo de la plataforma Java. Estos son los módulos del
java lenguaje, módulos enterprise, o módulos agregadores que agrupan los dos
anteriores.
Los módulos agregadores son módulos sin código propio que agrupan a otros módulos mediante
sentencias requires transitive. En el JDK hay dos:
• java.se: Java Standard Edition
• java.se.ee: Java Enterprise Edition
Un proyecto bien diseñado no debería requerir los módulos agregadores, a menos que necesite la
plataforma entera, lo cual es improbable.