Está en la página 1de 35

Java (lenguaje de programacin)

Commons-emblem-scales.svg
Existen desacuerdos sobre la neutralidad en el punto de vista de la versin
actual de este artculo o seccin.
En la pgina de discusin puedes consultar el debate al respecto.
Java
Desarrollador(es)
James Gosling & Sun Microsystems
Para desarrolladores de Java
Informacin general
Extensiones comunes
Paradigma

.java, .class, .jar , .jad

Orientado a objetos, imperativo

Apareci en 1995
Diseado por

Sun Microsystems (Oracle Corporation)

ltima versin estable


ao)

Java Standard Edition 8 (18 de marzo de 2014; hace 1

Tipo de dato Fuerte, Esttico


Implementaciones OpenJDK, HotSpot, muchas otras.
Dialectos

Generic Java, Pizza

Influido por C++, Objective-C


Ha influido a C#, J#, JavaScript, PHP, Python
Sistema operativo Multiplataforma
Licencia

GNU GPL / Java Community Process

[editar datos en Wikidata]


Java es un lenguaje de programacin de propsito general, concurrente,
orientado a objetos que fue diseado especficamente para tener tan pocas
dependencias de implementacin como fuera posible. Su intencin es permitir

que los desarrolladores de aplicaciones escriban el programa una vez y lo


ejecuten en cualquier dispositivo (conocido en ingls como WORA, o "write
once, run anywhere"), lo que quiere decir que el cdigo que es ejecutado en
una plataforma no tiene que ser recompilado para correr en otra. Java es, a
partir de 2012, uno de los lenguajes de programacin ms populares en uso,
particularmente para aplicaciones de cliente-servidor de web, con unos 10
millones de usuarios reportados.1 2

El lenguaje de programacin Java fue originalmente desarrollado por James


Gosling de Sun Microsystems (la cual fue adquirida por la compaa Oracle) y
publicado en 1995 como un componente fundamental de la plataforma Java de
Sun Microsystems. Su sintaxis deriva en gran medida de C y C++, pero tiene
menos utilidades de bajo nivel que cualquiera de ellos. Las aplicaciones de Java
son generalmente compiladas a bytecode (clase Java) que puede ejecutarse en
cualquier mquina virtual Java (JVM) sin importar la arquitectura de la
computadora subyacente.

La compaa Sun desarroll la implementacin de referencia original para los


compiladores de Java, mquinas virtuales, y libreras de clases en 1991 y las
public por primera vez en 1995. A partir de mayo de 2007, en cumplimiento
con las especificaciones del Proceso de la Comunidad Java, Sun volvi a
licenciar la mayora de sus tecnologas de Java bajo la Licencia Pblica General
de GNU. Otros tambin han desarrollado implementaciones alternas a estas
tecnologas de Sun, tales como el Compilador de Java de GNU y el GNU
Classpath.

ndice [mostrar]
Historia[editar]

Duke, la mascota de Java


Java se cre como una herramienta de programacin para ser usada en un
proyecto de set-top-box en una pequea operacin denominada the Green
Project en Sun Microsystems en el ao 1991. El equipo (Green Team),
compuesto por trece personas y dirigido por James Gosling, trabaj durante 18
meses en Sand Hill Road en Menlo Park en su desarrollo.

El lenguaje se denomin inicialmente Oak (por un roble que haba fuera de la


oficina de Gosling), luego pas a denominarse Green tras descubrir que Oak
era ya una marca comercial registrada para adaptadores de tarjetas grficas y
finalmente se renombr a Java.

Es frecuentada por algunos de los miembros del equipo. Pero no est claro si es
un acrnimo o no, aunque algunas fuentes sealan que podra tratarse de las
iniciales de sus diseadores: James Gosling, Arthur Van Hoff, y Andy
Bechtolsheim. Otros abogan por el siguiente acrnimo, Just Another Vague
Acronym ("slo otro acrnimo ambiguo ms"). La hiptesis que ms fuerza
tiene es la de que Java debe su nombre a un tipo de caf disponible en la
cafetera cercana, de ah que el icono de java sea una taza de caf caliente. Un
pequeo signo que da fuerza a esta teora es que los 4 primeros bytes (el
nmero mgico) de los archivos.class que genera el compilador, son en
hexadecimal, 0xCAFEBABE. A pesar de todas estas teoras, el nombre fue
sacado al parecer de una lista aleatoria de palabras.3

Los objetivos de Gosling eran implementar una mquina virtual y un lenguaje


con una estructura y sintaxis similar a C++. Entre junio y julio de 1994, tras
una sesin maratoniana de tres das entre John Gaga, James Gosling, Patrick
Naughton, Wayne Rosing y Eric Schmidt, el equipo reorient la plataforma
hacia la Web. Sintieron que la llegada del navegador web Mosaic, propiciara
que Internet se convirtiese en un medio interactivo, como el que pensaban era
la televisin por cable. Naughton cre entonces un prototipo de navegador,
WebRunner, que ms tarde sera conocido como HotJava.

En 1994, se les hizo una demostracin de HotJava y la plataforma Java a los


ejecutivos de Sun. Java 1.0a pudo descargarse por primera vez en 1994, pero
hubo que esperar al 23 de mayo de 1995, durante las conferencias de
SunWorld, a que vieran la luz pblica Java y HotJava, el navegador Web. El
acontecimiento fue anunciado por John Gage, el Director Cientfico de Sun
Microsystems. El acto estuvo acompaado por una pequea sorpresa adicional,
el anuncio por parte de Marc Andreessen, Vicepresidente Ejecutivo de
Netscape, de que Java sera soportado en sus navegadores. El 9 de enero del
ao siguiente, 1996, Sun fund el grupo empresarial JavaSoft para que se
encargase del desarrollo tecnolgico. [1] Dos semanas ms tarde la primera
versin de Java fue publicada.

La promesa inicial de Gosling era Write Once, Run Anywhere (Escrbelo una
vez, ejectalo en cualquier lugar), proporcionando un lenguaje independiente
de la plataforma y un entorno de ejecucin (la JVM) ligero y gratuito para las
plataformas ms populares de forma que los binarios (bytecode) de las
aplicaciones Java pudiesen ejecutarse en cualquier plataforma.

El entorno de ejecucin era relativamente seguro y los principales navegadores


web pronto incorporaron la posibilidad de ejecutar applets Java incrustadas en
las pginas web.

Java ha experimentado numerosos cambios desde la versin primigenia, JDK


1.0, as como un enorme incremento en el nmero de clases y paquetes que
componen la biblioteca estndar.4

Desde J2SE 1.4, la evolucin del lenguaje ha sido regulada por el JCP (Java
Community Process), que usa Java Specification Requests (JSRs) para proponer
y especificar cambios en la plataforma Java. El lenguaje en s mismo est
especificado en la Java Language Specification (JLS), o Especificacin del
Lenguaje Java. Los cambios en los JLS son gestionados en JSR 901.

JDK 1.0 (23 de enero de 1996) Primer lanzamiento: comunicado de prensa


JDK 1.1 (19 de febrero de 1997) Principales adiciones incluidas: comunicado
de prensa
una reestructuracin intensiva del modelo de eventos AWT (Abstract
Windowing Toolkit)
clases internas (inner classes)
JavaBeans
JDBC (Java Database Connectivity), para la integracin de bases de datos
RMI (Remote Method Invocation)
J2SE 1.2 (8 de diciembre de 1998) Nombre clave Playground. Esta y las
siguientes versiones fueron recogidas bajo la denominacin Java 2 y el nombre
"J2SE" (Java 2 Platform, Standard Edition), reemplaz a JDK para distinguir la
plataforma base de J2EE (Java 2 Platform, Enterprise Edition) y J2ME (Java 2

Platform, Micro Edition). Otras mejoras aadidas incluan: comunicado de


prensa
la palabra reservada (keyword) strictfp
reflexin en la programacin
la API grfica ( Swing) fue integrada en las clases bsicas
la mquina virtual (JVM) de Sun fue equipada con un compilador JIT (Just in
Time) por primera vez
Java Plug-in
Java IDL, una implementacin de IDL (Lenguaje de Descripcin de Interfaz)
para la interoperabilidad con CORBA
Colecciones (Collections)
J2SE 1.3 (8 de mayo de 2000) Nombre clave Kestrel. Los cambios ms
notables fueron:comunicado de prensa lista completa de cambios
la inclusin de la mquina virtual de HotSpot JVM (la JVM de HotSpot fue
lanzada inicialmente en abril de 1999, para la JVM de J2SE 1.2)
RMI fue cambiado para que se basara en CORBA
JavaSound
se incluy el Java Naming and Directory Interface (JNDI) en el paquete de
bibliotecas principales (anteriormente disponible como una extensin)
Java Platform Debugger Architecture (JPDA)
J2SE 1.4 (6 de febrero de 2002) Nombre Clave Merlin. Este fue el primer
lanzamiento de la plataforma Java desarrollado bajo el Proceso de la
Comunidad Java como JSR 59. Los cambios ms notables fueron: comunicado
de prensalista completa de cambios
Palabra reservada assert (Especificado en JSR 41.)
Expresiones regulares modeladas al estilo de las expresiones regulares Perl
Encadenacin de excepciones Permite a una excepcin encapsular la excepcin
de bajo nivel original.
non-blocking NIO (New Input/Output) (Especificado en JSR 51.)
Logging API (Specified in JSR 47.)

API I/O para la lectura y escritura de imgenes en formatos como JPEG o PNG
Parser XML integrado y procesador XSLT (JAXP) (Especificado en JSR 5 y JSR 63.)
Seguridad integrada y extensiones criptogrficas (JCE, JSSE, JAAS)
Java Web Start incluido (El primer lanzamiento ocurri en marzo de 2001 para
J2SE 1.3) (Especificado en JSR 56.)
J2SE 5.0 (30 de septiembre de 2004) Nombre clave: Tiger. (Originalmente
numerado 1.5, esta notacin an es usada internamente.[2]) Desarrollado bajo
JSR 176, Tiger aadi un nmero significativo de nuevas caractersticas
comunicado de prensa
Plantillas (genricos) provee conversin de tipos (type safety) en tiempo de
compilacin para colecciones y elimina la necesidad de la mayora de
conversin de tipos (type casting). (Especificado por JSR 14.)
Metadatos tambin llamados anotaciones, permite a estructuras del
lenguaje como las clases o los mtodos, ser etiquetados con datos adicionales,
que puedan ser procesados posteriormente por utilidades de proceso de
metadatos. (Especificado por JSR 175.)
Autoboxing/unboxing Conversiones automticas entre tipos primitivos (Como
los int) y clases de envoltura primitivas (Como Integer). (Especificado por JSR
201.)
Enumeraciones la palabra reservada enum crea una typesafe, lista ordenada
de valores (como Dia.LUNES, Dia.MARTES, etc.). Anteriormente, esto solo poda
ser llevado a cabo por constantes enteras o clases construidas manualmente
(enum pattern). (Especificado por JSR 201.)
Varargs (nmero de argumentos variable) El ltimo parmetro de un mtodo
puede ser declarado con el nombre del tipo seguido por tres puntos (e.g. void
drawtext(String... lines)). En la llamada al mtodo, puede usarse cualquier
nmero de parmetros de ese tipo, que sern almacenados en un array para
pasarlos al mtodo.
Bucle for mejorado La sintaxis para el bucle for se ha extendido con una
sintaxis especial para iterar sobre cada miembro de un array o sobre cualquier
clase que implemente Iterable, como la clase estndar Collection, de la
siguiente forma:
void displayWidgets (Iterable<Widget> widgets) {
for (Widget w : widgets) {
w.display();

}
}
Este ejemplo itera sobre el objeto Iterable widgets, asignando, en orden, cada
uno de los elementos a la variable w, y llamando al mtodo display() de cada
uno de ellos. (Especificado por JSR 201.)

Java SE 6 (11 de diciembre de 2006) Nombre clave Mustang. Estuvo en


desarrollo bajo la JSR 270. En esta versin, Sun cambi el nombre "J2SE" por
Java SE y elimin el ".0" del nmero de versin.[3]. Est disponible en
http://java.sun.com/javase/6/. Los cambios ms importantes introducidos en
esta versin son:
Incluye un nuevo marco de trabajo y APIs que hacen posible la combinacin de
Java con lenguajes dinmicos como PHP, Python, Ruby y JavaScript.
Incluye el motor Rhino, de Mozilla, una implementacin de Javascript en Java.
Incluye un cliente completo de Servicios Web y soporta las ltimas
especificaciones para Servicios Web, como JAX-WS 2.0, JAXB 2.0, STAX y JAXP.
Mejoras en la interfaz grfica y en el rendimiento.
Java SE 7 Nombre clave Dolphin. En el ao 2006 an se encontraba en las
primeras etapas de planificacin. Su lanzamiento fue en julio de 2011.
Soporte para XML dentro del propio lenguaje.
Un nuevo concepto de superpaquete.
Soporte para closures.
Introduccin de anotaciones estndar para detectar fallos en el software.
No oficiales:
NIO2.
Java Module System.
Java Kernel.
Nueva API para el manejo de Das y Fechas, la cual reemplazara las antiguas
clases Date y Calendar.
Posibilidad de operar con clases BigDecimal usando operandos.

Java SE 8 lanzada en marzo de 2014. Cabe destacar:


Incorpora de forma completa la librera JavaFX.
Diferentes mejoras en seguridad.
Diferentes mejoras en concurrencia.
Aade funcionalidad para programacin funcional mediante expresiones
Lambda.
Mejora la integracin de JavaScript.
Nuevas API para manejo de fechas y tiempo (date - time).
En el 2005 se calcula en 4,5 millones el nmero de desarrolladores y 2.500
millones de dispositivos habilitados con tecnologa Java.

Filosofa[editar]
El lenguaje Java se cre con cinco objetivos principales:

Debera usar el paradigma de la programacin orientada a objetos.


Debera permitir la ejecucin de un mismo programa en mltiples sistemas
operativos.
Debera incluir por defecto soporte para trabajo en red.
Debera disearse para ejecutar cdigo en sistemas remotos de forma segura.
Debera ser fcil de usar y tomar lo mejor de otros lenguajes orientados a
objetos, como C++.
Para conseguir la ejecucin de cdigo remoto y el soporte de red, los
programadores de Java a veces recurren a extensiones como CORBA (Common
Object Request Broker Architecture), Internet Communications Engine o OSGi
respectivamente.

Orientado a objetos[editar]
La primera caracterstica, orientado a objetos (OO), se refiere a un mtodo de
programacin y al diseo del lenguaje. Aunque hay muchas interpretaciones
para OO, una primera idea es disear el software de forma que los distintos

tipos de datos que usen estn unidos a sus operaciones. As, los datos y el
cdigo (funciones o mtodos) se combinan en entidades llamadas objetos. Un
objeto puede verse como un paquete que contiene el comportamiento (el
cdigo) y el estado (datos). El principio es separar aquello que cambia de las
cosas que permanecen inalterables. Frecuentemente, cambiar una estructura
de datos implica un cambio en el cdigo que opera sobre los mismos, o
viceversa. Esta separacin en objetos coherentes e independientes ofrece una
base ms estable para el diseo de un sistema software. El objetivo es hacer
que grandes proyectos sean fciles de gestionar y manejar, mejorando como
consecuencia su calidad y reduciendo el nmero de proyectos fallidos. Otra de
las grandes promesas de la programacin orientada a objetos es la creacin de
entidades ms genricas (objetos) que permitan la reutilizacin del software
entre proyectos, una de las premisas fundamentales de la Ingeniera del
Software. Un objeto genrico cliente, por ejemplo, debera en teora tener el
mismo conjunto de comportamiento en diferentes proyectos, sobre todo
cuando estos coinciden en cierta medida, algo que suele suceder en las
grandes organizaciones. En este sentido, los objetos podran verse como piezas
reutilizables que pueden emplearse en mltiples proyectos distintos,
posibilitando as a la industria del software a construir proyectos de
envergadura empleando componentes ya existentes y de comprobada calidad;
conduciendo esto finalmente a una reduccin drstica del tiempo de desarrollo.
Podemos usar como ejemplo de objeto el aluminio. Una vez definidos datos
(peso, maleabilidad, etc.), y su comportamiento (soldar dos piezas, etc.), el
objeto aluminio puede ser reutilizado en el campo de la construccin, del
automvil, de la aviacin, etc.

La reutilizacin del software ha experimentado resultados dispares,


encontrando dos dificultades principales: el diseo de objetos realmente
genricos es pobremente comprendido, y falta una metodologa para la amplia
comunicacin de oportunidades de reutilizacin. Algunas comunidades de
cdigo abierto (open source) quieren ayudar en este problema dando medios
a los desarrolladores para diseminar la informacin sobre el uso y versatilidad
de objetos reutilizables y bibliotecas de objetos.

Independencia de la plataforma[editar]
La segunda caracterstica, la independencia de la plataforma, significa que
programas escritos en el lenguaje Java pueden ejecutarse igualmente en
cualquier tipo de hardware. Este es el significado de ser capaz de escribir un
programa una vez y que pueda ejecutarse en cualquier dispositivo, tal como
reza el axioma de Java, "write once, run anywhere".

Para ello, se compila el cdigo fuente escrito en lenguaje Java, para generar un
cdigo conocido como bytecode (especficamente Java bytecode)
instrucciones mquina simplificadas especficas de la plataforma Java. Esta
pieza est a medio camino entre el cdigo fuente y el cdigo mquina que
entiende el dispositivo destino. El bytecode es ejecutado entonces en la
mquina virtual (JVM), un programa escrito en cdigo nativo de la plataforma
destino (que es el que entiende su hardware), que interpreta y ejecuta el
cdigo. Adems, se suministran bibliotecas adicionales para acceder a las
caractersticas de cada dispositivo (como los grficos, ejecucin mediante
hebras o threads, la interfaz de red) de forma unificada. Se debe tener
presente que, aunque hay una etapa explcita de compilacin, el bytecode
generado es interpretado o convertido a instrucciones mquina del cdigo
nativo por el compilador JIT (Just In Time).

Hay implementaciones del compilador de Java que convierten el cdigo fuente


directamente en cdigo objeto nativo, como GCJ. Esto elimina la etapa
intermedia donde se genera el bytecode, pero la salida de este tipo de
compiladores slo puede ejecutarse en un tipo de arquitectura.

La licencia sobre Java de Sun insiste que todas las implementaciones sean
compatibles. Esto dio lugar a una disputa legal entre Microsoft y Sun, cuando
ste ltimo aleg que la implementacin de Microsoft no daba soporte a las
interfaces RMI y JNI adems de haber aadido caractersticas dependientes
de su plataforma. Sun demand a Microsoft y gan por daos y perjuicios (unos
20 millones de dlares) as como una orden judicial forzando la acatacin de la
licencia de Sun. Como respuesta, Microsoft no ofrece Java con su versin de
sistema operativo, y en recientes versiones de Windows, su navegador Internet
Explorer no admite la ejecucin de applets sin un conector (o plugin) aparte.
Sin embargo, Sun y otras fuentes ofrecen versiones gratuitas para distintas
versiones de Windows.

Las primeras implementaciones del lenguaje usaban una mquina virtual


interpretada para conseguir la portabilidad. Sin embargo, el resultado eran
programas que se ejecutaban comparativamente ms lentos que aquellos
escritos en C o C++. Esto hizo que Java se ganase una reputacin de lento en
rendimiento. Las implementaciones recientes de la JVM dan lugar a programas
que se ejecutan considerablemente ms rpido que las versiones antiguas,

empleando diversas tcnicas, aunque sigue siendo mucho ms lento que otros
lenguajes.

La primera de estas tcnicas es simplemente compilar directamente en cdigo


nativo como hacen los compiladores tradicionales, eliminando la etapa del
bytecode. Esto da lugar a un gran rendimiento en la ejecucin, pero tapa el
camino a la portabilidad. Otra tcnica, conocida como compilacin JIT (Just In
Time, o "compilacin al vuelo"), convierte el bytecode a cdigo nativo cuando
se ejecuta la aplicacin. Otras mquinas virtuales ms sofisticadas usan una
"recompilacin dinmica" en la que la VM es capaz de analizar el
comportamiento del programa en ejecucin y recompila y optimiza las partes
crticas. La recompilacin dinmica puede lograr mayor grado de optimizacin
que la compilacin tradicional (o esttica), ya que puede basar su trabajo en el
conocimiento que de primera mano tiene sobre el entorno de ejecucin y el
conjunto de clases cargadas en memoria. La compilacin JIT y la recompilacin
dinmica permiten a los programas Java aprovechar la velocidad de ejecucin
del cdigo nativo sin por ello perder la ventaja de la portabilidad en ambos.

La portabilidad es tcnicamente difcil de lograr, y el xito de Java en ese


campo ha sido dispar. Aunque es de hecho posible escribir programas para la
plataforma Java que acten de forma correcta en mltiples plataformas de
distinta arquitectura, el gran nmero de estas con pequeos errores o
inconsistencias llevan a que a veces se parodie el eslogan de Sun, "Write once,
run anywhere" como "Write once, debug everywhere" (o Escrbelo una vez,
ejectalo en cualquier parte por Escrbelo una vez, depralo en todas
partes).

El concepto de independencia de la plataforma de Java cuenta, sin embargo,


con un gran xito en las aplicaciones en el entorno del servidor, como los
Servicios Web, los Servlets, los Java Beans, as como en sistemas empotrados
basados en OSGi, usando entornos Java empotrados.

El recolector de basura[editar]
Vase tambin: Recolector de basura
En Java el problema fugas de memoria se evita en gran medida gracias a la
recoleccin de basura (o automatic garbage collector). El programador
determina cundo se crean los objetos y el entorno en tiempo de ejecucin de

Java (Java runtime) es el responsable de gestionar el ciclo de vida de los


objetos. El programa, u otros objetos pueden tener localizado un objeto
mediante una referencia a ste. Cuando no quedan referencias a un objeto, el
recolector de basura de Java borra el objeto, liberando as la memoria que
ocupaba previniendo posibles fugas (ejemplo: un objeto creado y nicamente
usado dentro de un mtodo slo tiene entidad dentro de ste; al salir del
mtodo el objeto es eliminado). Aun as, es posible que se produzcan fugas de
memoria si el cdigo almacena referencias a objetos que ya no son necesarios
es decir, pueden an ocurrir, pero en un nivel conceptual superior. En
definitiva, el recolector de basura de Java permite una fcil creacin y
eliminacin de objetos y mayor seguridad.

Sintaxis[editar]
La sintaxis de Java se deriva en gran medida de C++. Pero a diferencia de ste,
que combina la sintaxis para programacin genrica, estructurada y orientada
a objetos, Java fue construido desde el principio para ser completamente
orientado a objetos. Todo en Java es un objeto (salvo algunas excepciones), y
todo en Java reside en alguna clase (recordemos que una clase es un molde a
partir del cual pueden crearse varios objetos).

Aplicaciones autnomas[editar]
Este ejemplo necesita una pequea explicacin.

Todo en Java est dentro de una clase, incluyendo programas autnomos.


El cdigo fuente se guarda en archivos con el mismo nombre que la clase que
contienen y con extensin .java. Una clase (class) declarada pblica (public)
debe seguir este convenio. En el ejemplo anterior, la clase es Hola, por lo que
el cdigo fuente debe guardarse en el fichero Hola.java
El compilador genera un archivo de clase (con extensin .class) por cada una
de las clases definidas en el archivo fuente. Una clase annima se trata como si
su nombre fuera la concatenacin del nombre de la clase que la encierra, el
smbolo $, y un nmero entero.
Los programas que se ejecutan de forma independiente y autnoma, deben
contener el mtodo main().
La palabra reservada void indica que el mtodo main no devuelve nada.

El mtodo main debe aceptar un array de objetos tipo String. Por acuerdo se
referencia como args, aunque puede emplearse cualquier otro identificador.
La palabra reservada static indica que el mtodo es un mtodo de clase,
asociado a la clase en vez de a una instancia de la misma. El mtodo main
debe ser esttico o de clase.
La palabra reservada public significa que un mtodo puede ser llamado desde
otras clases, o que la clase puede ser usada por clases fuera de la jerarqua de
la propia clase. Otros tipos de acceso son private o protected.
La utilidad de impresin (en pantalla por ejemplo) forma parte de la biblioteca
estndar de Java: la clase System define un campo pblico esttico llamado
out. El objeto out es una instancia de PrintStream, que ofrece el mtodo
println (String) para volcar datos en la pantalla (la salida estndar).
Las aplicaciones autnomas se ejecutan dando al entorno de ejecucin de Java
el nombre de la clase cuyo mtodo main debe invocarse. Por ejemplo, una
lnea de comando (en Unix o Windows) de la forma java cp . Hola ejecutar el
programa del ejemplo (previamente compilado y generado Hola.class). El
nombre de la clase cuyo mtodo main se llama puede especificarse tambin en
el fichero MANIFEST del archivo de empaquetamiento de Java (.jar).
Applets[editar]
Las applet Java son programas incrustados en otras aplicaciones, normalmente
una pgina Web que se muestra en un navegador.

// Hello.java
import javax.swing.JApplet;
import java.awt.Graphics;

public class Hello extends JApplet {

public void paint(Graphics g) {


g.drawString("Hola, mundo!", 65, 95);
}

}
<!-- Hola.html -->
<html>
<head>
<title>Applet Hola Caracola</title>
</head>
<body>
<applet code="Hola.class" width="200" height="200">
</applet>
</body>
</html>
Actualmente HTML 5 ha eliminado el uso de la etiqueta <applet>. Pero todava
existe la forma de usarlo en HTML5. (Texto en ingls) Java Applets in HTML5.

La sentencia import indica al compilador de Java que incluya las clases


java.applet. Applet y java.awt. Graphics, para poder referenciarlas por sus
nombres, sin tener que anteponer la ruta completa cada vez que se quieran
usar en el cdigo fuente.

La clase Hola extiende (extends) a la clase Applet, es decir, es una subclase de


sta. La clase Applet permite a la aplicacin mostrar y controlar el estado del
applet. La clase Applet es un componente del AWT (Abstract Window Toolkit),
que permite al applet mostrar una interfaz grfica de usuario o GUI (Graphical
User Interface), y responder a eventos generados por el usuario.

La clase Hola sobrecarga el mtodo paint (Graphics) heredado de la superclase


contenedora (Applet en este caso), para acceder al cdigo encargado de
dibujar. El mtodo paint() recibe un objeto Graphics que contiene el contexto
grfico para dibujar el applet. El mtodo paint() llama al mtodo drawString
(String, int, int) del objeto [4]

Servlets[editar]
Artculo principal: Java Servlet
Los servlets son componentes de la parte del servidor de Java EE, encargados
de generar respuestas a las peticiones recibidas de los clientes.

// Hola.java
import java.io.IOException;
import javax.servlet.*;

public class Hola extends GenericServlet


{
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
pw.println("Hola, mundo!");
pw.close();
}
}
Las sentencias import indican al compilador de Java la inclusin de todas las
clases pblicas e interfaces de los paquetes java.io y javax.servlet en la
compilacin.

