Java es un lenguaje de programación orientado a objetos, desarrollado por Sun Microsystems a principios de los años 90. El lenguaje en sí mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel, que suelen inducir a muchos errores, como la manipulación directa de punteros o memoria.
Características:
- Usa la metodología de la programación orientada a objetos.
- Permite la ejecución de un mismo programa en múltiples sistemas operativos.
- Incluye por defecto soporte para trabajo en red.
- Diseñado para ejecutar código en sistemas remotos de forma segura.
- Es fácil de usar y toma lo mejor de otros lenguajes orientados a objetos, como C++.
Java posee características muy útiles para la creación de programas de propósito general en un tiempo relativamente corto:
- Sencillez: Java es un poco mas fácil que C++, al evitar el uso de punteros. Todo en Java es una clase. Java cambia la herencia múltiple de C++ por la estructura interface. Java utiliza asignación y recolección automática de basura.
- Orientado a Objetos: Proporciona mayor flexibilidad, modularidad y reusabilidad. Java codifica clases, que al ser instanciadas se convierten en objetos. Los objetos tienen datos y métodos que rigen su comportamiento.
- Distribuido: Implica que varias computadoras trabajan simultáneamente en red. Java ha sido diseñado para facilitar la construcción de aplicaciones distribuidas.
- Interpretado: Se necesita una maquina virtual a fin de ejecutar código Java, independientemente de la plataforma operativa.
- Robusto: alta fiabilidad al prescindir de construcciones propensas a errores como los punteros y recolección manual de basura. Además presenta mecanismos para la recuperación de fallos como lo son las excepciones.
- Seguro: Al ser diseñado para su distribución vía red, se implementa una serie de políticas para que ningún applet tenga permiso de lectura /escritura sobre archivos en la maquina cliente.
- Portable: al ser interpretado, basta una sola compilación exitosa para ejecutarlo en todas las plataformas que admitan su interprete asociado. El tamaño de los datos nativos es fijo.
- Alto rendimiento: Los nuevos compiladores java JIT, permiten que los programas java se ejecuten casi con el mismo rendimiento que los lenguajes no interpretados.
- Multihilo: Java es uno de los primeros lenguajes que se ha diseñado explícitamente para tener múltiples hilos de ejecución, es decir la capacidad de ejecutar varias tareas (hilos) al mismo tiempo. La construcción, sincronización, y manejo de hilos es relativamente sencilla.
- Documentado y extendido: Java esta muy documentado para su fácil manejo además de presentar innumerables extensiones que aceleran el tiempo de desarrollo, como lo son graficadores, Librerias de manejo de imágenes, metodos exactos para problemas combinatorios.
Criticas o desventajas:
- En un sentido estricto, Java no es un lenguaje absolutamente orientado a objetos, como por ejemplo Ruby o Smalltalk. Por motivos de eficiencia, Java ha relajado en cierta medida el paradigma de orientación a objetos, y así por ejemplo, no todos los valores son objetos.
- El código Java puede ser a veces redundante en comparación con otros lenguajes. Esto es en parte debido a las frecuentes declaraciones de tipos y conversiones de tipo manual (casting). También se debe a que no se dispone de operadores sobrecargados, y a una sintaxis relativamente simple. Sin embargo, a partir de la versión 5.0 se introducen elementos para tratar de reducir la redundancia, como una nueva construcción para los bucles foreach.
- A diferencia de C++, Java no dispone de operadores de sobrecarga definidos por el usuario. Los diseñadores de Java tomaron esta decisión puesto que consideraban que, bajo ciertas circunstancias, esta característica podía complicar la lectura y mantenimiento de los programas.
Java Virtual Machine
La manera en que Java asegura su portabilidad es ejecutando el código Java en una maquina virtual (JVM, Java Virtual Machine) la cual se instala sobre el sistema operativo y permite que una aplicación escrita en una determinada plataforma corra en todas las demás (siempre y cuando haya una versión de JVM para ese sistema operativo).
Bytecode.
El bytecode es un código intermedio más abstracto que el código máquina. Habitualmente es tratado como un fichero binario que contiene un programa ejecutable similar a un módulo objeto, que es un fichero binario producido por el compilador cuyo contenido es el código objeto o código máquina, el cual suele ser interpretado por un intérprete de bytecode que en general llamado máquina virtual.