Sei sulla pagina 1di 19

Lenguaje de programacin Java 1

Lenguaje de programacin Java


Java

Paradigma: Orientado a objetos

Apareci en: 1991

Diseado por: Sun Microsystems

Tipo de dato: Fuerte, Esttico

Implementaciones: Numerosas

Influido por: Objective-C, C++, Smalltalk, Eiffel

Ha influido a: C#, J#, JavaScript,PHP

Sistema operativo: Multiplataforma

Licencia de software: GNU GPL / Java Community Process

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 es un lenguaje de programacin orientado a objetos desarrollado por Sun Microsystems a principios de los aos
90. El lenguaje en s mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos ms simple y
elimina herramientas de bajo nivel, que suelen inducir a muchos errores, como la manipulacin directa de punteros o
memoria.
Las aplicaciones Java estn tpicamente compiladas en un bytecode, aunque la compilacin en cdigo mquina
nativo tambin es posible. En el tiempo de ejecucin, el bytecode es normalmente interpretado o compilado a cdigo
nativo para la ejecucin, aunque la ejecucin directa por hardware del bytecode por un procesador Java tambin es
posible.
La implementacin original y de referencia del compilador, la mquina virtual y las bibliotecas de clases de Java
fueron desarrollados por Sun Microsystems en 1995. Desde entonces, Sun ha controlado las especificaciones, el
desarrollo y evolucin del lenguaje a travs del Java Community Process, si bien otros han desarrollado tambin
implementaciones alternativas de estas tecnologas de Sun, algunas incluso bajo licencias de software libre.
Entre noviembre de 2006 y mayo de 2007, Sun Microsystems liber la mayor parte de sus tecnologas Java bajo la
licencia GNU GPL, de acuerdo con las especificaciones del Java Community Process, de tal forma que
prcticamente todo el Java de Sun es ahora software libre (aunque la biblioteca de clases de Sun que se requiere para
ejecutar los programas Java an no lo es).
Lenguaje de programacin Java 2

Historia
La tecnologa 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.
El trmino Java fue acuado en una cafetera 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 creadores: 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 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 cafe 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. Otros simplemente dicen que el nombre fue sacado al parecer de
una lista aleatoria de palabras.
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, Joy
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.
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 [2].
JDK 1.0 (23 de enero de 1996) Primer lanzamiento: comunicado de prensa [3]
JDK 1.1 (19 de febrero de 1997) Principales adiciones incluidas: comunicado de prensa [4]
una reestructuracin intensiva del modelo de eventos AWT (Abstract Windowing Toolkit)
clases internas (inner classes)
Lenguaje de programacin Java 3

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 [5]
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
[6]
lista completa de cambios [7]
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 [8]. Los cambios ms notables fueron:
comunicado de prensa [9]lista completa de cambios [10]
Palabra reservada assert (Especificado en JSR 41 [11].)
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 [12].)
Logging API (Specified in JSR 47 [13].)
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 [14] y JSR 63 [2].)
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 [15].)
J2SE 5.0 (30 de septiembre de 2004) Nombre clave: Tiger. (Originalmente numerado 1.5, esta notacin an es
usada internamente.[16]) Desarrollado bajo JSR 176 [17], Tiger aadi un nmero significativo de nuevas
caractersticas comunicado de prensa [18]
Plantillas (genricos) provee conversion de tipos (type safety) en tiempo de compilacin para colecciones y
elimina la necesidad de la mayora de conversion de tipos (type casting). (Especificado por JSR 14 [19].)
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 [20].)
Lenguaje de programacin Java 4