La clase Hola extiende (extends), es heredera de la clase GenericServlet. Esta


clase proporciona la interfaz para que el servidor le pase las peticiones al
servlet y el mecanismo para controlar el ciclo de vida del servlet.

La clase Hola sobrecarga el mtodo service (ServletRequest, ServletResponse),


definido por la interfaz servlet para acceder al manejador de la peticin de
servicio. El mtodo service() recibe un objeto de tipo ServletRequest que
contiene la peticin del cliente y un objeto de tipo ServletResponse, usado para
generar la respuesta que se devuelve al cliente. El mtodo service() puede
lanzar (throws) excepciones de tipo ServletException e IOException si ocurre
algn tipo de anomala.

El mtodo setContentType (String) en el objeto respuesta establece el tipo de


contenido MIME a "text/html", para indicar al cliente que la respuesta a su
peticin es una pgina con formato HTML. El mtodo getWriter() del objeto
respuesta devuelve un objeto de tipo PrintWriter, usado como una tubera por
la que viajarn los datos al cliente. El mtodo println (String) escribe la cadena
"Hola, mundo!" en la respuesta y finalmente se llama al mtodo close() para
cerrar la conexin, que hace que los datos escritos en la tubera o stream sean
devueltos al cliente.

Aplicaciones con ventanas[editar]


