Prueba

Ventajas de programar con Java

//Arteco - Tecnologías de la información
  • :)
  • :0
  • :D
  • ;)
  • :]
foto Ramón Arnau

Ramón Arnau

Gerente de Arteco Consulting SL

JAVA es el lenguaje de PROGRAMACIÓN más usado en la EMPRESA. ¿Por qué? Es COMPILADO y de TIPADO ESTÁTICO, ideal para grandes proyectos

Java es el lenguaje de programación más usado en las empresas que desarrollan su propio software. Analizamos las principales características y describimos porqué es el mejor lenguaje de programación para aprender a programar o para desarrollar cualquier proyecto web.

Qué es Java

Java es un lenguaje de programación orientado a objetos que consiste en procesar ficheros de texto con extensión .java escritos por personas con un compilador, produciendo unos binarios eficientes y portables entre diferentes arquitecturas que son procesados por la máquina virtual de Java JVM.

La JVM es un software que se debe instalar en todos aquellos ordenadores que desean ejecutar programas escritos con Java. La JVM aporta una capa unificada e independiente entre los diferentes sistemas operativos para que los programadores únicamente deban aprender una sola interfaz de programación.

Por otro lado tanto Java como la JVM es software altamente eficiente ya que tanto en la compilación como en la ejecución de programas con Java se realizan multitud de optimizaciones sobre el código resultante, como por ejemplo el JIT Just In Time Compilation. Básicamente el JIT compila el código multiplataforma generado por el compilador a un código nativo específico de la plataforma en donde se está ejecutando para beneficiarse de las particularidades de la propia arquitectura que da soporte a la ejecución.

Por qué aprender a programar con Java

Java goza de una gran popularidad en el mundo del desarrollo de software y sobre todo en aquellas aplicaciones orientadas a Internet, hay muchas empresas importantes que le dan soporte y financian las evoluciones del lenguaje.

Como conclusión podemos indicar que Java es el lenguaje de programación más usado en el mundo empresarial y sobre todo en aquellas empresas que desarrollan software basado en el protocolo Http. Este hecho se convierte en que en el mercado laboral hay muchas más ofertas de trabajo para programadores Java que en cualquier otro lenguaje de programación.

Java es gratis

Desde su creación en 1995, por Sun Microsystem, el lenguaje de programación Java se ha orientado principalmente a resolver los problemas relacionados con el desarrollo de software, desde el punto de vista empresarial, aportando un marco de trabajo más productivo y que permitiera generar software más mantenible y escalable.

En 2010 la empresa creadora de Java, fue adquirida por Oracle en una serie de negociaciones que obligaba al nuevo propietario a seguir con el proceso de liberalización de la tecnología bajo la licencia GNU GPL de forma gradual, en unas acciones que empezaron con anterioridad y de forma muy tímida a partir del 2007.

Hoy en día, la plataforma OpenJDK es el encargado de publicar las últimas versiones tanto del lenguaje Java como de la máquina virtual JVM necesaria para ejecutar los programas escritos en este lenguaje, siguiendo las directrices marcadas por la Java Community Process con más de 1200 miembros, entre los que están Google, Adobe, Boeing, Oracle, Twitter y otros. why-use-java Java tiene tipado estático.


Para asegurar que el software escrito es robusto, Java proporciona un tipado estático de las variables. Es decir, las variables sólo son de un tipo y éste no puede variar con el tiempo. Esta aparente limitación, es un salvo conducto para aplicaciones empresariales de gran envergadura en donde participan grupos de programadores escribiendo miles de líneas de código. Las actividades de análisis de código, como las que realiza el compilador, permiten detectar un gran número de errores en tiempo de compilación, siempre preferible que encontrarlos en durante la ejecución. Sobre todo cuando la aplicación está corriendo en sistemas empotrados o pequeños dispositivos.

Java es portable

Java es el lenguaje de programación, y está orientado a objetos y tiene tipado estático. Sin embargo, su compilación no genera código nativo, si no que genera código para ser ejecutado en una máquina virtual, JVM. La Máquina Virtual de Java, es un reproductor capaz de ejecutar programas compilados en Java (y de otros lenguajes) abstrayendo de las particularidades de cada plataforma, ofreciendo al programador una única interfaz de programación. Esto provoca que los programas escritos con Java sean independiente y por tanto portables. Los binarios resultantes de la compilación, pueden ser ejecutados tal cual en un sistema Windows como Mac o Linux sin necesidad de modificar ni una coma.

Como consecuencia de su portabilidad, se requiere tener instalada la JVM en todos los sistemas que deseen ejecutar programas escritos en Java. La comunidad OpenJDK se encarga de mantener todas las implementaciones de la JVM para cada una de las plataformas más habituales.

Java es rápido