Autoboxing/unboxing Conversiones automticas entre tipos primitivos (Como los int) y clases de envoltura
primitivas (Como Integer [21]). (Especificado por JSR 201 [22].)
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 [22].)
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 [23], como la clase estndar
Collection [24], 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 [25]. Estuvo en desarrollo bajo la JSR 270 [26].
En esta versin, Sun cambi el nombre "J2SE" por Java SE y elimin el ".0" del nmero de versin.[27]. Est
disponible en http://java.sun.com/javase/6/ [28]. 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.
Se espera que su desarrollo d comienzo en la primavera de 2006, y se estima su lanzamiento para 2008.
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 Dias y Fechas, la cual reemplazara las antiguas clases Date y Calendar.
Posibilidad de operar con clases BigDecimal usando operandos.
[29]
Adems de los cambios en el lenguaje, con el paso de los aos se han efectuado muchos ms cambios dramticos en
la biblioteca de clases de Java (Java class library) que ha crecido de unos pocos cientos de clases en JDK 1.0 hasta
ms de tres mil en J2SE 5.0. APIs completamente nuevas, como Swing y Java2D, han sido introducidas y muchos de
Lenguaje de programacin Java 5

los mtodos y clases originales de JDK 1.0 estn obsoletas.


En el 2005 se calcula en 4,5 millones el nmero de desarrolladores y 2.500 millones de dispositivos habilitados con
tecnologa Java.

Filosofa
El lenguaje Java se cre con cinco objetivos principales:
1. Debera usar la metodologa de la programacin orientada a objetos.
2. Debera permitir la ejecucin de un mismo programa en mltiples sistemas operativos.
3. Debera incluir por defecto soporte para trabajo en red.
4. Debera disearse para ejecutar cdigo en sistemas remotos de forma segura.
5. 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
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.
Lenguaje de programacin Java 6

Independencia de la plataforma
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
everywhere.
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
Lenguaje de programacin Java 7

basados en OSGi, usando entornos Java empotrados.

El recolector de basura
Vase tambin: Recolector de basura

En Java el problema de las 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 necesarioses 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, mayor seguridad y
puede que ms rpida que en C++ [citarequerida].

Sintaxis
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).

Hola Mundo

Aplicaciones autnomas
// Hola.java
import java.io*;
public class Hola
{
public static void main(String[] args)throws IOException {
System.out.println("Hola, mundo!");
}
}

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 una
instancias de la misma. El mtodo main debe ser esttico o de clase.
Lenguaje de programacin Java 8

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
Las applet Java son programas incrustados en otras aplicaciones, normalmente una pgina Web que se muestra en un
navegador.

// Hola.java
import java.applet.Applet;
import java.awt.Graphics;

public class Hola extends Applet {


public void paint(Graphics gc) {
gc.drawString("Hola, mundo!", 65, 95);
}
}

<!-- Hola.html -->


<html>
<head>
<title>Applet Hola Mundo</title>
</head>
<body>
<applet code="Hola.class" width="200" height="200">
</applet>
</body>
</html>

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 inteterfaz 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 Graphics
para mostrar la cadena de caracteres Hola, mundo! en la posicin (65, 96) del espacio de dibujo asignado al applet.
Lenguaje de programacin Java 9

La referencia al applet es colocada en un documento HTML usando la etiqueta <applet>. Esta etiqueta o tag tiene
tres atributos: code="Hola" indica el nombre del applet, y width="200" height="200" establece la anchura y
altura, respectivamente, del applet. Un applet tambin pueden alojarse dentro de un documento HTML usando los
elementos object, o embed, aunque el soporte que ofrecen los navegadores Web no es uniforme.[30][31]

Servlets
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.*;
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.
Lenguaje de programacin Java 10

Aplicaciones con ventanas


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
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 empotrados


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 especficamente 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.
Lenguaje de programacin Java 11

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 [32]

En el navegador web
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
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.
Lenguaje de programacin Java 12

En aplicaciones de escritorio
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
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.

Industria relacionada
Sun Microsystem, como creador del lenguaje de programacin Java y de la plataforma JDK, mantiene fuertes
polticas para mantener una especificacin del lenguaje[33] as como de la mquina virtual[34] 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.
El entorno de desarrollo 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
Harold dijo en 1995 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
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 GNU, aparte de la ya existente) 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.
Lenguaje de programacin Java 13

El lenguaje
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
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-and-Feel 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
El rendimiento de una aplicacin est determinado por multitud de factores, por lo que no es fcil hacer una
comparacin que resulte totalmente objetiva. En tiempo de ejecucin, el rendimiento de una aplicacin Java depende
ms de la eficiencia del compilador, o la JVM, que de las propiedades intrnsecas del lenguaje. 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
Lenguaje de programacin Java 14

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