Swing es la biblioteca para la interfaz grfica de usuario avanzada de la
plataforma Java SE.

// Hola.java
import javax.swing.*;

public class Hola extends JFrame {


Hola() {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
add(new JLabel("Hola, mundo!"));
pack();
}

public static void main(String[] args) {

new Hola().setVisible(true);
}
}
Las instrucciones import indican al compilador de Java que las clases e
interfaces del paquete javax.swing se incluyan en la compilacin.

La clase Hola extiende (extends) la clase javax.swing.JFrame, que implementa


una ventana con una barra de ttulo y un control para cerrarla.

El constructor Hola() inicializa el marco o frame llamando al mtodo


setDefaultCloseOperation (int) heredado de JFrame para establecer las
operaciones por defecto cuando el control de cierre en la barra de ttulo es
seleccionado al valor WindowConstants.DISPOSE_ON_CLOSE. Esto hace que se
liberen los recursos tomados por la ventana cuando es cerrada, y no
simplemente ocultada, lo que permite a la mquina virtual y al programa
acabar su ejecucin. A continuacin se crea un objeto de tipo JLabel con el
texto "Hola, mundo!", y se aade al marco mediante el mtodo add
(Component), heredado de la clase Container. El mtodo pack(), heredado de la
clase Window, es invocado para dimensionar la ventana y distribuir su
contenido.