Es un mito que Java sea lento. Originariamente se justifica porque la JVM debe interpretar los programas escritos en Java y ésta en sus inicios carecía de optimizaciones potentes como hoy en día. Sin embargo y de forma planificada, a partir de la versión 6 de Java, la JVM incluye un compilador que genera código nativo en tiempo de ejecución de forma transparente al programador y al usuario. Además, durante esa compilación, se aplican las técnicas de optimización más avanzadas del sector, y no sólo se basan en cómo está escrito el código, sino también cómo ha sido la ejecución reciente y cómo se cree estadísticamente que serán las siguientes iteraciones. Esta batería de optimizaciones provoca que Java tenga tiempos similares a programas similares escritos en C/C++.

Hoy en día, en versiones más modernas como Java 13, el número de optimizaciones de código, nivel de paralelismo y el gran trabajo de grupos de investigación puede afirmarse con rotundidad que Java es uno de los lenguajes con mejor rendimiento del panorama del software de propósito general, muy superior que al de otros lenguajes dinámicos o de tipado débil.

Java tiene un gran ecosistema

Desde su nacimiento, Java ha presentado una gran penetración en el mercado del desarrollo de software a nivel empresarial. Su madurez y fiabilidad ha provocado que muchas empresas apuesten por este lenguaje a la hora de afrontar grandes inversiones en la elaboración de sus propias plataformas de información. Como resultado de esa adopción, tanto programadores como empresas y organizaciones participan activamente en el desarrollo de herramientas y librerías útiles (muchas de ellas Open Source) para solventar los problemas habituales a los que debe afrontar el programador.

Como mención especial, las organizaciones como Apache Foundation y Eclipse Foundation, entre otros como Google y Netflix, han aportado muchas de las librerías y utilidades de uso diario en el desarrollo de software, todas ellas Open Source con licencias muy permisivas.

Java tiene un gran número de programadores

Es difícil saber si gracias al gran número de programadores hay un gran ecosistema, o al revés. Pero lo que sí se sabe es que encontrar programadores conocedores de Java es una tarea más fácil que hallar a aquellos que dominan otros lenguajes menos implantados.

También se sabe que Java es uno de los lenguajes que se ha posicionado entre el segundo y primer puesto como lenguaje de programación más utilizado en todo el mundo en los últimos casi 20 años, rivalizando con C/C++ según el tradicional índice TIOBE.

Java tiene los IDEs más avanzados

Tradicionalmente Java ha dispuesto siempre del beneficio de incorporar los IDEs o editores de programación más avanzados del mercado, prácticamente su totalidad sin coste por uso ayudando a su implantación en las empresas. Estos editores permiten la compilación incremental, asistencia de escritura en código, refactorizaciones, búsqueda de documentación del API y muchas otras funciones más.

Desde Netbeans IDE, a Eclipse IDE y más recientemente Intellij son los editores de programación más usados, incluso para otros lenguajes, llenos de integraciones con herramientas típicas como Git para el control de versiones o Maven y Gradle para la construcción de aplicaciones.

Qué es un Java IDE

Las siglas de IDE significan Integrated Development Environment o lo que es lo mismo Entorno Integrado de Programación. Básicamente es un término que se atribuye a editores de texto a los que se les han añadido muchas funcionalidades y accesos rápidos para realizar tareas típicas del programador. Además son algo inteligentes e indexan el contenido de los ficheros fuente, permiten ejecutar paso a paso los programas mostrando el detalle del avance en la ejecución y tienen integraciones con otras herramientas habituales como los sistemas de control de versiones como git, o incluso gestores de incidencias para tramitar tiquets de errores o de peticiones de cambio realizados por los usuarios.

Aunque no es totalmente obligatorio, su uso es más que recomendable utilizar uno que incorpore soporte nativo con el lenguaje de programación que se utilizará para desarrollar los programas, páginas web o aplicaciones móviles que se deseen.

Afortunadamente todos los propuestos son gratuitos y además son Open Source contrariamente con lo que pueda parecer. Hay miles de empresas y programadores que mantienen estos editores actualizados añadiéndoles innovaciones por su gran implantación que hay en todos los sectores, evitando posiciones dominantes en el mercado o manufacturadores que apliquen licencias o royalties al considerarse tan o más críticos que el propio lenguaje de programación, por el coste que tiene el desarrollo al tener que contratar personal especializado con salarios bien remunerados.

Qué editor de programación elegir

Dentro del conjunto de IDEs gratuitos, la mayoría Open Source, se dividen en dos grandes familias. Los genéricos que permiten editar ficheros en general, sin estar especializados en ningún lenguaje, pero altamente configurables y adaptables. Estos incluyen el acceso a pequeños programas que los completan denominados plugins que ajustan el comportamiento al lenguaje o herramientas utilizadas.

