===== Introducción a la plataforma Java =====

==== La plataforma Java ====

<figure>
{{ java_overview.png?400 }}
<caption>La plataforma Java</caption></figure>

=== Características principales ===

  * Lenguaje de propósito general
  * Lenguaje Orienta a Objetos
  * Multiplataforma
  * Lenguaje interpretado (por su máquina virtual) pero es compilado previamente
  * Además del lenguaje, se proporciona toda una plataforma sobre la que se puede desarrollar (incluso con otros lenguajes)

=== Componentes principales ===

  * El compilador de Java (javac)
  * La máquina virtual de Java (JVM)
==== La máquina virtual (JVM: Java Virtual Machine) ====

Los principales componentes de la Java Virtual Machine son:

  * **Java Stack**: Zona de memoria donde se almacenan las llamadas a métodos y las variables locales y referenciadas
  * **Java Heap**: Zona de memoria donde se almacenan los objetos creados
  * **Garbage collector** (Recolector de basura): Se encarga de liberar aquellos objetos que ya no es necesario mantener en memoria (sin que el programador tenga que hacer nada)


<figure>
{{ java_stack_heap.jpg?400 }}
<caption>Java stack / Java Heap</caption></figure>
==== Kit de desarrollo/ Entorno de ejecución ====

=== JDK ===

  * Compilador java (javac):
  * La JVM y el comando java para ejecutar las aplicaciones
  * Utilidad para empaquetar aplicaciones (jar): Biblioteca de clases
  * Lo necesita cualquier programador que quiera desarrollar aplicaciones en lenguaje Java


=== JRE ===

  * No incluye las herramientas javac y jar
  * Lo necesita cualquier usuario que quiera ejecutar aplicaciones Java en su equipo

<figure>
{{ jdk_jre.png?400 }}
<caption>Java stack / Java Heap</caption></figure>

=== ¿Qué incluyen JDK y JRE? ===


<figure>
{{ javase.jpg?600 }}
<caption>Java stack / Java Heap</caption></figure>
==== Preparación del entorno de desarrollo ====

=== Software necesario ===

  * **JDK**: [[ https://adoptium.net | Proyecto Adoptium]]
  * **IDE**: [[https://www.jetbrains.com/idea/download|IntelliJ IDEA]] (Suficiente con la versión //Community//)

=== ¿Qué versión de Java debería descargarme? ===

<figure>
{{ java-version-history.png }}
<caption>Java version history (Fuente: http://www.wikipedia.org)</caption></figure>