El mtodo main() es llamado por la JVM al comienzo del programa. Crea una
instancia de la clase Hola y hace la ventana sea mostrada invocando al mtodo
setVisible (boolean) de la superclase (clase de la que hereda) con el parmetro
a true. Vase que, una vez el marco es dibujado, el programa no termina
cuando se sale del mtodo main(), ya que el cdigo del que depende se
encuentra en un hilo de ejecucin independiente ya lanzado, y que
permanecer activo hasta que todas las ventanas hayan sido destruidas.

Entornos de funcionamiento[editar]
El diseo de Java, su robustez, el respaldo de la industria y su fcil portabilidad
han hecho de Java uno de los lenguajes con un mayor crecimiento y amplitud
de uso en distintos mbitos de la industria de la informtica.

En dispositivos mviles y sistemas embebidos[editar]


Desde la creacin de la especificacin J2ME (Java 2 Platform, Micro Edition),
una versin del entorno de ejecucin Java reducido y altamente optimizado,
especialmente desarrollado para el mercado de dispositivos electrnicos de
consumo se ha producido toda una revolucin en lo que a la extensin de Java
se refiere.

Es posible encontrar microprocesadores diseados para ejecutar bytecode Java


y software Java para tarjetas inteligentes (JavaCard), telfonos mviles,
buscapersonas, set-top-boxes, sintonizadores de TV y otros pequeos
electrodomsticos.