Con cualquiera de los editores genéricos el usuario podrá realizar actividades de programación, pero debe saber que tendrá una penalización en su rendimiento considerable en cuanto al tiempo invertido, respecto a otro que use un buen editor con todas las baterías incluidas. Además, estos IDEs avanzados también son gratis, ¿por qué no aprender a usar uno?

En el listado de editores de programación genéricos aparecen los siguientes:

Sin embargo, recomendamos un IDE especializado en proyectos Java, que disponga de integración nativa con Maven para simplificar al máximo las actividades que tendremos que realizar como programadores.

Si nos centramos en los IDEs especializados en Java el listado recomendado es el siguiente:

Cualquiera de los tres editores citados será suficiente para realizar aplicaciones en Java, todos ellos incluyen soporte de Maven y Git nativamente. No se requerirá instalar ningún plugin o software de terceros para añadir la funcionalidad necesaria. Esto no será así si se usa algún editor genérico como: VSCODE, Sublime, Atom o Brackets.

Instalar un IDE Java en Ubuntu

Los repositorios de Ubuntu simplifican al máximo las tareas de instalación y en ellos están alojados los principales editores de programación. Para ello simplemente se ha de abrir el icono de Software de Ubuntu y buscar Java IDE.

Acto seguido nos aparecerán las distintas opciones correspondientes con los principales editores de programación más usados en Java: IDEA Community, Eclipse y Apache NetBeans. Bastará seleccionar cualquiera de ellos y el sistema procederá automáticamente a la descarga e instalación del software solicitado.

Instalar un IDE para Java en Windows o Mac

La instalación de cualquiera de los IDEs indicados: Idea, Eclipse o Netbeans, será suficiente con acceder a la página indicada en el listado y descargar el instalador correspondiente al sistema operativo que tengamos y la arquitectura del pc. La mayoría de ellos requerirá un PC relativamente moderno con procesador de 64Bits.

Es recomendable tener un disco duro SDD y al menos 8Gb de RAM para que el sistema responda con fluidez en las operaciones de compilación y ejecución de programas. Si no tienes un equipo adecuado, recuerda que un buen profesional necesita unas buenas herramientas.

El instalador de cualquiera de los editores dejará como resultado un icono sobre el escritorio para acceder rápidamente a la ejecución del editor.

JVM es políglota

La Máquina Virtual de Java se ha convertido en los últimos años en un reproductor muy avanzado capaz de ejecutar código proveniente de diferentes lenguajes de programación, siendo Java el más habitual. Los usuarios pueden optar por otros lenguajes con características diferentes o especializados en un escenario particular. Algunos ejemplos son Groovy si se desea el dinamismo que ofrece el scripting. Scala o Clojure si se busca un lenguaje funcional, o Kotlin si se está orientado al desarrollo de aplicaciones móviles para Android, entre otros muchos lenguajes.

Todos ellos se benefician del API único que proporciona la JVM para cualquier plataforma. Incluso es posible integrar diferentes lenguajes en una misma aplicación para ser ejecutada por la JVM. Otros lenguajes también disponibles son Javascript, Jython o JRuby que favorecen la reutilización de librerías o frameworks existentes.

Java tiene soporte de las principales empresas

Como se ha citado con anterioridad, Java disfruta del apoyo de las principales empresas tecnológicas puesto que muchas de ellas han desarrollado parte de sus plataformas usando este lenguaje. Miembros o no del JCP, un gran número de empresas reconocen usar internamente Java en algunos de sus productos o servicios. Todas ellas son empresas de primer nivel como Google, Facebook, Twitter, Oracle y muchas más. Y destacan de forma unánime la solidez y el fácil mantenimiento de las aplicaciones empresariales desarrolladas, sobre todo en proyectos donde participan un gran número de programadores y por tanto están sometidas a evoluciones constantes.

Java está en continua evolución

Desde que OpenJDK está al mando de Java y la JVM, el compromiso del colectivo que lo conforma es sacar frecuentes versiones que incorporen las mejoras propuestas por la comunidad mendiante el proceso Java Community Reques (JCR), en donde se proponen, valoran e implementan las peticiones de nuevas características de Java o de la máquina virtual, con el fin de tener un marco tecnológico que se adecue a las nuevas situaciones y hardware que vaya surgiendo con el paso del tiempo. El objetivo es que Java sea capaz de afrontar los desafíos tecnológicos tan cambiantes como las recientes arquitecturas web en la nube y basados en contenedores virtualizados sin olvidar su orígenes en sistemas empotrados y de tiempo real.

Cómo instalar el JDK de Java

