Java (Lenguaje de Programación)
Java (Lenguaje de Programación)
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
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
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
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.
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.
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.
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
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
5.1 Expresiones
5.3
Precedencia de operadores
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
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
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
7.2
El lenguaje
11
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
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.
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-
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.
8.4
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)
10 Vase tambin
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
11
Referencias
12
Notas
13
Enlaces externos
Wikilibros
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
14.2
Imgenes
14.3