El modelo de desarrollo de estas aplicaciones es muy semejante a las applets


de los navegadores salvo que en este caso se denominan MIDlets.

Vase Sun Mobile Device Tecnology

En el navegador web[editar]
Desde la primera versin de java existe la posibilidad de desarrollar pequeas
aplicaciones (Applets) en Java que luego pueden ser incrustadas en una pgina
HTML para que sean descargadas y ejecutadas por el navegador web. Estas
mini-aplicaciones se ejecutan en una JVM que el navegador tiene configurada
como extensin (plug-in) en un contexto de seguridad restringido configurable
para impedir la ejecucin local de cdigo potencialmente malicioso.

El xito de este tipo de aplicaciones (la visin del equipo de Gosling) no fue
realmente el esperado debido a diversos factores, siendo quizs el ms
importante la lentitud y el reducido ancho de banda de las comunicaciones en
aquel entonces que limitaba el tamao de las applets que se incrustaban en el
navegador. La aparicin posterior de otras alternativas (aplicaciones web
dinmicas de servidor) dej un reducido mbito de uso para esta tecnologa,
quedando hoy relegada fundamentalmente a componentes especficos para la
intermediacin desde una aplicacin web dinmica de servidor con dispositivos
ubicados en la mquina cliente donde se ejecuta el navegador.

Las applets Java no son las nicas tecnologas (aunque s las primeras) de
componentes complejos incrustados en el navegador. Otras tecnologas
similares pueden ser: ActiveX de Microsoft, Flash, Java Web Start, etc.

En sistemas de servidor[editar]
En la parte del servidor, Java es ms popular que nunca, desde la aparicin de
la especificacin de Servlets y JSP (Java Server Pages).

Hasta entonces, las aplicaciones web dinmicas de servidor que existan se


basaban fundamentalmente en componentes CGI y lenguajes interpretados.
Ambos tenan diversos inconvenientes (fundamentalmente lentitud, elevada
carga computacional o de memoria y propensin a errores por su
interpretacin dinmica).

Los servlets y las JSPs supusieron un importante avance ya que:

El API de programacin es muy sencilla, flexible y extensible.


Los servlets no son procesos independientes (como los CGIs) y por tanto se
ejecutan dentro del mismo proceso que la JVM mejorando notablemente el
rendimiento y reduciendo la carga computacional y de memoria requeridas.
Las JSPs son pginas que se compilan dinmicamente (o se pre-compilan
previamente a su distribucin) de modo que el cdigo que se consigue una
ventaja en rendimiento substancial frente a muchos lenguajes interpretados.
La especificacin de Servlets y JSPs define un API de programacin y los
requisitos para un contenedor (servidor) dentro del cual se puedan desplegar
estos componentes para formar aplicaciones web dinmicas completas. Hoy
da existen multitud de contenedores (libres y comerciales) compatibles con
estas especificaciones.

A partir de su expansin entre la comunidad de desarrolladores, estas


tecnologas han dado paso a modelos de desarrollo mucho ms elaborados con
frameworks (pe Struts, Webwork) que se sobreponen sobre los servlets y las
JSPs para conseguir un entorno de trabajo mucho ms poderoso y segmentado
en el que la especializacin de roles sea posible (desarrolladores, diseadores

grficos,...) y se facilite la reutilizacin y robustez de cdigo. A pesar de todo


ello, las tecnologas que subyacen (Servlets y JSPs) son substancialmente las
mismas.

Este modelo de trabajo se ha convertido en uno de los estndar de-facto para


el desarrollo de aplicaciones web dinmicas de servidor.

En aplicaciones de escritorio[editar]
Hoy en da existen multitud de aplicaciones grficas de usuario basadas en
Java. El entorno de ejecucin Java (JRE) se ha convertido en un componente
habitual en los PC de usuario de los sistemas operativos ms usados en el
mundo. Adems, muchas aplicaciones Java lo incluyen dentro del propio
paquete de la aplicacin de modo que se ejecuten en cualquier PC.

En las primeras versiones de la plataforma Java existan importantes


limitaciones en las APIs de desarrollo grfico (AWT). Desde la aparicin de la
biblioteca Swing la situacin mejor substancialmente y posteriormente con la
aparicin de bibliotecas como SWT hacen que el desarrollo de aplicaciones de
escritorio complejas y con gran dinamismo, usabilidad, etc. sea relativamente
sencillo.

Plataformas soportadas[editar]
Una versin del entorno de ejecucin Java JRE (Java Runtime Environment) est
disponible en la mayora de equipos de escritorio. Sin embargo, Microsoft no lo
ha incluido por defecto en sus sistemas operativos. En el caso de Apple, ste
incluye una versin propia del JRE en su sistema operativo, el Mac OS. Tambin
es un producto que por defecto aparece en la mayora de las distribuciones de
GNU/Linux. Debido a incompatibilidades entre distintas versiones del JRE,
muchas aplicaciones prefieren instalar su propia copia del JRE antes que confiar
su suerte a la aplicacin instalada por defecto. Los desarrolladores de applets
de Java o bien deben insistir a los usuarios en la actualizacin del JRE, o bien
desarrollar bajo una versin antigua de Java y verificar el correcto
funcionamiento en las versiones posteriores.

Programacin[editar]

Expresiones[editar]
Las expresiones son un conjunto de elementos o tokens junto con literales que
son evaluados para devolver un resultado. Los tokens son elemento ms
pequeo de un programa que es significativo, e interpretado o entendido por el
compilador, en java los tokens se dividen en cinco categoras que son:

Identificadores: Son las representaciones que se les da a los nombres que se


asignan a las variables, clases, paquetes, mtodos y constantes en el cdigo
de java para que el compilador los identifique y el programador pueda
entenderlos. En java los identificadores pueden diferenciar entre maysculas o
minsculas por ser case sensitive, por lo que la variable cuyo nombre sea
Mivariable, no es igual a mivariable, ya que java identifica estas como
variables diferentes por el case sensitive, tambin se puede utilizar nmeros, o
el signo _ para asignar un identificador.

Palabras claves: Son los identificadores reservados por java para cumplir con
un objetivo especfico en el cdigo y el compilador, se usan de forma limitada y
en casos especficos. Las palabras claves que usa java son las siguientes:

abstract

boolean

catch char

class continue

do

double

else

final

finally float for

break byte case


default

extends
if

implements import

instanceof

long

package

native new

private

null

protected

false

int

public return short

static super switchsyncronized this


throw throws

transient

true

void

while var

rest

volatile

byvalue

cast

try

const future generic

goto inner operator

outer

interface