Para programar en Java, necesariamente se necesita el Java Development Kit (JDK) que contiene las herramientas de compilación y las librerías básicas del lenguaje. Pero será conveniente que tengas también Apace Maven ya que aporta estandarización de los proyectos, se encarga de la compilación y la construcción de la aplicación o librería que desees generar y además resuelve muy eficientemente las dependencias y el uso de librerías de terceros usando unos repositorios públicos con un gran abanico de éstas de uso libre, como Guava proporcionada por Google, o Apache Commons proporcionadas por la Apache Foundation.

Cómo instalar Java en Ubuntu Linux

En el artículo anterior te enseñamos a instalar Ubuntu, el sistema operativo Open Source alternativo a Windows preferido por los programadores. Si ya lo tienes instalado puedes seguir los siguientes pasos para disponer del compilador y la máquina virtual de Java en tu computadora.

La instalación de Java en Ubuntu es realmente sencilla, puesto que la comunidad prepara los paquetes de OpenJdk con los binarios necesarios y los alojan en los repositorios públicos de software listos para ser incorporados en nuestro sistema vía apt. Para ello abrimos un terminal de comandos y ejecutamos el comando siguiente:

sudo apt install openjdk-8-jdk

El proceso realizará la descarga y configuración del nuevo paquete de las herramientas de compilación y ejecución de programas Java listo para ser ejecutado por el usuario. Puede verificarse que el proceso ha ido correctamente ejecutando de nuevo en la consola esta siguiente orden:

java -version

Dando como salida la correcta ejecución y versión de la máquina virtual de java JVM:

openjdk version "11.0.6" 2020-01-14
OpenJDK Runtime Environment (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1)
OpenJDK 64-Bit Server VM (build 11.0.6+10-.., mixed mode, sharing)

En el momento de escribir este post, en los repositorios oficiales de Ubuntu hay dos versiones disponibles de Java, la versión 8 y la 11. Por defecto Ubuntu usará la más reciente, pero se puede forzar el uso de una versión en concreto como la 8 de manera sistemática con:

sudo update-alternatives --config java

# O indicando una versión concreta con:
sudo update-java-alternatives --set /path/to/java/version

Descargar Java para Win/Mac

Para instalar las herramientas de programación de Java se debe descargar y ejecutar el instalador de Java Development Kit. Sin embargo, hay varias distribuciones del JDK y se deberá escoger uno u otro en función de la versión de Java que se desee. Las versiones publicadas antes del 16 de abril del 2019 están disponibles totalmente gratis vía la página de Oracle, requiriendo hacer login en su sistema. Después de esa fecha los distribuibles ofrecidos por Oracle tienen un coste por uso. Así que para evitar los costes se debe acudir a los distribuibles de OpenJDK, salvo que se desee una versión anterior al 16 de abril del 2019.

Resumiendo, para obtener el compilador de Java se debe acudir a:

Según la plataforma donde se desea instalar se deberá descargar el binario correspondiente. Las computadoras modernas usan procesadores de 64bits, éstas deberán descargar el instalador con sufijo «x64». Por ejemplo para Windows sería «jdk-8u241-windows-x64.exe», mientras que para Mac debería ser «jdk-8u241-macosx-x64.dmg». Sin embargo, si dispone de un ordenador más antiguo debe seleccionar alguno terminado en «i586» correspondiente a las arquitecturas de 32bits.

Cómo instalar Java en Windows

Una vez descargado el JDK siguiendo las instrucciones del paso anterior, ejecutaremos el instalador que procederá a la copia de los ficheros en la ubicación predeterminada. Aunque puede variarse, por defecto se ubicarán los archivos en c:\Archivos de Programa\Java\jdk…. Bastará dejar las opciones tal y como vienen y continuar el asistente de instalación hasta finalizar el proceso.

Ya sólo quedará un último paso y es añadir una variable de entorno y editar otra existente para que podamos invocar al compilador con javac o a la máquina virtual de Java con java desde cualquier directorio.

Por tanto, en Windows dejaremos las siguientes variables de entorno como se indica a continuación:

  • Crear la variable JAVA_HOME:
    JAVA_HOME=c:\Archivos de Programa\Java\
  • Añadir JAVA_HOME al Path
    Path=%JAVA_HOME%\bin;%Path%;

A partir de este momento, cada vez que desde el terminal o consola de comandos introduzcamos las instrucciones de compilación y ejecución de programas Java, Windows sabrá dónde ir a buscar los ejecutables correspondientes.

Cómo instalar Java en Mac OSX

Una vez descargado el JDK siguiendo las instrucciones del paso anterior, ejecutaremos el instalador que procederá a la copia de los ficheros en la ubicación predeterminada. Aunque puede variarse, por defecto se ubicarán los archivos en /Library/Java/JavaVirtualMachines/. Bastará dejar las opciones tal y como vienen y continuar el asistente de instalación hasta finalizar el proceso.

