Sei sulla pagina 1di 15

Java (lenguaje de programacin)

Java es un lenguaje de programacin de propsito general, concurrente, orientado a objetos que fue diseado especcamente 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 especicaciones 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 Duke, la mascota de Java
Compilador de Java de GNU y el GNU Classpath.
comercial registrada para adaptadores de tarjetas grcas
y nalmente se renombr a Java.

Historia

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 Ho, 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 teo-

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 ocina de Gosling), luego pas a denominarse Green tras descubrir que Oak era ya una marca
1

HISTORIA

ras, el nombre fue sacado al parecer de una lista aleatoria


de palabras.[3]

una reestructuracin intensiva del modelo de


eventos AWT (Abstract Windowing Toolkit)

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.

clases internas (inner classes)

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 Cientco 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. 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
Specication Requests (JSRs) para proponer y especicar
cambios en la plataforma Java. El lenguaje en s mismo
est especicado en la Java Language Specication (JLS),
o Especicacin 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

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
reexin en la programacin
la API grca ( 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

3
Palabra reservada assert (Especicado 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) (Especicado en JSR 51.)
Logging API (Specied 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) (Especicado en JSR 5 y JSR 63.)
Seguridad integrada y extensiones criptogrcas (JCE, JSSE, JAAS)
Java Web Start incluido (El primer lanzamiento ocurri en marzo de 2001 para J2SE 1.3)
(Especicado en JSR 56.)
J2SE 5.0 (30 de septiembre de 2004) Nombre
clave: Tiger. (Originalmente numerado 1.5, esta notacin an es usada internamente.) Desarrollado bajo JSR 176, Tiger aadi un nmero signicativo 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).
(Especicado 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. (Especicado por JSR 175.)
Autoboxing/unboxing Conversiones automticas entre tipos primitivos (Como los int) y
clases de envoltura primitivas (Como Integer).
(Especicado 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). (Especicado 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.
(Especicado 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.. 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 especicaciones para
Servicios Web, como JAX-WS 2.0, JAXB 2.0,
STAX y JAXP.
Mejoras en la interfaz grca y en el rendimiento.
Java SE 7 Nombre clave Dolphin. En el ao
2006 an se encontraba en las primeras etapas de
planicacin. 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 ociales:
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.

2 FILOSOFA

Java SE 8 lanzada en marzo de 2014. Cabe des- sobre los mismos, o viceversa. Esta separacin en objetacar:
tos coherentes e independientes ofrece una base ms estable para el diseo de un sistema software. El objetivo
Incorpora de forma completa la librera Ja- es hacer que grandes proyectos sean fciles de gestionar
vaFX.
y manejar, mejorando como consecuencia su calidad y
Diferentes mejoras en seguridad.
reduciendo el nmero de proyectos fallidos. Otra de las
grandes promesas de la programacin orientada a obje Diferentes mejoras en concurrencia.
tos es la creacin de entidades ms genricas (objetos)
Aade funcionalidad para programacin funque permitan la reutilizacin del software entre proyeccional mediante expresiones Lambda.
tos, una de las premisas fundamentales de la Ingeniera
Mejora la integracin de JavaScript.
del Software. Un objeto genrico cliente, por ejemplo,
Nuevas API para manejo de fechas y tiempo debera en teora tener el mismo conjunto de comportamiento en diferentes proyectos, sobre todo cuando es(date - time).
tos coinciden en cierta medida, algo que suele suceder en
En el 2005 se calcula en 4,5 millones el nmero de desa- las grandes organizaciones. En este sentido, los objetos
rrolladores y 2.500 millones de dispositivos habilitados podran verse como piezas reutilizables que pueden emplearse en mltiples proyectos distintos, posibilitando as
con tecnologa Java.
a la industria del software a construir proyectos de envergadura empleando componentes ya existentes y de comprobada calidad; conduciendo esto nalmente a una re2 Filosofa
duccin drstica del tiempo de desarrollo. Podemos usar
como ejemplo de objeto el aluminio. Una vez denidos
El lenguaje Java se cre con cinco objetivos principales: datos (peso, maleabilidad, etc.), y su comportamiento
(soldar dos piezas, etc.), el objeto aluminio puede ser
1. Debera usar el paradigma de la programacin reutilizado en el campo de la construccin, del automvil,
de la aviacin, etc.
orientada a objetos.
2. Debera permitir la ejecucin de un mismo progra- La reutilizacin del software ha experimentado resultados dispares, encontrando dos dicultades principales:
ma en mltiples sistemas operativos.
el diseo de objetos realmente genricos es pobremen3. Debera incluir por defecto soporte para trabajo en te comprendido, y falta una metodologa para la amplia
red.
comunicacin de oportunidades de reutilizacin. Algunas
comunidades de cdigo abierto (open source) quieren
4. Debera disearse para ejecutar cdigo en sistemas
ayudar en este problema dando medios a los desarrollaremotos de forma segura.
dores para diseminar la informacin sobre el uso y versa5. Debera ser fcil de usar y tomar lo mejor de otros tilidad de objetos reutilizables y bibliotecas de objetos.
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.

2.1

Orientado a objetos

La primera caracterstica, orientado a objetos (OO), se


reere 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

2.2 Independencia de la plataforma


La segunda caracterstica, la independencia de la plataforma, signica que programas escritos en el lenguaje
Java pueden ejecutarse igualmente en cualquier tipo de
hardware. Este es el signicado 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
(especcamente Java bytecode)instrucciones mquina
simplicadas especcas 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 grcos, ejecucin mediante hebras

2.3

El recolector de basura

o threads, la interfaz de red) de forma unicada. 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).

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

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.
El concepto de independencia de la plataforma de Java
La licencia sobre Java de Sun insiste que todas las im- cuenta, sin embargo, con un gran xito en las aplicaciones
plementaciones sean compatibles. Esto dio lugar a una en el entorno del servidor, como los Servicios Web, los
disputa legal entre Microsoft y Sun, cuando ste ltimo Servlets, los Java Beans, as como en sistemas empotrados
aleg que la implementacin de Microsoft no daba sopor- basados en OSGi, usando entornos Java empotrados.
te 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 sosticadas 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.

2.3 El 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 necesarioses decir,
pueden an ocurrir, pero en un nivel conceptual superior.
En denitiva, el recolector de basura de Java permite una
fcil creacin y eliminacin de objetos y mayor seguridad.

3 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).
3.0.1 Aplicaciones autnomas
Este ejemplo necesita una pequea explicacin.
Todo en Java est dentro de una clase, incluyendo
programas autnomos.