Las palabras que se encuentran en negrilla, son palabras claves para java
aunque actualmente no se utilicen en la versin de java, pero se pretenden
integrar en las siguientes versiones de java.

Literales y constantes: Los literales son sintaxis para asignar valores a una
variable, es decir el valor que puede tomar una variable, tambin es un valor
constante que puede ser de tipo numrico. Las constantes son variables que
tienen un valor fijo y no puede ser modificado en el trascurso de la ejecucin
del cdigo, estas se declaran por medio de los modificadores final y static.

final static double pi= 3.1416;


Operadores: Son los que nos indican una evaluacin que se aplica a un objeto o
un dato, sobre un identificador o constante. Un ejemplo de operadores puede
ser la suma, resta o multiplicacin.

Separadores: Se utilizan para indicarle al compilador de java donde se ubican


los elementos del cdigo, los separadores que admite java son: { },:;

Tambin el compilador de java identifica y elimina los comentarios, retornos de


carros espacios vacos y de tabulacin a la hora de compilar por lo que no son
considerados parte de un token.

Las expresiones pueden ser una combinacin en secuencia de variables,


operadores y mtodos. Las expresiones son utilizadas para realizar clculos,
para asignar valores a variables, o para controlar la ejecucin del flujo del
programa.

Operadores[editar]
Los operadores son aquellos que tras realizar una operacin devuelven un
resultado, estos se puede caracterizar por el nmero de operadores, el tipo de
operandos, y el resultado que generan.

Nmero de operandos. Pueden ser de dos tipos unarios, y binarios. Los unarios
son aquellos que solo necesitan de un operando para devolver un valor,
mientras que los binarios necesitan de dos o ms operandos.

Operadores unarios.

Operador
-

Descripcin

Cambio de signo

!
~

Operador NOT
Complemento a 1

Operadores binarios.

Operadores Descripcin
+-*/%

Operadores aritmticos

== != < > <= >= Operadores relacionales


&& || ^

Operadores booleanos

^ << >> >>>


+

Operadores a nivel de bit

Concatenacin de cadenas

Operadores a nivel de bit[editar]


Los operadores a nivel de bit nos permiten realizar operaciones sobre nmeros
binarios.

~ Complemento a 1, este operador invierte los dgitos, cambiando los 0 por 1 y


los 1 por 0, un ejemplo puede ser:

11001011
~ 11001011 resultado 00110100
Como se puede ver se cambian los valores de 0 a 1 y de 1 a 0.

& AND a nivel de bit, este operador realiza una operacin AND o suma entre
dos nmeros de bit, en donde si dos bit son igual a 1 el resultado ser 1, de lo
contrario ser 0, un ejemplo puede ser:

situacion
01001101
& 10011011
______________
00001001
| Or a nivel de bit, este operador realiza una operacin OR en donde si alguno
de los dos nmeros es 1 el resultado ser 1, un ejemplo puede ser:

11001101
| 01011101
______________
11011101
^ XOR a nivel de bit, este operador realiza la operacin XOR en donde si los
dos nmeros son iguales el resultado ser 0 de lo contrario ser 1, un ejemplo
puede ser:

00101001
^ 01101101
______________
01000100
<< Desplazamiento a la izquierda, este operador desplaza n cantidad de
espacios a la izquierda un bit, un ejemplo puede ser;

01101110
01101110 << 2 = 11011100
Como se puede ver al realizar el desplazamiento se realiza una insercin de un
dgito 0 a la derecha

Precedencia de operadores[editar]
Los operadores son una parte principal en las expresiones, el tipo y forma de
uso es fundamental a la hora de programas, pero para su uso se tiene que
tener en cuenta una serie de normas, como lo son la precedencia de los
operadores.

Los operadores son ejecutados segn su precedencia, si cuentan con una


precedencia mayor sern evaluados primero que los de precedencia menor, si
por casualidad se llegase a presentar operadores con el mismo nivel de
precedencia, estos se evaluaran de derecha a izquierda, si son operadores
binarios (menos los operadores de asignacin) se evaluaran de izquierda a
derecha. A Java se le puede indicar qu operadores debe evaluar primero sin
importar su precedencia por medio de parntesis ( ), de esta forma el
compilador de java interpreta que primero ejecutara las operaciones que se
encuentran dentro de los parntesis, y luego continuara con los dems
operadores. La siguiente tabla indicara en nivel de precedencia de los
operadores utilizados en java, teniendo en cuenta que el nivel de precedencia
est indicado de arriba a abajo, siendo arriba el nivel ms alto.

Precedencia de los operadores en java.

Tipo de operadoresOperadores
Operadores posfijos

[ ] . ( parmetros) expr++ expr--

Operadores unarios

++expr expr +expr -expr ~ !

Creacin o conversin

New (tipo) expr

Multiplicacin
Suma + -

*/%

Desplazamiento

<< >> >>>

Comparacin

< > <= >= instanceof

Igualdad

== !=

AND a nivel bit

&

OR a nivel bit

XOR a nivel bit

AND lgico &&


OR lgico

||

Condicional ? :
Asignacin

= += -= *= /= %= &= ^= |= <<= >>= >>>=

Un ejemplo de la precedencia de los operadores en java podra ser el siguiente,


en donde tenemos un cdigo que se encargar de realizar una serie de
operaciones aritmticas.

int numero1 = 3;
int numero2 = 4;
int resultado;
resultado = numero1 + numero2 * 3;
System.out.println (resultado); //esto imprime el valor de 15
segn la precedencia de los operadores la multiplicacin * tiene mayor
prioridad que la suma +, por lo que primero se ejecuta la multiplicacin y luego
se realiza la suma.

int numero1 = 3;
int numero2 = 4;
int resultado;
resultado = (numero1 + numero2) * 3;
System.out.println (resultado); //esto imprime el valor de 21

En este caso el resultado cambia ya que primero se evalan los parmetros


que estn dentro del parntesis y luego se evala el resto de parmetros. Una
de las recomendaciones que da java para el desarrollo es el uso de los
parntesis en las operaciones con ms de 3 operandos, as de esta forma el
cdigo se hace ms legible y se evitan errores al momento de compilar.

Sentencias[editar]
Las sentencias son una representacin de una secuencia de acciones que se
realizan en java, la clave fundamental de las sentencias es su punto final que
indica que ha finalizado la sentencia y puede continuar con la siguiente, el
indicador utilizado es el signo de punto y coma (;). Contamos en java con
sentencias que pueden ir desde sentencias de asignacin, de bucles,
condicionales, y de salto. Las sentencias se conforman comnmente por una
instancia, y un operador, un ejemplo es la sentencia de asignacin que se
conforma por una instancia de una variable, el signo de asignacin y una
expresin, un ejemplo es:

int variable = 12+2;


Las sentencias de asignacin son aquellas en las que se asigna un valor a una
variable o constante. Las sentencias condicionales son las que expresan una
condicin para definir el flujo de ejecucin del programa, entre ellas tenemos ifelse y switch. Las sentencias de bucles se encargar de realizar una accin
cierta cantidad de tiempo dado, o hasta que se cumpla con una condicin,
entre ellas tenemos el while, do-while, y for. Las sentencias de salto llevan al
compilador a un punto especfico del programa o hacia la siguiente sentencia
de ejecucin, entre ellas tenemos break, continue, y return.

Conversin de tipos[editar]
En algunos casos suele ser necesario convertir un tipo de dato a otro, esto se le
conoce como conversin de tipos, modelado, o tipado, as de esta forma poder
realizar las operaciones necesarias sobre el valor que se desea convertir. Se
debe tener en cuenta el tipo de dato que se va a convertir, ya que si se
convierte un dato que tenga una cantidad menor de bit al anterior este tendr
perdida de informacin, un ejemplo de tipado puede ser un nmero long que se
desea convertir a int, el compilador eliminara los primeros 32bit del long para
ajustarlo al int ya que el int es de 32bit y el long de 64. Si la conversin se
realiza a un tipo de datos de menos bit a un tipo de datos con mayor bit, la
conversin se realiza automticamente llamada conversin implcita, pero si se