Ya sólo quedará un último paso y es añadir una variable de entorno y editar otra existente para que podamos invocar al compilador con javac o a la máquina virtual de Java con java desde cualquier directorio.

Por tanto, en Mac dejaremos las siguientes variables de entorno como se indica a continuación a través de la edición del fichero ~/.profile (recuérdese que la tilde de la eñe significa el directorio home del usuario):

vi ~/.profile

Añadir las siguientes filas:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/<jdk_instalado>
export PATH=$JAVA_HOME/bin:$PATH

El contenido de esas líneas declara y exporta la variable JAVA_HOME para que esté disponible durante la sesión de la terminal y añade el directorio de los binarios de java al Path por delante del resto de directorios que contiene el path.

A partir de este momento, cada vez que desde el terminal o consola de comandos introduzcamos las instrucciones de compilación y ejecución de programas Java, Windows sabrá dónde ir a buscar los ejecutables correspondientes.

Cómo tener varios JDKs

Para tener varios JDKs sólo debe tenerse en cuenta las variables de JAVA_HOME y Path (PATH en unix/linux). Tras proceder con la instalación de dos o más Jdks y que no haya conflictos entre ellos bastará asegurarse que el Path siempre tiene en su contenido, la expresión que apunta al directorio %JAVA_HOME%\bin en Windows, o $JAVA_HOME/bin en Linux/Mac. Así, cuando se quiera cambiar de un JDK a otro, lo único que hay que hacer es ajustar la variable JAVA_HOME para que apunte al JDK deseado.

Para ajustar los valores de la variable en Windows de forma temporal puede usarse el comando SET, y si se desea que sea permanente el cambio se deberá ir a la utilidad de edición de variables de entorno ya citado. De forma temporal pondremos lo siguiente:

SET JAVA_HOME=c:\Archivos de Programa\Java\<jdk_alternativo>

El comando SET podemos ejecutarlo tantas veces como deseemos para cambiar el JDK, eso sí, sólo tiene de ámbito la sesión actual del terminal de comandos.

Para sistemas Linux y Mac deberemos usar export para proceder con el cambio del valor de las variables.

export JAVA_HOME=/opt/java/<jdk_alternativo>

En estos mismos sistemas basados en unix, si se desea que el cambio sea permanente editaremos el fichero alojado en el home del usuario con nombre .profile. Para editar este fichero puede hacerse cómodamente con vi

vi ~/.profile

Añadiendo la siguiente fila

export JAVA_HOME=/opt/java/<jdk_alternativo>
export PATH=$JAVA_HOME/bin:$PATH

El símbolo «~» representa el home del usuario en sistemas Unix. Fíjese que en estos sistemas el separador de directorios no es punto y coma como en Windows, si no dos puntos.

Tu primer programa en Java

Una vez que tengas instalado el JDK como se explica en el artículo deberías poder ejecutar el compilador, comando javac, desde cualquier directorio, así como también la máquina virtual con el comando javac. Estos comandos están contenidos en un directorio del JDK, llamado bin, que debe están en el Path de tu sistema operativo. Si has hecho lo correcto, puedes verificarlo ejecutando:

java -version

Si se imprime la versión de Java instalado, la configuración es correcta.

El siguiente paso es posicionarte en un directorio vacío para las pruebas que vamos a realizar ahora. Por ejemplo \\Java si estás en Windows, o ~/Java si estás en Mac/Linux. Una vez ahí crearemos una primera aplicación.

En el directorio creado para tal fin, crea el fichero App01.java con el siguiente contenido:

public class App01 {
    public static void main(String[] args){
        System.out.println("Hola Mundo!");
    }
}

Este es uno de los programas más pequeños que podemos crear con Java. Fíjese que el nombre del archivo coincide con el nombre de la clase. Debe coincidir en la capitalización de las letras.

Para poder generar el binario que la JVM pueda ejecutar, debemos invocar al compilador. Éste generará los binarios, en este caso App01.class, correspondiente con las instrucciones contenidas en un formato denominado byte code.

Compila el primer programa con:

javac App01.java

Aparentemente no ha ocurrido nada, pero si miras el directorio aparecerá un nuevo archivo App01.class. Éste ya puede ser ejecutado por la JVM:

java App01
Hola Mundo!

¡Enhorabuena! Has creado tu primer programa en Java, y además de una forma muy manual. Actualmente los programadores no invocan directamente a java o javac, si no que lo hacen directamente desde el entorno integrado de programación, el cual ayuda enormemente a realizar este tipo de tareas, sobre todo cuando hay cientos o miles de ficheros Java.

Organización del código en paquetes