3 SINTAXIS
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 chero Hola.java

// 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>
El compilador genera un archivo de clase (con ex- </body> </html>
tensin .class) por cada una de las clases denidas
en el archivo fuente. Una clase annima se trata como si su nombre fuera la concatenacin del nombre Actualmente HTML 5 ha eliminado el uso de la etiquede la clase que la encierra, el smbolo $, y un n- ta <applet>. Pero todava existe la forma de usarlo en
HTML5. (Texto en ingls) Java Applets in HTML5.
mero entero.
La sentencia import indica al compilador de Java que in Los programas que se ejecutan de forma inde- cluya las clases java.applet. Applet y java.awt. Grappendiente y autnoma, deben contener el mtodo hics, para poder referenciarlas por sus nombres, sin tener
main().
que anteponer la ruta completa cada vez que se quieran
La palabra reservada void indica que el mtodo usar en el cdigo fuente.
main no devuelve nada.
La clase Hola extiende (extends) a la clase Applet, es decir, es una subclase de sta. La clase Applet permite a
El mtodo main debe aceptar un array de objetos la aplicacin mostrar y controlar el estado del applet. La
tipo String. Por acuerdo se referencia como args, clase Applet es un componente del AWT (Abstract Winaunque puede emplearse cualquier otro identica- dow Toolkit), que permite al applet mostrar una interfaz
dor.
grca de usuario o GUI (Graphical User Interface), y
responder a eventos generados por el usuario.
La palabra reservada static indica que el mtodo
La clase Hola sobrecarga el mtodo paint (Graphics)
es un mtodo de clase, asociado a la clase en vez de
heredado de la superclase contenedora (Applet en este
a una instancia de la misma. El mtodo main debe
caso), para acceder al cdigo encargado de dibujar. El
ser esttico o de clase.
mtodo paint() recibe un objeto Graphics que contie La palabra reservada public signica que un mtodo ne el contexto grco para dibujar el applet. El mtodo
puede ser llamado desde otras clases, o que la clase paint() llama al mtodo drawString (String, int, int) del
puede ser usada por clases fuera de la jerarqua de objeto
la propia clase. Otros tipos de acceso son private
o protected.
3.0.3 Servlets
La utilidad de impresin (en pantalla por ejemplo)
forma parte de la biblioteca estndar de Java: la clase Los servlets son componentes de la parte del servidor de
System dene un campo pblico esttico llama- Java EE, encargados de generar respuestas a las peticiones
do out. El objeto out es una instancia de Prin- recibidas de los clientes.
tStream, que ofrece el mtodo println (String)
para volcar datos en la pantalla (la salida estndar). // Hola.java import java.io.IOException; import javax.servlet.*; public class Hola extends GenericServlet {
public void service(ServletRequest request, ServletRes Las aplicaciones autnomas se ejecutan dando al enponse response) throws ServletException, IOException
torno de ejecucin de Java el nombre de la clase cuyo
{ response.setContentType(text/html); PrintWriter
mtodo main debe invocarse. Por ejemplo, una lnea
pw = response.getWriter(); pw.println(Hola, mundo!");
de comando (en Unix o Windows) de la forma java
pw.close(); } }
cp . Hola ejecutar el programa del ejemplo (previamente compilado y generado Hola.class). El nombre de la clase cuyo mtodo main se llama puede es- Las sentencias import indican al compilador de Java la
pecicarse tambin en el chero MANIFEST del inclusin de todas las clases pblicas e interfaces de los
paquetes java.io y javax.servlet en la compilacin.
archivo de empaquetamiento de Java (.jar).
La clase Hola extiende (extends), es heredera de la clase
GenericServlet. Esta clase proporciona la interfaz para
3.0.2 Applets
que el servidor le pase las peticiones al servlet y el mecaLas applet Java son programas incrustados en otras apli- nismo para controlar el ciclo de vida del servlet.
caciones, normalmente una pgina Web que se muestra La clase Hola sobrecarga el mtodo service (ServletReen un navegador.
quest, ServletResponse), denido por la interfaz ser-

7
vlet 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.

jado, 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.

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 nalmente se llama al mtodo close() para cerrar la conexin,
que hace que los datos escritos en la tubera o stream
sean devueltos al cliente.

4 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.

4.1 En dispositivos mviles y sistemas embebidos