realiza de un tipo de datos con mayor bit a menor bit se tiene que realizar una
conversin explcita, la cual se realiza con un casting, al usar este mtodo se
obliga a realizar la conversin por lo cual puede haber perdida de datos en la
conversin. Para realizar una conversin explcita se tiene que poner el tipo de
dato que se desea realizar la conversin entre parntesis, luego el valor o la
variable que se desea convertir. Un ejemplo de conversin de tipo explcito
puede ser:

Int numero1 = 32;


byte numero2;
numero2 = (byte) numero1;
Un ejemplo de una conversin de tipo implcita puede ser:

int numero1 = 32;


long numero2;
numero2 = numero1;
Las siguiente tabla muestra la los tipos de datos que se pueden realizar una
conversin implcita desde el dato origen, hasta el dato destino que es el dato
en el que se va a convertir.

Tipo origen Tipo destino


byte double, float, long, int, char, short
short double, float, long, int
char

double, float, long, int

int

double, float, long

long

double, float

float double
Los tipos de datos booleanos no pueden ser convertidos a otro tipo de datos,
por ningn mtodo mencionado anteriormente. Otro tipo de conversin que no
se encuentre en esta tabla desde el origen al destino, tiene que realizarse por
medio de una conversin explcita por casting. Cuando se desea realizar una

conversin de un tipo string como origen a otro tipo, es necesario utilizar una
funcin que se encarga de convertir el tipo de dato, la funcin necesaria se
compone de la variable que va almacenar el resultado, y dependiendo de la
variable se usa el parmetro que inicia con el tipo de dato a convertir, Integer,
Byte, Short, o Long, seguida de punto . , el cual indica que se cargarn los
atributos del parmetro, en donde cargaremos el parseInt si queremos
convertir a interger o parseByte si queremos convertir a byte, o dependiendo
del tipo de dato, seguido de parntesis en donde se agregara el valor de string
a convertir. Algunos ejemplos puede ser:

int numero1;
long numero2;
byte numero3;
String texto= 2013;
numero1 = Integer.parseInt ( texto );
numero2 = Long.parseLong ( texto);
numero3 = Byte.parseByte ( texto );
esto suele ser usado para realizar una conversin de texto cuando se ingresan
valores numricos por una entrada a java, la cual los detecta como string, as
de esta forma puede convertir el texto que se ingresa a un nmero para
realizar operaciones, como una calculadora.

Industria relacionada[editar]
Sun Microsystem, como creador del lenguaje de programacin Java y de la
plataforma JDK, mantiene fuertes polticas para mantener una especificacin
del lenguaje5 as como de la mquina virtual6 a travs del JCP. Es debido a este
esfuerzo que se mantiene un estndar de facto.

Son innumerables las compaas que desarrollan aplicaciones para Java y/o
estn volcadas con esta tecnologa:

La industria de la telefona mvil est fuertemente influenciada por la


tecnologa Java.

Los entornos de desarrollo Netbeans y Eclipse ha tomado un lugar importante


entre la comunidad de desarrolladores Java.
La fundacin Apache tiene tambin una presencia importante en el desarrollo
de bibliotecas y componentes de servidor basados en Java.
IBM, BEA, IONA, Oracle,... son empresas con grandes intereses y productos
creados en y para Java.
Crticas[editar]
En 1995 alguien dijo que Java fue creado para abrir una nueva va en la gestin
de software complejo, y es por regla general aceptado que se ha comportado
bien en ese aspecto. Sin embargo no puede decirse que Java no tenga grietas,
ni que se adapta completamente a todos los estilos de programacin, todos los
entornos, o todas las necesidades.

General[editar]
Java no ha aportado capacidades estndares para aritmtica en punto flotante.
El estndar IEEE 754 para Estndar para Aritmtica Binaria en Punto Flotante
apareci en 1985, y desde entonces es el estndar para la industria. Y aunque
la aritmtica flotante de Java (cosa que cambi desde el 13 de noviembre de
2006, cuando se abri el cdigo fuente y se adopt la licencia GPL, aparte de la
ya existente)[cita requerida] se basa en gran medida en la norma del IEEE, no
soporta an algunas caractersticas. Ms informacin al respecto puede
encontrarse en la seccin final de enlaces externos.
El lenguaje[editar]
En un sentido estricto, Java no es un lenguaje absolutamente orientado a
objetos, a diferencia de, por ejemplo, Ruby o Smalltalk. Por motivos de
eficiencia, Java ha relajado en cierta medida el paradigma de orientacin a
objetos, y as por ejemplo, no todos los valores son objetos.
El cdigo Java puede ser a veces redundante en comparacin con otros
lenguajes. Esto es en parte debido a las frecuentes declaraciones de tipos y
conversiones de tipo manual (casting). Tambin se debe a que no se dispone
de operadores sobrecargados, y a una sintaxis relativamente simple. Sin
embargo, J2SE 5.0 introduce elementos para tratar de reducir la redundancia,
como una nueva construccin para los bucles foreach.
A diferencia de C++, Java no dispone de operadores de sobrecarga definidos
por el usuario. Los diseadores de Java tomaron esta decisin puesto que

consideraban que, bajo ciertas circunstancias, esta caracterstica poda


complicar la lectura y mantenimiento de los programas.
Apariencia[editar]
La apariencia externa (el look and feel) de las aplicaciones GUI (Graphical
User Interface) escritas en Java usando la plataforma Swing difiere a menudo
de la que muestran aplicaciones nativas. Aunque el programador puede usar el
juego de herramientas AWT (Abstract Windowing Toolkit) que genera objetos
grficos de la plataforma nativa, el AWT no es capaz de funciones grficas
avanzadas sin sacrificar la portabilidad entre plataformas; ya que cada una
tiene un conjunto de APIs distinto, especialmente para objetos grficos de alto
nivel. Las herramientas de Swing, escritas completamente en Java, evitan este
problema construyendo los objetos grficos a partir de los mecanismos de
dibujo bsicos que deben estar disponibles en todas las plataformas. El
inconveniente es el trabajo extra requerido para conseguir la misma apariencia
de la plataforma destino. Aunque esto es posible (usando GTK+ y el Look-andFeel de Windows), la mayora de los usuarios no saben cmo cambiar la
apariencia que se proporciona por defecto por aquella que se adapta a la de la
plataforma.

Rendimiento[editar]
El bytecode de Java puede ser interpretado en tiempo de ejecucin por la
mquina virtual, o bien compilado al cargarse el programa, o durante la propia
ejecucin, para generar cdigo nativo que se ejecuta directamente sobre el
hardware. Si es interpretado, ser ms lento que usando el cdigo mquina
intrnseco de la plataforma destino. Si es compilado, durante la carga inicial o
la ejecucin, la penalizacin est en el tiempo necesario para llevar a cabo la
compilacin.

Algunas caractersticas del propio lenguaje conllevan una penalizacin en


tiempo, aunque no son nicas de Java. Algunas de ellas son el chequeo de los
lmites de arrays, chequeo en tiempo de ejecucin de tipos, y la indireccin de
funciones virtuales.

El uso de un recolector de basura para eliminar de forma automtica aquellos


objetos no requeridos, aade una sobrecarga que puede afectar al rendimiento,
o ser apenas apreciable, dependiendo de la tecnologa del recolector y de la
aplicacin en concreto. Las JVM modernas usan recolectores de basura que