En un proyecto con cientos de clases se ve obligatorio implementar algún mecanismo de organización de los archivos Java. La manera más natural es clasificarlos en diferentes directorios. Ahora bien, si desde un archivo Java se hace referencia a otro archivo de este tipo, el compilador debe saber que se encuentra en otro directorio para que pueda encontrarlo. Por este motivo aparece el concepto de package o paquete.

Los packages permiten organizar ficheros Java en diferentes directorios, todos ellos compartiendo una misma raíz, de manera que se puedan usar unos ficheros desde otros. Los ficheros Java, a parte de estar ubicados en un sub directorio u otro, la ruta completa de carpetas debe aparecer en el preámbulo del archivo. Por ejemplo, un archivo ubicado en ./org/eadp/Utilidad.java deberá tener la declaración del package como sigue:

package org.eadp;
public class Utilidad {
    public static void sayHello(){
        System.out.println("Hello World!");
    }
}

Así, desde nuestra segunda aplicación con nombre App02.java y con el siguiente contenido, podemos invocar el uso de Utilidad.java:

import org.eadp.Utilidad;

public class App02 {
    public static void sayHello(){
        Utilidad.sayHello();
    }
}

Para que esta segunda aplicación funcione correctamente, hemos supuesto que App01 y App02 están en el directorio raíz de Java. Mientras que Utilidad.java está Java/org/eadp. Siempre que se usa un archivo desde otro que no está en el mismo directorio o paquete debe importarse. Para compilar y ejecutar la segunda aplicación introduciremos:

javac App02.java
java App02

Java, automáticamente recurrirá a la compilación de todas los archivos usados por App02, siempre y cuando los encuentre dentro del directorio del proyecto en base a los imports indicados.

Todas las funciones aquí utilizadas van con el prefijo static, por ser métodos de clase y no de una instancia u objeto. Fácilmente podemos convertir el método sayHello de Utilidad a uno que no contenga esta limitación:

// contenido de ./App03.java
import org.eadp.Utilidad2;

public class App03 {
    public static void sayHello(){
        Utilidad2 instancia = new Utilidad2();
        instancia.sayHello();
    }
}

// contenido de ./org/eadp/Utilidad2.java
public class Utilidad2 {
    public void sayHello(){
        System.out.println("Hello World!");
    }
}

En esta tercera versión, para poder quitar el static al método sayHello, se debe crear una instancia de la clase Utilidad2 mediante new Utilidad2(). Esto reserva el espacio en memoria para guardar un objeto del tipo Utilidad2. La dirección de memoria en donde está ubicado se guarda en una variable (instancia) la cual podemos referenciar para invocar el método sayHello.

Si desea aprender más acerca de la programación orientada a objetos puede adquirir la Guía Javañol, un extenso libro de más de 450 páginas con toda la información necesaria para convertirse en un profesional.

Definición y uso de variables

En Java hay dos tipos de variables, las que almacenan o mejor dicho apuntan a un objeto, o las variables denominadas primitivas. Éstas últimas empiezan por minúscula y en vez de contener una dirección contienen el dato en sí mismo, ya que estos almacenan el dato de forma local en la pila de llamadas.

Los tipos primitivos que posee Java son los siguientes:

Category Types Size (bits) Minimum Value Maximum Value Precision Example
Integer byte 8 -128 127 From +127 to -128 byte b = 65;
char 16 0 2^16-1 All Unicode characters char c = 'A'; <br>char c = 65;
short 16 -2^15 2^15-1 From +32,767 to -32,768 short s = 65;
int 32 -2^31 2^31-1 From +2,147,483,647
to -2,147,483,648
int i = 65;
long 64 -2^63 2^63-1 From +9,223,372,036,854,775,807
to -9,223,372,036,854,775,808
long l = 65L;
Floating-point float 32 2^-149 (2-2^-23)·2^127 From 3.402,823,5 E+38
to 1.4 E-45
float f = 65f;
double 64 2^-1074 (2-2^-52)·2^1023 From 1.797,693,134,862,315,7 E+308
to 4.9 E-324
double d = 65.55;
Other boolean false, true boolean b = true;
void

Sea cual sea el tipo de variable que desee crear, primero se pone el tipo y luego el nombre de la variable. Opcionalmente puede asignar un valor inicial. Véase los siguientes ejemplos:

boolean b1 = true;
Utilidad util = new Utilidad();
int i = 365;
float f1 = i + 3.0f;

Fíjese que los tipos primitivos (los que empiezan por minúsculas) no necesitan la invocación de new, sin embargo la variable util al ser un puntero a objeto, requiere de reservar la memoria. Java se encarga automáticamente de liberar las reservas hechas (con new) gracias a su Garbage Collector.

Las variables pueden ser locales, como las indicadas en el bloque de código anterior, pero también pueden ser de objeto o de clase. Las variables de objeto se añaden justo debajo de la definición de la clase como se muestra en el siguiente ejemplo:

public class Coche {
    int numRuedas = 4;
}

Si creamos un objeto de este tipo con new, podremos acceder a su número de ruedas.

Coche c = new Coche();
System.out.println(c.numRuedas);

c.numRuedas = 8;
System.out.println(c.numRuedas);

Sin embargo, cuando un atributo es de tipo clase (static), no es necesario hacer un new, ya que la variable no va asociada a ningún objeto, si no al tipo o clase al que pertenece.

public class Coche {
    static int numRuedas = 4;
}

Al ser ahora numRuedas estático el acceso debe hacerse mediante el nombre de la clase más un punto:

int n = Coche.numRuedas;

El mismo comportamiento que se obtiene con los atributos o variables de objetos sucede con los métodos si éstos se prefijan con la palabra reservada static como se ha visto al principio del tutorial.

Java permite muchas colecciones de datos, pero dentro de los básicos tenemos los arrays o cadenas de variables. Se definen como en C y en otros muchos lenguajes usando los corchetes ‘[‘ y ‘]’ y entre estos símbolos se introduce el tamaño del array o el índice del dato al que queremos referirnos, según si estamos definiendo o usando el array. La primera posición es el 0. Ejemplos:

// creación de un array de 10 enteros.
int[] arrayDeInts = new int[10];
arrayDeInts[0] = 1;
arrayDeInts[1] = 2;

int tmp = arrayDeInts\[2\];

// la siguiente asignación da ERROR!
// por salir de los límites
arrayDeInts[10] = 11;

Los arrays se pueden definir de cualquier tipo primitivo u objeto de Java. Pero se debe destacar que al inicializar un array con new, se reserva espacio para poder almacenar la cantidad de valores indicado, pero eso no significa que los datos en sí contengan algún valor. Hay que inicializar cada una de las casillas del array.

Estructuras de control

Las estructuras de control en Java no difieren mucho de las de C y C++. Las más básicas son if para realizar bifurcaciones en la ejecución. While y for para realizar iteraciones mientras se cumpla una expresión o para recorrer todos los elementos de una colección de datos. A continuación algunos ejemplos:

Ejemplo del uso de condicional if, los cuales pueden encadenarse con else if o definir un caso general con else.

int v1 = 3 + 5;
if ( v1 < 3 ){
    System.out.println("Número menor que 3");
} else if ( v1 < 5){
    System.out.println("Número menor que 5 y mayor o igual a 3");
} else {
    System.out.println("Número mayor o igual que 5");
}

Los recorridos con while y for tienen algunas opciones más que las citadas aquí, pero mostraremos algunos ejemplos simples como representación.

La construcción while acepta una expresión como el if que produce la repetición de las sentencias que engloba entre llaves mientras la expresión devuelva cierta. No importa lo compleja que sea la expresión o condición, siempre que ésta devuelva en su evaluación un booleano. Por ejemplo:

int num = 0;
while (num < 10){
    System.out.println("Num es " + num);
    num = num + 1; // o num++;
}

Por otro lado, Java proporciona la construcción for en dos modalidades, la tradicional en la que acepta tres expresiones y la relativamente más moderna que acepta una colección.

El for En la modalidad 1, las tres expresiones corresponden con la inicialización del recorrido, condición de parada y por último la expresión de actualización. Veamos un ejemplo:

for (int num = 0 ; num < 10 ; num++ ){ // i++ es quivalente a i = i + 1
    System.out.println("Num es " + num);
}

El for en esta construcción resulta algo más compacto que while porque la creación, inicialización y actualización de la variable del recorrido se realiza en la misma línea, pero todos estos pasos separados por punto y coma ‘;’.

El for En la modalidad 2, simplifica la iteración de elementos almacenados en una colección. Su sintaxis se reduce a la declaración de una variable local que irá variando en cada pasada de la iteración, cogiendo como valor cada uno de los elementos de la colección, y la colección en sí misma que se desea iterar.

String[] array = new String[]{ "hola", "caracola" };
for (String palabra : array ){
    System.out.println("La palabra actual es: "+palabra);
}

Todos los recorridos aceptan dos palabras clave para alterar el comportamiento de la iteración. La primera de ellas es continue que cuando se ejecuta, automáticamente se pasa a tratar la siguiente iteración del bucle que lo contiene. La segunda es break que provoca lo contrario, es decir cuando se ejecuta sale del bucle que lo contiene, aunque queden elementos por tratar. Un ejemplo combinado de éstos sería el siguiente, ¿sabría decir cuántos mensajes serán impresos?:

for (int num = 0 ; num < 10 ; num++ ){
    if (i == 0){
        continue;
    } if (i >= 7){
        break;
    }
    System.out.println("Num es " + num);
}