Desde la creacin de la especicacin J2ME (Java 2 Platform, Micro Edition), una versin del entorno de ejecu3.0.4 Aplicaciones con ventanas
cin Java reducido y altamente optimizado, especialmente desarrollado para el mercado de dispositivos electrniSwing es la biblioteca para la interfaz grca de usuario
cos de consumo se ha producido toda una revolucin en
avanzada de la plataforma Java SE.
lo que a la extensin de Java se reere.
// Hola.java import javax.swing.*; public class Hola
Es posible encontrar microprocesadores diseados paextends JFrame { Hola() { setDefaultCloseOpera ejecutar bytecode Java y software Java para tarjetas
ration(WindowConstants.DISPOSE_ON_CLOSE);
inteligentes (JavaCard), telfonos mviles, buscapersoadd(new JLabel(Hola, mundo!")); pack(); } public stanas, set-top-boxes, sintonizadores de TV y otros pequetic void main(String[] args) { new Hola().setVisible(true);
os electrodomsticos.
}}
El modelo de desarrollo de estas aplicaciones es muy semejante a las applets de los navegadores salvo que en este
Las instrucciones import indican al compilador de Java
caso se denominan MIDlets.
que las clases e interfaces del paquete javax.swing se inVase Sun Mobile Device Tecnology
cluyan en la compilacin.
La clase Hola extiende (extends) la clase javax.swing.JFrame, que implementa una ventana 4.2
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 dibu-

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 congurada como extensin (plug-in) en
un contexto de seguridad restringido congurable 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 especcos para la intermediacin desde una aplica-

PROGRAMACIN

cin web dinmica de servidor con dispositivos ubicados 4.4 En aplicaciones de escritorio
en la mquina cliente donde se ejecuta el navegador.
Las applets Java no son las nicas tecnologas (aunque Hoy en da existen multitud de aplicaciones grcas de
s las primeras) de componentes complejos incrustados usuario basadas en Java. El entorno de ejecucin Java
en el navegador. Otras tecnologas similares pueden ser: (JRE) se ha convertido en un componente habitual en los
PC de usuario de los sistemas operativos ms usados en
ActiveX de Microsoft, Flash, Java Web Start, etc.
el mundo. Adems, muchas aplicaciones Java lo incluyen
dentro del propio paquete de la aplicacin de modo que
se ejecuten en cualquier PC.
4.3 En sistemas de servidor
En las primeras versiones de la plataforma Java existan
En la parte del servidor, Java es ms popular que nunca, importantes limitaciones en las APIs de desarrollo grdesde la aparicin de la especicacin de Servlets y JSP co (AWT). Desde la aparicin de la biblioteca Swing la
(Java Server Pages).
situacin mejor substancialmente y posteriormente con
Hasta entonces, las aplicaciones web dinmicas de servi- la aparicin de bibliotecas como SWT hacen que el desador que existan se basaban fundamentalmente en com- rrollo de aplicaciones de escritorio complejas y con gran
ponentes CGI y lenguajes interpretados. Ambos tenan dinamismo, usabilidad, etc. sea relativamente sencillo.
diversos inconvenientes (fundamentalmente lentitud, elevada carga computacional o de memoria y propensin a
4.5 Plataformas soportadas
errores por su interpretacin dinmica).
Los servlets y las JSPs supusieron un importante avance Una versin del entorno de ejecucin Java JRE (Java Runya que:
time Environment) est disponible en la mayora de equipos de escritorio. Sin embargo, Microsoft no lo ha inclui El API de programacin es muy sencilla, exible y do por defecto en sus sistemas operativos. En el caso de
extensible.
Apple, ste incluye una versin propia del JRE en su sistema operativo, el Mac OS. Tambin es un producto que
Los servlets no son procesos independientes (como por defecto aparece en la mayora de las distribuciones de
los CGIs) y por tanto se ejecutan dentro del mis- GNU/Linux. Debido a incompatibilidades entre distintas
mo proceso que la JVM mejorando notablemente el versiones del JRE, muchas aplicaciones preeren instalar
rendimiento y reduciendo la carga computacional y su propia copia del JRE antes que conar su suerte a la
aplicacin instalada por defecto. Los desarrolladores de
de memoria requeridas.
applets de Java o bien deben insistir a los usuarios en la
Las JSPs son pginas que se compilan dinmica- actualizacin del JRE, o bien desarrollar bajo una versin
mente (o se pre-compilan previamente a su distri- antigua de Java y vericar el correcto funcionamiento en
bucin) de modo que el cdigo que se consigue una las versiones posteriores.
ventaja en rendimiento substancial frente a muchos
lenguajes interpretados.

5 Programacin

La especicacin de Servlets y JSPs dene 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 especicaciones.

5.1 Expresiones

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
A partir de su expansin entre la comunidad de desa- programa que es signicativo, e interpretado o entendido
rrolladores, estas tecnologas han dado paso a modelos por el compilador, en java los tokens se dividen en cinco
de desarrollo mucho ms elaborados con frameworks (pe categoras que son:
Struts, Webwork) que se sobreponen sobre los servlets y Identicadores: Son las representaciones que se les da a
las JSPs para conseguir un entorno de trabajo mucho ms los nombres que se asignan a las variables, clases, paquepoderoso y segmentado en el que la especializacin de ro- tes, mtodos y constantes en el cdigo de java para que el
les sea posible (desarrolladores, diseadores grcos,...) compilador los identique y el programador pueda enteny se facilite la reutilizacin y robustez de cdigo. A pe- derlos. En java los identicadores pueden diferenciar ensar de todo ello, las tecnologas que subyacen (Servlets y tre maysculas o minsculas por ser case sensitive, por lo
JSPs) son substancialmente las mismas.
que la variable cuyo nombre sea Mivariable, no es igual
Este modelo de trabajo se ha convertido en uno de los a mivariable, ya que java identica estas como variables
estndar de-facto para el desarrollo de aplicaciones web diferentes por el case sensitive, tambin se puede utilizar
dinmicas de servidor.
nmeros, o el signo _ para asignar un identicador.

5.3

Precedencia de operadores

Palabras claves: Son los identicadores reservados por


java para cumplir con un objetivo especco en el cdigo y el compilador, se usan de forma limitada y en casos
especcos. Las palabras claves que usa java son las siguientes:

9
~ 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


Las palabras que se encuentran en negrilla, son palabras 1 a 0.
claves para java aunque actualmente no se utilicen en la
versin de java, pero se pretenden integrar en las siguien- & AND a nivel de bit, este operador realiza una operacin
AND o suma entre dos nmeros de bit, en donde si dos
tes versiones de java.
bit son igual a 1 el resultado ser 1, de lo contrario ser 0,
Literales y constantes: Los literales son sintaxis para asig- un ejemplo puede ser:
nar valores a una variable, es decir el valor que puede tomar una variable, tambin es un valor constante que pue- situacion 01001101 & 10011011 ______________
de ser de tipo numrico. Las constantes son variables que 00001001
tienen un valor jo y no puede ser modicado en el tras- | Or a nivel de bit, este operador realiza una operacin OR
curso de la ejecucin del cdigo, estas se declaran por en donde si alguno de los dos nmeros es 1 el resultado
medio de los modicadores nal y static.
ser 1, un ejemplo puede ser:
nal static double pi= 3.1416;
11001101 | 01011101 ______________ 11011101
^ XOR a nivel de bit, este operador realiza la operacin
Operadores: Son los que nos indican una evaluacin que XOR en donde si los dos nmeros son iguales el resultado
se aplica a un objeto o un dato, sobre un identicador o ser 0 de lo contrario ser 1, un ejemplo puede ser:
constante. Un ejemplo de operadores puede ser la suma,
00101001 ^ 01101101 ______________ 01000100
resta o multiplicacin.
Separadores: Se utilizan para indicarle al compilador de << Desplazamiento a la izquierda, este operador desplaza
java donde se ubican los elementos del cdigo, los sepa- n cantidad de espacios a la izquierda un bit, un ejemplo
puede ser;
radores que admite java son: { },:;
Tambin el compilador de java identica y elimina los co- 01101110 01101110 << 2 = 11011100
mentarios, retornos de carros espacios vacos y de tabula- Como se puede ver al realizar el desplazamiento se realiza
cin a la hora de compilar por lo que no son considerados una insercin de un dgito 0 a la derecha
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 ujo del programa.

5.2

Operadores

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.
Operadores binarios.

5.2.1

Operadores a nivel de bit

5.3 Precedencia de operadores


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.

Los operadores a nivel de bit nos permiten realizar ope- Precedencia de los operadores en java.
raciones sobre nmeros binarios.
Un ejemplo de la precedencia de los operadores en java

10

PROGRAMACIN

podra ser el siguiente, en donde tenemos un cdigo que operaciones necesarias sobre el valor que se desea conse encargar de realizar una serie de operaciones aritm- vertir. Se debe tener en cuenta el tipo de dato que se va
ticas.
a convertir, ya que si se convierte un dato que tenga una
int numero1 = 3; int numero2 = 4; int resultado; re- cantidad menor de bit al anterior este tendr perdida de
sultado = numero1 + numero2 * 3; System.out.println informacin, un ejemplo de tipado puede ser un nmero
long que se desea convertir a int, el compilador eliminara
(resultado); //esto imprime el valor de 15
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
segn la precedencia de los operadores la multiplicacin a un tipo de datos de menos bit a un tipo de datos con
* tiene mayor prioridad que la suma +, por lo que primero mayor bit, la conversin se realiza automticamente llase ejecuta la multiplicacin y luego se realiza la suma.
mada conversin implcita, pero si se realiza de un tipo
int numero1 = 3; int numero2 = 4; int resultado; resul- de datos con mayor bit a menor bit se tiene que realizar
tado = (numero1 + numero2) * 3; System.out.println una conversin explcita, la cual se realiza con un casting,
al usar este mtodo se obliga a realizar la conversin por
(resultado); //esto imprime el valor de 21
lo cual puede haber perdida de datos en la conversin.
Para realizar una conversin explcita se tiene que poner
En este caso el resultado cambia ya que primero se eva- el tipo de dato que se desea realizar la conversin entre
lan los parmetros que estn dentro del parntesis y lue- parntesis, luego el valor o la variable que se desea congo se evala el resto de parmetros. Una de las recomen- vertir. Un ejemplo de conversin de tipo explcito puede
daciones que da java para el desarrollo es el uso de los ser:
parntesis en las operaciones con ms de 3 operandos,
as de esta forma el cdigo se hace ms legible y se evi- Int numero1 = 32; byte numero2; numero2 = (byte)
numero1;
tan errores al momento de compilar.

5.4

Sentencias

Las sentencias son una representacin de una secuencia


de acciones que se realizan en java, la clave fundamental
de las sentencias es su punto nal que indica que ha nalizado 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;

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.
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:

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
denir el ujo de ejecucin del programa, entre ellas tenemos if-else 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 especco del programa
o hacia la siguiente sentencia de ejecucin, entre ellas te- int numero1; long numero2; byte numero3; String texto=
2013; numero1 = Integer.parseInt ( texto ); numero2
nemos break, continue, y return.
= Long.parseLong ( texto); numero3 = Byte.parseByte (
texto );
5.4.1 Conversin de tipos

esto suele ser usado para realizar una conversin de texto


En algunos casos suele ser necesario convertir un tipo de cuando se ingresan valores numricos por una entrada a
dato a otro, esto se le conoce como conversin de tipos, java, la cual los detecta como string, as de esta forma
modelado, o tipado, as de esta forma poder realizar las

7.2

El lenguaje

11

puede convertir el texto que se ingresa a un nmero para 7.2 El lenguaje


realizar operaciones, como una calculadora.
En un sentido estricto, Java no es un lenguaje absolutamente orientado a objetos, a diferencia de, por
ejemplo, Ruby o Smalltalk. Por motivos de ecien6 Industria relacionada
cia, Java ha relajado en cierta medida el paradigma
de orientacin a objetos, y as por ejemplo, no todos
los valores son objetos.
Sun Microsystem, como creador del lenguaje de programacin Java y de la plataforma JDK, mantiene fuertes
El cdigo Java puede ser a veces redundante en compolticas para mantener una especicacin del lenguaje[5]
[6]
paracin con otros lenguajes. Esto es en parte debias como de la mquina virtual a travs del JCP. Es dedo a las frecuentes declaraciones de tipos y converbido a este esfuerzo que se mantiene un estndar de facto.
siones de tipo manual (casting). Tambin se debe a
Son innumerables las compaas que desarrollan aplicaque no se dispone de operadores sobrecargados, y
ciones para Java y/o estn volcadas con esta tecnologa:
a una sintaxis relativamente simple. Sin embargo,
J2SE 5.0 introduce elementos para tratar de reducir
la redundancia, como una nueva construccin para
La industria de la telefona mvil est fuertemente
los bucles foreach.
inuenciada 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.

A diferencia de C++, Java no dispone de operadores de sobrecarga denidos 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.

7.3 Apariencia

IBM, BEA, IONA, Oracle,... son empresas con


grandes intereses y productos creados en y para JaLa apariencia externa (el look and feel) de las apliva.
caciones GUI (Graphical User Interface) escritas en Java usando la plataforma Swing diere a menudo de la
que muestran aplicaciones nativas. Aunque el programador puede usar el juego de herramientas AWT (Abstract
7 Crticas
Windowing Toolkit) que genera objetos grcos de la
plataforma nativa, el AWT no es capaz de funciones grEn 1995 alguien dijo que Java fue creado para abrir una
cas avanzadas sin sacricar la portabilidad entre platanueva va en la gestin de software complejo, y es por
formas; ya que cada una tiene un conjunto de APIs distinregla general aceptado que se ha comportado bien en ese
to, especialmente para objetos grcos de alto nivel. Las
aspecto. Sin embargo no puede decirse que Java no tenherramientas de Swing, escritas completamente en Java,
ga grietas, ni que se adapta completamente a todos los
evitan este problema construyendo los objetos grcos a
estilos de programacin, todos los entornos, o todas las
partir de los mecanismos de dibujo bsicos que deben esnecesidades.
tar 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
7.1 General
(usando GTK+ y el Look-and-Feel de Windows), la mayora de los usuarios no saben cmo cambiar la apariencia
Java no ha aportado capacidades estndares para que se proporciona por defecto por aquella que se adapta
aritmtica en punto otante. El estndar IEEE 754 a la de la plataforma.
para Estndar para Aritmtica Binaria en Punto
Flotante apareci en 1985, y desde entonces es el
estndar para la industria. Y aunque la aritmtica 7.4 Rendimiento
otante de Java (cosa que cambi desde el 13 de noviembre de 2006, cuando se abri el cdigo fuente El bytecode de Java puede ser interpretado en tiempo de
y se adopt la licencia GPL, aparte de la ya exis- ejecucin por la mquina virtual, o bien compilado al cartente)[cita requerida] se basa en gran medida en la nor- garse el programa, o durante la propia ejecucin, para gema del IEEE, no soporta an algunas caractersticas. nerar cdigo nativo que se ejecuta directamente sobre el
Ms informacin al respecto puede encontrarse en la hardware. Si es interpretado, ser ms lento que usando el
seccin nal de enlaces externos.
cdigo mquina intrnseco de la plataforma destino. Si es

12

RECURSOS

compilado, durante la carga inicial o la ejecucin, la pe- bin obtenerse como un paquete independiente, y puede
nalizacin est en el tiempo necesario para llevar a cabo considerarse como el entorno necesario para ejecutar una
la compilacin.
aplicacin Java, mientras que un desarrollador debe adeAlgunas caractersticas del propio lenguaje conllevan una ms contar con otras facilidades que ofrece el JDK.
penalizacin en tiempo, aunque no son nicas de Java.
Algunas de ellas son el chequeo de los lmites de arrays,
8.2 Componentes
chequeo en tiempo de ejecucin de tipos, y la indireccin
de funciones virtuales.
Bibliotecas de Java, que son el resultado de compilar
el cdigo fuente desarrollado por quien implementa
El uso de un recolector de basura para eliminar de forma
la JRE, y que ofrecen apoyo para el desarrollo en
automtica aquellos objetos no requeridos, aade una soJava. Algunos ejemplos de estas bibliotecas son:
brecarga que puede afectar al rendimiento, o ser apenas
apreciable, dependiendo de la tecnologa del recolector y
Las bibliotecas centrales, que incluyen:
de la aplicacin en concreto. Las JVM modernas usan recolectores de basura que gracias a rpidos algoritmos de
Una coleccin de bibliotecas para implemanejo de memoria, consiguen que algunas aplicaciones
mentar estructuras de datos como listas,
puedan ejecutarse ms ecientemente.
arrays, rboles y conjuntos.

Bibliotecas para anlisis de XML.


El rendimiento entre un compilador JIT y los compiladores nativos puede ser parecido, aunque la distincin no
Seguridad.
est clara en este punto. La compilacin mediante el JIT
Bibliotecas de internacionalizacin y lopuede consumir un tiempo apreciable, un inconveniencalizacin.
te principalmente para aplicaciones de corta duracin o
Bibliotecas de integracin, que permiten la cocon gran cantidad de cdigo. Sin embargo, una vez communicacin con sistemas externos. Estas bipilado, el rendimiento del programa puede ser comparabliotecas incluyen:
ble al que consiguen compiladores nativos de la platafor La API para acceso a bases de datos
ma destino, inclusive en tareas numricas. Aunque Java
JDBC (Java DataBase Conectivity).
no permite la expansin manual de llamadas a mtodos,
muchos compiladores JIT realizan esta optimizacin du La interfaz JNDI (Java Naming and Dirante la carga de la aplicacin y pueden aprovechar inrectory Interface) para servicios de direcformacin del entorno en tiempo de ejecucin para lletorio.
var a cabo transformaciones ecientes durante la propia
RMI (Remote Method Invocation) y
ejecucin de la aplicacin. Esta recompilacin dinmica,
CORBA para el desarrollo de aplicaciocomo la que proporciona la mquina virtual HotSpot de
nes distribuidas.
Sun, puede llegar a mejorar el resultado de compiladores
Bibliotecas para la interfaz de usuario, que inestticos tradicionales, gracias a los datos que slo estn
cluyen:
disponibles durante el tiempo de ejecucin.
El conjunto de herramientas nativas
Java fue diseado para ofrecer seguridad y portabilidad,
AWT (Abstract Window Toolkit), que
y no ofrece acceso directo al hardware de la arquitectura
ofrece componentes GUI (Graphical
ni al espacio de direcciones. Java no soporta expansin
User Interface), mecanismos para usarlos
de cdigo ensamblador, aunque las aplicaciones pueden
y manejar sus eventos asociados.
acceder a caractersticas de bajo nivel usando bibliotecas
Las Bibliotecas de Swing, construidas sonativas (JNI, Java Native Interfaces).
bre AWT pero ofrecen implementaciones
no nativas de los componentes de AWT.
APIs para la captura, procesamiento y re8 Recursos
produccin de audio.

8.1

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 nal 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 tam-

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.

9.1

8.3

Alternativas libres

APIs

13
mandaba desde hace tiempo la liberacin de las APIs y
bibliotecas bsicas de la JDK.

Sun dene tres plataformas en un intento por cubrir disEn diciembre de 2006, Sun Microsystems comenz el retintos entornos de aplicacin. As, ha distribuido muchas
lanzamiento de su plataforma Java[8] bajo la licencia GPL
de sus APIs (Application Program Interface) de forma
de GNU.
que pertenezcan a cada una de las plataformas:
En abril de 2009 Oracle adquiri Sun Microsystems, lo
que gener temor en la comunidad ante la posible mer Java ME (Java Platform, Micro Edition) o J2ME
cantilizacin del lenguaje de programacin orientado a
orientada a entornos de limitados recursos, como teobjetos ms popular actualmente. Por ahora Oracle ha
lfonos mviles, PDAs (Personal Digital Assistant),
seguido manteniendo Java, estando las versiones posteetc.
riores a la 6 bajo su control.
Java SE (Java Platform, Standard Edition) o J2SE Se instala una versin homebrew de PSPKVM (0.5.5) pa para entornos de gama media y estaciones de tra- ra emular la plataforma de Java en PSP. Esto permite usar
bajo. Aqu se sita al usuario medio en un PC de programas JAVA en esta videoconsola.
escritorio.
Java EE (Java Platform, Enterprise Edition) o J2EE
orientada a entornos distribuidos empresariales o
de Internet.

9.1 Alternativas libres

Existen alternativas para el entorno de ejecucin y de


desarrollo de Java con una gran cobertura de funcionaLas clases en las APIs de Java se organizan en grupos dis- lidades con respecto a las implementaciones comerciales
juntos llamados paquetes. Cada paquete contiene un con- de Sun, IBM, Bea, etc.
junto de interfaces, clases y excepciones relacionadas. La
informacin sobre los paquetes que ofrece cada platafor9.2 Crticas referentes a Java y el software
ma 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 inuir de
forma activa en el diseo y desarrollo de las APIs, algo
que ha sido motivo de controversia.

8.4

Extensiones y arquitecturas relacionadas

libre
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)

Las extensiones[7] de Java estn en paquetes que cuelgan


de la raz javax: javax.*. No se incluyen en la JDK o el Notar que este artculo fue escrito antes de la liberacin
JRE. Algunas de las extensiones y arquitecturas ligadas del cdigo fuente de Java. En la actualidad la postura de
la Free Software Foundation y de Richard Stallman han
estrechamente al lenguaje Java son:
cambiado[cita requerida] , mostrndose partidarios ambos de
su uso en software libre.
Java EE (Java Platform, Enterprise Edition; antes
J2EE) para aplicaciones distribuidas orientadas al
entorno empresarial

10 Vase tambin

Java en cdigo abierto

Applet Java
Drupal

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 suciente y la comunidad de-

JavaOne
JavaOS
Javapedia
Java Community Process
Java User Group

14

13 ENLACES EXTERNOS

Mquina virtual Java


OpenJDK
Plataforma Java

11

Referencias

Jon Byous, Java technology: The early years. Sun


Developer Network, sin fecha[ca. 1998]. Recuperado 21 de abril de 2005.

13.1 Oracle - Sun


Sitio ocial de Java para desarrolladores, etc
The Java Language Specication, Tercera edicin
Especicacin ocial del lenguaje Java
Tutorial de Sun sobre el Lenguaje de programacin
Java
Libro blanco original de Java, 1996

James Gosling, A brief history of the Green project. 13.2 Tutoriales


Java.net, sin fecha [ca. Q1/1998]. Recuperado 22
abril de 2005.
Thinking in Java, de Bruce Eckel (online)
James Gosling, Bill Joy, Guy Steele, y Gilad Bracha, The Java language specication, tercera edicin. Addison-Wesley, 2005. ISBN 0-321-24678-0.
Tim Lindholm y Frank Yellin. The Java Virtual
Machine specication, segunda edicin. AddisonWesley, 1999. ISBN 0-201-43294-3.

12

Notas

[1] Programming Language Popularity. 2009. Consultado


el 16 de enero de 2009.
[2] TIOBE Programming Community Index. 2009. Consultado el 6 de mayo de 2009.
[3] Jonathan Schwartzs Blog: Dierent Isn't Always Better,
But Betters Always Dierent. Blogs.sun.com. Consultado el 24 de septiembre de 2010.
[4] M. Domnguez-Dorado,. Todo Programacin. N 8. Pgs.
39-42. Editorial Iberprensa (Madrid). DL M-136792004. Febrero, 2005. Dibujando sobre lienzos en Java.
[5] Especicacin del lenguaje Java
[6] Especicacin de la mquina virtual Java
[7] M. Domnguez-Dorado, Guillermo Som. Todo Programacin. N 11. Pgs. 10-20. Editorial Iberprensa (Madrid).
DL M-13679-2004. Agosto, 2005. Imprimir desde Java y
.NET.
[8] Sun begins releasing Java under the GPL - Free Software
Foundation

13

Enlaces externos

Wikilibros

Wikilibros alberga un libro o manual sobre


Programacin en Java.

Programas hechos en java con cdigo fuente


Recopilacin de cdigos fuente en java

An introduction to Computer Science using Java por


Bradley Kjell.
Java Course, de A.B. Downey.
Computer-Books.us Coleccin de libros sobre Java
disponibles para descarga gratuita.
En castellano:
VideoTutoriales para aprender desde cero
Empieza a Programar
Coleccin Java a tope de libros electrnicos
(Universidad de Mlaga. Espaa)
Curso de Java, de cero a hasta conexin a
MYSQL, incluye PDF (Mxico)
Curso de java que sigue el ndice del libro de
java de Kathy Sierra, contiene PDFs y ejercicios (Mxico)
Capacitacin en Java sobre Grandes Proyectos
Aprender programacin Java desde cero (Portal web aprenderaprogramar.com, on-line y en
formato pdf)
Que es Java? (SoftMAS el blog para aprender
a programar).

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

15

14
14.1

Origen del texto y las imgenes, colaboradores y licencias


Texto

Java (lenguaje de programacin) Fuente: https://es.wikipedia.org/wiki/Java_(lenguaje_de_programaci%C3%B3n)?oldid=85639526


Colaboradores: Centeno, Oblongo, Sabbut, Moriel, Abgenis, Sauron, JorgeGG, Lourdes Cardenal, ManuelGR, Robbot, Guigar~eswiki,
Angus, Mdiagom, Sanbec, Zwobot, Pirenne~eswiki, Comae, Zorosandro, Dodo, Pybalo, Jynus, Ascnder, Rsg, Ihavenomouth, Tano4595,
Yakoo, Elproferoman, Hctor Arnau Aparicio, Aalku, Toad32767, Julioserrano, Balderai, Ecemaml, MatiasBellone, Niqueco, FAR, LeonardoRob0t, Jorgeeie, SergioVares, Boticario, Orgullomoore, DMG, Especiall~eswiki, Hispa, JMPerez, Yrithinnd, Emijrp, Rembiapo
pohyiete (bot), Zeos, Edtruji, Sbassi, Magister Mathematicae, Dem, Orgullobot~eswiki, RobotQuistnix, Thr41N, Platonides, Unf, Superzerocool, Chobot, Caiserbot, Yrbot, Amads, BOT-Superzerocool, Adrruiz, Vitamine, Palmerabollo, Mortadelo2005, Icvav, GermanX,
KnightRider, Sixtop, Cucaracha, C-3POrao, Jesuja, Txo, Bizkaino, Kenshin 85, Kepler Oort, Er Komandante, Mpadilla, Tomatejc, Jarke, Uncorreotemporal, Paintman, Sucoplus, JorSol, Axxgreazz, Jorgechp, Kraft, Ivan romero, Abrego, Futbolero, Fev, Cabanyas, Jstitch,
BOTpolicia, Qwertyytrewqqwerty, CEM-bot, Alejandrosilvestri, ARHEKI, Laura Fiorucci, Casidiablo, Chabacano, Rafael Morais, Especiales, Marianov, Baiji, Santhy, Cristianrock2, Roberpl, Mariano.iglesias, Ocaso, Aviguille, Llopis73, Montgomery, FrancoGG, Dangertn,
Thijs!bot, Javierrami, Fernandopcg, uo Martnez, Escarbot, RoyFocker, JoaquinFerrero, Locovich, TuvicBot, Isha, Bernard, JAnDbot,
Jugones55, Diego.souto, Rafa3040, Muro de Aguas, CommonsDelinker, TXiKiBoT, Wpersei, Ricardo Moctezuma, HodracirK, ColdWind,
Humberto, Netito777, NaSz, Jvlivs, Sirpuppet, Plux, Snakefang, Delphidius, AlnoktaBOT, Dusan, Cinevoro, VolkovBot, Technopat, Aliamondano, Sergio Yinyang, Matdrodes, Sanmiladsl, Synthebot, Frurgr, DJ Nietzsche, Lic. Armando, BlackBeast, Shooke, Lucien leGrey,
Vatelys, AlleborgoBot, Muro Bot, Peregring-lk, Roberto Blandino C, Rodrigo.paillan, Numbo3, Racso, BotMultichill, SieBot, Ctrl Z,
Loveless, Moonmaryhawke, Rojoblandino, Obelix83, Prugo, A. B. 10, Cousteau, Drinibot, BOTarate, Alex Buzeta, STBot~eswiki, Malfer, Greek, Ermey~eswiki, Piztu, BuenaGente, ProfesorFalken, Belb, DorganBot, Torturo, Locos epraix, Jarisleif, Javierito92, Marcecoro, MetsBot~eswiki, Luis.bernal, DragonBot, Benek~eswiki, Farisori, PixelBot, Estirabot, Eduardosalg, Stoleman, Botelln, Leonpolanco,
Hades87, Furti, Alexbot, CestBOT, Juan Mayordomo, AlfredoMorales, Dr. Ricardo, Estebancabezudo, Toolserver, Aipni-Lovrij, Mike.lifeguard, Kroji, Ceballwiki, Camilo, UA31, AVBOT, LucienBOT, MastiBot, Angel GN, NicolasAlejandro, Speedplus, Diegusjaimes,
Whibla, DumZiBoT, MelancholieBot, Linfocito B, Innv, Franxiscokafran, Morbazan, HerculeBot, Arjuno3, Saloca, Alqadim, Argentumm,
Andreasmperu, Luckas-bot, Chiro79, Nallimbot, FariBOT, Jotterbot, Joseagrc, Koko10ar, Yonidebot, Rbuj, ArthurBot, SuperBraulio13,
Diegatxo, Ortisa, Xqbot, Jkbw, Rubinbot, Josemiguel93, Ing.hllanos, FrescoBot, Nicoavn, Adryitan, Botarel, AstaBOTh15, Panderine!,
TiriBOT, TobeBot, Nicolapedia, RedBot, Kizar, Marsal20, Vubo, DixonDBot, HUBOT, Dinamik-bot, Humbefa, Tarawa1943, Waeswaes,
DiegoBM, EmausBot, Savh, ZroBot, HRoestBot, Genhuan, Grillitus, Writkas, Bettinaberries, ChuispastonBot, Solde9, Waka Waka, WikitanvirBot, Diamondland, Denis32crack, Patrias, Hiperfelix, Juancvasconez, Hugg~eswiki, Xerox 5B, Jolusafe5, MerlIwBot, KLBot2,
CsarGuti, AvicBot, Almario 7, Sebrev, Tuxiano felipe, MetroBot, Invadibot, Federicotg, Pablopv98, Jacobofandebillgates, Luigi1993ify,
Doubledragon, Amgomude, Infosalle2011, Vigilante Satan, Batman325, Minsbot, Dlorah, Vetranio, Sanderaco, Theremigue, Santga,
DLeandroc, Helmy oved, Fpelliccioni, Flashlack, RosenJax, YFdyh-bot, Cristian orioles, 2rombos, Adonaybn, Fevero, Ljfeliu, Leitoxx,
TToniii, Vale Espin, Addbot, Jaormazabal, Elmatoguevero, ConnieGB, Mario.porras33, Saburto, JacobRodrigues, Cassandra.ibarrac1,
Das MiMaMi, Csar Krall, Ememe, Reisub, Alejandro Apolinar, Rodriguezcabanzo, Alejosu, Gaaplex, Jarould, Pakwmdmmd, BenjaBot,
Keypyhh, Carlosqwerty, Manudark12, JMDartz y Annimos: 577

14.2

Imgenes

Archivo:Commons-emblem-scales.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/c/c6/Commons-emblem-scales.svg


Licencia: GPL Colaboradores: File:Commons-emblem-issue.svg and File:Emblem-scales.svg Artista original: Derived work: User:Srhat
Source les:
Archivo:Wave.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/4/40/Wave.svg Licencia: BSD Colaboradores: http://duke.
kenai.com/wave/index.html (new), https://duke.dev.java.net/images/wave/index.html (old) Artista original: sbmehta converted to SVG
from Sun Microsystems AI version.
Archivo:Wikibooks-logo.svg Fuente: https://upload.wikimedia.org/wikipedia/commons/f/fa/Wikibooks-logo.svg Licencia: CC BY-SA
3.0 Colaboradores: Trabajo propio Artista original: User:Bastique, User:Ramac et al.

14.3

Licencia del contenido

Creative Commons Attribution-Share Alike 3.0

Potrebbero piacerti anche