gracias a rpidos algoritmos de manejo de memoria, consiguen que algunas


aplicaciones puedan ejecutarse ms eficientemente.

El rendimiento entre un compilador JIT y los compiladores nativos puede ser


parecido, aunque la distincin no est clara en este punto. La compilacin
mediante el JIT puede consumir un tiempo apreciable, un inconveniente
principalmente para aplicaciones de corta duracin o con gran cantidad de
cdigo. Sin embargo, una vez compilado, el rendimiento del programa puede
ser comparable al que consiguen compiladores nativos de la plataforma
destino, inclusive en tareas numricas. Aunque Java no permite la expansin
manual de llamadas a mtodos, muchos compiladores JIT realizan esta
optimizacin durante la carga de la aplicacin y pueden aprovechar
informacin del entorno en tiempo de ejecucin para llevar a cabo
transformaciones eficientes durante la propia ejecucin de la aplicacin. Esta
recompilacin dinmica, como la que proporciona la mquina virtual HotSpot
de Sun, puede llegar a mejorar el resultado de compiladores estticos
tradicionales, gracias a los datos que slo estn disponibles durante el tiempo
de ejecucin.

Java fue diseado para ofrecer seguridad y portabilidad, y no ofrece acceso


directo al hardware de la arquitectura ni al espacio de direcciones. Java no
soporta expansin de cdigo ensamblador, aunque las aplicaciones pueden
acceder a caractersticas de bajo nivel usando bibliotecas nativas (JNI, Java
Native Interfaces).

Recursos[editar]
JRE[editar]
El JRE (Java Runtime Environment, o Entorno en Tiempo de Ejecucin de Java)
es el software necesario para ejecutar cualquier aplicacin desarrollada para la
plataforma Java. El usuario final usa el JRE como parte de paquetes software o
plugins (o conectores) en un navegador Web. Sun ofrece tambin el SDK de
Java 2, o JDK (Java Development Kit) en cuyo seno reside el JRE, e incluye
herramientas como el compilador de Java, Javadoc para generar
documentacin o el depurador. Puede tambin obtenerse como un paquete
independiente, y puede considerarse como el entorno necesario para ejecutar
una aplicacin Java, mientras que un desarrollador debe adems contar con
otras facilidades que ofrece el JDK.

Componentes[editar]
Bibliotecas de Java, que son el resultado de compilar el cdigo fuente
desarrollado por quien implementa la JRE, y que ofrecen apoyo para el
desarrollo en Java. Algunos ejemplos de estas bibliotecas son:
Las bibliotecas centrales, que incluyen:
Una coleccin de bibliotecas para implementar estructuras de datos como
listas, arrays, rboles y conjuntos.
Bibliotecas para anlisis de XML.
Seguridad.
Bibliotecas de internacionalizacin y localizacin.
Bibliotecas de integracin, que permiten la comunicacin con sistemas
externos. Estas bibliotecas incluyen:
La API para acceso a bases de datos JDBC (Java DataBase Conectivity).
La interfaz JNDI (Java Naming and Directory Interface) para servicios de
directorio.
RMI (Remote Method Invocation) y CORBA para el desarrollo de aplicaciones
distribuidas.
Bibliotecas para la interfaz de usuario, que incluyen:
El conjunto de herramientas nativas AWT (Abstract Window Toolkit), que ofrece
componentes GUI (Graphical User Interface), mecanismos para usarlos y
manejar sus eventos asociados.
Las Bibliotecas de Swing, construidas sobre AWT pero ofrecen
implementaciones no nativas de los componentes de AWT.
APIs para la captura, procesamiento y reproduccin de audio.
Una implementacin dependiente de la plataforma en que se ejecuta de la
mquina virtual de Java (JVM), que es la encargada de la ejecucin del cdigo
de las bibliotecas y las aplicaciones externas.
Plugins o conectores que permiten ejecutar applets en los navegadores Web.
Java Web Start, para la distribucin de aplicaciones Java a travs de Internet.
Documentacin y licencia.
APIs[editar]

Sun define tres plataformas en un intento por cubrir distintos entornos de


aplicacin. As, ha distribuido muchas de sus APIs (Application Program
Interface) de forma que pertenezcan a cada una de las plataformas:

Java ME (Java Platform, Micro Edition) o J2ME orientada a entornos de


limitados recursos, como telfonos mviles, PDAs (Personal Digital Assistant),
etc.
Java SE (Java Platform, Standard Edition) o J2SE para entornos de gama
media y estaciones de trabajo. Aqu se sita al usuario medio en un PC de
escritorio.
Java EE (Java Platform, Enterprise Edition) o J2EE orientada a entornos
distribuidos empresariales o de Internet.
Las clases en las APIs de Java se organizan en grupos disjuntos llamados
paquetes. Cada paquete contiene un conjunto de interfaces, clases y
excepciones relacionadas. La informacin sobre los paquetes que ofrece cada
plataforma puede encontrarse en la documentacin de sta.

El conjunto de las APIs es controlado por Sun Microsystems junto con otras
entidades o personas a travs del programa JCP (Java Community Process). Las
compaas o individuos participantes del JCP pueden influir de forma activa en
el diseo y desarrollo de las APIs, algo que ha sido motivo de controversia.

Extensiones y arquitecturas relacionadas[editar]


Las extensiones7 de Java estn en paquetes que cuelgan de la raz javax:
javax.*. No se incluyen en la JDK o el JRE. Algunas de las extensiones y
arquitecturas ligadas estrechamente al lenguaje Java son:

Java EE (Java Platform, Enterprise Edition; antes J2EE) para aplicaciones


distribuidas orientadas al entorno empresarial
Java en cdigo abierto[editar]
Java se ha convertido en un lenguaje con una implantacin masiva en todos los
entornos (personales y empresariales). El control que mantiene Sun sobre ste
ha generado reticencias en la comunidad de empresas con fuertes intereses en

Java (IBM, Oracle) y obviamente en la comunidad de desarrolladores de


software libre.

La evolucin basada en un comit en el que participen todos los implicados no


es suficiente y la comunidad demandaba desde hace tiempo la liberacin de
las APIs y bibliotecas bsicas de la JDK.

En diciembre de 2006, Sun Microsystems comenz el relanzamiento de su


plataforma Java8 bajo la licencia GPL de GNU.

En abril de 2009 Oracle adquiri Sun Microsystems, lo que gener temor en la


comunidad ante la posible mercantilizacin del lenguaje de programacin
orientado a objetos ms popular actualmente. Por ahora Oracle ha seguido
manteniendo Java, estando las versiones posteriores a la 6 bajo su control.

Se instala una versin homebrew de PSPKVM (0.5.5) para emular la plataforma


de Java en PSP. Esto permite usar programas JAVA en esta videoconsola.

Alternativas libres[editar]
Existen alternativas para el entorno de ejecucin y de desarrollo de Java con
una gran cobertura de funcionalidades con respecto a las implementaciones
comerciales de Sun, IBM, Bea, etc.

Crticas referentes a Java y el software libre[editar]


Free But Shackled The Java Trap, de Richard Stallman, 12 de abril de 2004.
(respuesta de James Gosling)
Traduccin al espaol de este artculo: Libre pero encadenado. La trampa del
Java. (Ntese que hay una nota en un recuadro amarillo que habla de la
situacin actual con respecto a lo que se dice en ese artculo)
Notar que este artculo fue escrito antes de la liberacin del cdigo fuente de
Java. En la actualidad la postura de la Free Software Foundation y de Richard
Stallman han cambiado[cita requerida], mostrndose partidarios ambos de su
uso en software libre.