Colecciones de datos

Los arrays son muy útiles pero poco flexibles, ya que no puede variarse su tamaño una vez inicializados, se debe crear un array nuevo o usar alguna estructura más potente como colecciones de datos en Java. Java proporciona cientos de colecciones de datos, la mayoría genéricas pero otras muchas especializadas en usos particulares para beneficiarse de un rendimiento extra si se conoce la circunstancia del problema a tratar. Dejando de lado las específicas, entre las generales están las 3 más importantes: List, Set y Map. Todas ellas son interfaces que definen métodos pero no los implementan. Hay toda una serie de implementaciones distintas como las citadas especializadas o las genéricas.

  • java.util.List representa una lista variable de elementos, respeta el orden de inserción y admite duplicados. Su implementación más usada es java.util.ArrayList.
  • java.util.Set representa un conjunto variable de elementos, NO respeta el orden de inserción y en su uso más básico NO admite duplicados. Su implementación más usada es java.util.HashSet.
  • java.util.Map representa un diccionario variable de elementos, NO respeta el orden de inserción y en su uso más básico NO admite duplicados para una misma clave. Su implementación más usada es java.util.HashMap.

Veamos un ejemplo de uso del Api java.util.List a través de java.util.ArrayList:

import java.util.List;
import java.util.ArrayList;
...
List<Integer> lista = new ArrayList<Integer>();
lista.add(1);
lista.add(2);

//devuelve el elemento de la posición 0
int p0 = lista.get(0);

if ( ! lista.isEmpty()){ // ! = negación de un boolean
    lista.clear();
}

Veamos un ejemplo de uso del Api java.util.Set a través de java.util.HashSet:

import java.util.Set;
import java.util.HashSet;
...
Set<String> set = new HashSet<String>();
set.add("hola");
set.add("hola");
set.add("abc");

// size == 2 al no permitir duplicados
int size = set.size();

// el recorrido no garantiza el orden de inserción
for (Integer i : set ){
    System.out.println(i);
}

Veamos un ejemplo de uso del Api java.util.Map a través de java.util.HashMap:

import java.util.Map;
import java.util.HashMap;
...
Map<String,Integer> edades = new HashSet<String,Integer>();
edades.put("Pepito",25);
edades.put("Juanito",60);
edades.put("Pepito",26);

// size == 2 al no permitir duplicados
int size = set.size();

// acceso a un mapa por clave
int edadJuanito = edades.get("Juanito");

// el recorrido no garantiza el orden de inserción
for (Entry<String,Integer> entry : edades.entrySet() ){
    System.out.println(entry.getKey() + " -> " + entry.getValue());
}

Documentación del JDK

Java y el JDK dispone de una documentación amplia y extensa navegable por HTML y que se genera automáticamente del código fuente a través de comentario alojado en los ficheros Java mediante la herramienta javadoc. Esta documentación está disponible online para cada versión de Java. A continuación se dejan los enlaces más relevantes:

Librerías útiles

Para ser un buen programador no sólo se ha de conocer bien el lenguaje, sino también se ha de familiarizar con las principales librerías que se usan del ecosistema de Java. Son muchas las disponibles, cada una de ellas enfocada en resolver un tema en particular. Según cada caso convendrá hacer una búsqueda por Internet y experimentar con una o varias opciones antes de introducirla en un proyecto. Pero en general, las dos más usadas que sí o sí conviene conocer son las siguientes:

Tu primera aplicación web

Si ya estás familiarizado con Java y con las principales librerías de uso común publicadas en internet, por qué no dar el siguiente paso y aprender el framework web por excelencia en java: Spring Boot.

Prueba a crear una primera aplicación Web con Spring Boot usando Spring Initializr.

Conclusiones

Como hemos visto, Java ofrece una combinación única de características que lo hacen ideal tanto para aprender a programar como para desarrollar proyectos web de cualquier escala. En resumen, Java ofrece una combinación única de portabilidad, facilidad de uso y rendimiento, lo que lo convierte en la elección perfecta para una amplia gama de aplicaciones empresariales y proyectos web. Si deseas aprender más sobre Java y cómo puede beneficiar tus proyectos, visita nuestro sitio web en Arteco Consulting. ¡Empieza a desarrollar con Java hoy mismo!

Mantente Conectado

Newsletter

¡Mantente al día con lo último en tecnología y negocios! Suscríbete a nuestra newsletter y recibe actualizaciones exclusivas directamente en tu correo.

Reunión Online

No dejes pasar la oportunidad de explorar nuevas posibilidades. ¡Agenda una reunión online con nosotros hoy y comencemos a construir juntos el futuro de tu negocio!

  • :)
  • :0
  • :D
  • ;)
  • :]