JRE
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
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 Windowing 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.
Lenguaje de programacin Java 15

APIs
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.
En 2004, IBM y BEA apoyaron pblicamente la idea de crear una implementacin de cdigo abierto (open source)
de Java, algo a lo que Sun, a fecha de 2006, se ha negado.

Extensiones y arquitecturas relacionadas


Las extensiones 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


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 genera 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 comenz relanzamiento de su plataforma Java[35] bajo la licencia GPL de GNU.

Alternativas libres
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


Free But Shackled The Java Trap [36], de Richard Stallman, 12 de abril, 2004. (respuesta de James Gosling
[37]
)
Traduccin al Espaol de este artculo: Libre pero encadenado. La trampa del Java. [38] (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, mostrndose partidarios ambos por su uso en
software libre.
Lenguaje de programacin Java 16

Vase tambin
Applet Java
JavaOne
JavaOS
Javapedia
Java Community Process
Java User Group
Mquina virtual Java
Plataforma Java

Referencias
Jon Byous, Java technology: The early years [39]. Sun Developer Network, sin fecha[ca. 1998]. Recuperado 21 de
abril de 2005.
James Gosling, A brief history of the Green project [40]. Java.net, sin fecha [ca. Q1/1998]. Recuperado 22 abril de
2005.
James Gosling, Bill Joy, Guy Steele, y Gilad Bracha, The Java language specification, tercera edicin.
Addison-Wesley, 2005. ISBN 0-321-24678-0.
Tim Lindholm y Frank Yellin. The Java Virtual Machine specification, segunda edicin. Addison-Wesley, 1999.
ISBN 0-201-43294-3.

Enlaces externos
Wikilibros
Wikilibros alberga un libro o manual sobre Programacin en Java.
Programas hechos en java con cdigo fuente [41]

Sun
Sitio oficial de Java para desarrolladores, etc [42]
The Java Language Specification, Tercera edicin [43] Especificacin oficial del lenguaje Java
Tutorial de Sun sobre el Lenguaje de programacin Java [44]
Libro blanco original de Java [45], 1996

Tutoriales
The Java Tutorial [44] de Sun Microsystems (online)
Thinking in Java [46], de Bruce Eckel (online)
An introduction to Computer Science using Java [47] por Bradley Kjell.
Java Course [48], de A.B. Downey.
Computer-Books.us [49] Coleccin de libros sobre Java disponibles para descarga gratuita.
En castellano:
Ejemplos de cdigo para que uses directamente en tus desarrollos. [50]
Coleccin Java a tope de libros electrnicos [51] (Universidad de Mlaga. Espaa)
Tutoriales de Java avanzados, bsicos y preguntas de certificacin para practicar. [52]
Curso de Java, de cero a hasta conexin a MYSQL, incluye PDF [53] (Mxico)
Capacitacin en Java sobre Grandes Proyectos [54]
Lenguaje de programacin Java 17

Certificaciones
Pgina oficial de certificaciones de Sun Microsystems [55]
Recursos e informacin sobre certificaciones [56]

Crticas
Softpanorama Java Critique Page: Java vs Scripting Languages [57], de Nikolai Bezroukov
How Javas Floating-Point Hurts Everyone Everywhere [58], de W. Kahan und Joseph D. Darcy en el ACM 1998
Workshop on Java for HighPerformance Network Computing

Referencias
[1] http:/ / www. sun. com/ smi/ Press/ sunflash/ 1996-01/ sunflash. 960109. 14048. html
[2] http:/ / www. jcp. org/ en/ jsr/ detail?id=63
[3] http:/ / www. sun. com/ smi/ Press/ sunflash/ 1996-01/ sunflash. 960123. 10561. html
[4] http:/ / www. sun. com/ smi/ Press/ sunflash/ 1997-02/ sunflash. 970219. 0001. html
[5] http:/ / www. sun. com/ smi/ Press/ sunflash/ 1998-12/ sunflash. 981208. 9. html
[6] http:/ / www. sun. com/ smi/ Press/ sunflash/ 2000-05/ sunflash. 20000508. 3. html
[7] http:/ / java. sun. com/ j2se/ 1. 3/ docs/ relnotes/ features. html
[8] http:/ / www. jcp. org/ en/ jsr/ detail?id=59
[9] http:/ / www. sun. com/ smi/ Press/ sunflash/ 2002-02/ sunflash. 20020206. 5. html
[10] http:/ / java. sun. com/ j2se/ 1. 4. 2/ docs/ relnotes/ features. html
[11] http:/ / www. jcp. org/ en/ jsr/ detail?id=41
[12] http:/ / www. jcp. org/ en/ jsr/ detail?id=51
[13] http:/ / www. jcp. org/ en/ jsr/ detail?id=47
[14] http:/ / www. jcp. org/ en/ jsr/ detail?id=5
[15] http:/ / www. jcp. org/ en/ jsr/ detail?id=56
[16] http:/ / java. sun. com/ j2se/ 1. 5. 0/ docs/ relnotes/ version-5. 0. html
[17] http:/ / www. jcp. org/ en/ jsr/ detail?id=176
[18] http:/ / www. sun. com/ smi/ Press/ sunflash/ 2004-09/ sunflash. 20040930. 1. html
[19] http:/ / www. jcp. org/ en/ jsr/ detail?id=14
[20] http:/ / www. jcp. org/ en/ jsr/ detail?id=175
[21] http:/ / java. sun. com/ j2se/ 1. 5. 0/ docs/ api/ java/ lang/ Integer. html
[22] http:/ / www. jcp. org/ en/ jsr/ detail?id=201
[23] http:/ / java. sun. com/ j2se/ 1. 5. 0/ docs/ api/ java/ lang/ Iterable. html
[24] http:/ / java. sun. com/ j2se/ 1. 5. 0/ docs/ api/ java/ util/ Collection. html
[25] https:/ / mustang. dev. java. net/
[26] http:/ / www. jcp. org/ en/ jsr/ detail?id=270
[27] http:/ / www. java. com/ en/ about/ brand/ naming. jsp
[28] http:/ / java. sun. com/ javase/ 6/
[29] http:/ / weblogs. java. net/ blog/ editors/ archives/ 2004/ 09/ evolving_a_lang. html
[30] http:/ / java. sun. com/ docs/ books/ tutorial/ deployment/ applet/ applettag. html
[31] http:/ / java. sun. com/ docs/ books/ tutorial/ deployment/ applet/ mixedbrowser. html
[32] http:/ / developers. sun. com/ mobility/ index. jsp
[33] Especificacin del lenguaje Java (http:/ / java. sun. com/ docs/ books/ jls/ )
[34] Especificacin de la mquina virtual Java (http:/ / java. sun. com/ docs/ books/ vmspec/ )
[35] Sun begins releasing Java under the GPL - Free Software Foundation (http:/ / www. fsf. org/ news/ fsf-welcomes-gpl-java. html)
[36] http:/ / www. gnu. org/ philosophy/ java-trap. html
[37] http:/ / today. java. net/ jag/ page7. html#59
[38] http:/ / www. gnu. org/ philosophy/ java-trap. es. html
[39] http:/ / java. sun. com/ features/ 1998/ 05/ birthday. html
[40] http:/ / today. java. net/ jag/ old/ green/
[41] http:/ / torturo. com/ programas-hechos-en-java/
[42] http:/ / java. sun. com/
[43] http:/ / java. sun. com/ docs/ books/ jls/
[44] http:/ / java. sun. com/ docs/ books/ tutorial/
[45] http:/ / java. sun. com/ docs/ white/ langenv/
Lenguaje de programacin Java 18

[46] http:/ / www. bruceeckel. com/


[47] http:/ / chortle. ccsu. edu/ CS151/ cs151java. html
[48] http:/ / www. vias. org/ javacourse/
[49] http:/ / www. computer-books. us/ java. php
[50] http:/ / www. javaejemplos. com
[51] http:/ / www. lcc. uma. es/ ~galvez/
[52] http:/ / www. forodejava. com/ downloads. php
[53] http:/ / www. cursodejava. com. mx/ index. html
[54] http:/ / www. nullbrainexception. blogspot. com/
[55] http:/ / www. sun. com/ training/ certification/ java/ index. xml
[56] http:/ / scjp-sun. blogspot. com/
[57] http:/ / www. softpanorama. org/ Lang/ java. shtml
[58] http:/ / www. cs. berkeley. edu/ ~wkahan/ JAVAhurt. pdf
Fuentes y contribuyentes del artculo 19

Fuentes y contribuyentes del artculo


Lenguaje de programacin Java Fuente: http://es.wikipedia.org/w/index.php?oldid=34227124 Contribuyentes: A. B. 10, ARHEKI, Aalku, Abgenis, Abrego, Adrruiz, Alejandrosilvestri,
AlfredoMorales, Aliamondano, Alqadim, Amads, Andreasmperu, Angus, Argentumm, Ascnder, Aviguille, Axxgreazz, Baiji, Balderai, Benek, Cabanyas, Camilo, Casidiablo, Ceballwiki,
Centeno, Chabacano, Chiro79, ColdWind, Comae, Ctrl Z, Cucaracha, DMG, Delphidius, Dem, Diegatxo, Diego.souto, DiegoBM, Diegusjaimes, Dodo, Dr. Ricardo, Drini, Dusan, Ecemaml,
Edtruji, Elproferoman, Emijrp, Er Komandante, Ermey, Especiales, Especiall, FAR, Farisori, Fev, FrancoGG, Franxiscokafran, Frurgr, Futbolero, GermanX, Greek, Guigar, Hades87, Hispa,
HodracirK, Horazzio, Humbefa, Humberto, Hctor Arnau Aparicio, Icvav, Ihavenomouth, Innv, Isha, Ivan rome, JMPerez, Javierito92, JoaquinFerrero, JorSol, JorgeGG, Jorgechp, Jorgeeie,
Joseagrc, Josemiguel93, Jpcristian, Jstitch, Jugones55, Julioserrano, Jvlivs, Jynus, Kenshin 85, Koko10ar, Kraft, Lic. Armando, Locovich, Lourdes Cardenal, Lucien leGrey, Luis.bernal, Malfer,
ManuelGR, Mariano.iglesias, Matdrodes, MatiasBellone, Mdiagom, Moonmaryhawke, Moriel, Mpadilla, Muro de Aguas, Mximo de Montemar, NaSz, Netito777, Nicolapedia, Niqueco,
Numbo3, Obelix83, Ocaso, Orgullomoore, Paintman, Pirenne, Piztu, Platonides, PoLuX124, ProfesorFalken, Prugo, Pybalo, Qwertyytrewqqwerty, Racso, Rafael Morais, Rbuj, Ricardo
Moctezuma, Roberpl, Roberto Blandino C, Rodrigo.paillan, Rojoblandino, RoyFocker, Rsg, Sabbut, Saloca, Sanbec, Sanmiladsl, Sauron, Sbassi, Sergio Yinyang, SergioVares, Shooke, Sirpuppet,
Sixtop, Snakefang, Speedplus, Sucoplus, Superzerocool, Tano4595, Thr41N, Toad32767, Tomatejc, Torturo, Txo, Uncorreotemporal, Unf, Vatelys, Vitamine, Waeswaes, Whibla, Yakoo,
Yrithinnd, Zeos, Zorosandro, 472 ediciones annimas

Fuentes de imagen, Licencias y contribuyentes


Archivo:Ambox scales.svg Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Ambox_scales.svg Licencia: Public Domain Contribuyentes: User:Penubag, User:Tkgd2007
Image:Wikibooks-logo.svg Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Wikibooks-logo.svg Licencia: logo Contribuyentes: User:Bastique, User:Ramac

Licencia
Creative Commons Attribution-Share Alike 3.0 Unported
http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/

Potrebbero piacerti anche