java (lenguaje de programación)

24
Java (lenguaje de programación) 1 Java (lenguaje de programación) Java Desarrollador(es) James Gosling & Sun Microsystems Para desarrolladores de Java [1] Información general Extensiones comunes .java, .class, .jar Paradigma Orientado a objetos, imperativo Apareció en 1995 Diseñado por Sun Microsystems (Oracle Corporation) Última versión estable Java Standard Edition 7 (1.7.21) (16 de abril de 2013) Tipo de dato Fuerte, Estático Implementaciones OpenJDK, HotSpot, muchas otras Dialectos Generic Java, Pizza Influido por Objective-C, C++, Smalltalk, Eiffel Ha influido a C#, J#, JavaScript, PHP, Python Sistema operativo Multiplataforma Licencia GNU GPL / Java Community Process El lenguaje de programación Java fue originalmente desarrollado por James Gosling de Sun Microsystems (la cual fue adquirida por la compañía Oracle) y publicado en el 1995 como un componente fundamental de la plataforma Java de Sun Microsystems. Su sintaxis deriva mucho de C y C++, pero tiene menos facilidades de bajo nivel que cualquiera de ellos. Las aplicaciones de Java son generalmente compiladas a bytecode (clase Java) que puede ejecutarse en cualquier máquina virtual Java (JVM) sin importar la arquitectura de la computadora subyacente. Java es un lenguaje de programación de propósito general, concurrente, orientado a objetos y basado en clases que fue diseñado específicamente para tener tan pocas dependencias de implementación como fuera posible. Su intención es permitir que los desarrolladores de aplicaciones escriban el programa una vez y lo ejecuten en cualquier dispositivo (conocido en inglés como WORA, o "write once, run anywhere"), lo que quiere decir que el código que es ejecutado en una plataforma no tiene que ser recompilado para correr en otra. Java es, a partir del 2012, uno de los lenguajes de programación más populares en uso, particularmente para aplicaciones de cliente-servidor de web, con unos 10 millones de usuarios reportados. La compañía Sun desarrolló la implementación de referencia original para los compiladores de Java, máquinas virtuales, y librerías de clases en 1991 y las publicó por primera vez en el 1995. A partir de mayo del 2007, en cumplimiento con las especificaciones del Proceso de la Comunidad Java, Sun volvió a licenciar la mayoría de sus tecnologías de Java bajo la Licencia Pública General de GNU. Otros también han desarrollado implementaciones alternas a estas tecnologías de Sun, tales como el Compilador de Java de GNU y el GNU Classpath.

Upload: joncitho-cedeno

Post on 18-Dec-2015

259 views

Category:

Documents


4 download

DESCRIPTION

Java como lenguaje de programacion

TRANSCRIPT

  • Java (lenguaje de programacin) 1

    Java (lenguaje de programacin)

    Java

    Desarrollador(es)

    James Gosling & Sun MicrosystemsPara desarrolladores de Java [1]

    Informacin general

    Extensiones comunes .java, .class, .jar

    Paradigma Orientado a objetos, imperativo

    Apareci en 1995

    Diseado por Sun Microsystems (Oracle Corporation)

    ltima versin estable Java Standard Edition 7 (1.7.21) (16 de abril de 2013)

    Tipo de dato Fuerte, Esttico

    Implementaciones OpenJDK, HotSpot, muchas otras

    Dialectos Generic Java, Pizza

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

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

    Sistema operativo Multiplataforma

    Licencia GNU GPL / Java Community Process

    El lenguaje de programacin Java fue originalmente desarrollado por James Gosling de Sun Microsystems (la cualfue adquirida por la compaa Oracle) y publicado en el 1995 como un componente fundamental de la plataformaJava de Sun Microsystems. Su sintaxis deriva mucho de C y C++, pero tiene menos facilidades de bajo nivel quecualquiera de ellos. Las aplicaciones de Java son generalmente compiladas a bytecode (clase Java) que puedeejecutarse en cualquier mquina virtual Java (JVM) sin importar la arquitectura de la computadora subyacente. Javaes un lenguaje de programacin de propsito general, concurrente, orientado a objetos y basado en clases que fuediseado especficamente para tener tan pocas dependencias de implementacin como fuera posible. Su intencin espermitir 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 ejecutadoen una plataforma no tiene que ser recompilado para correr en otra. Java es, a partir del 2012, uno de los lenguajes deprogramacin ms populares en uso, particularmente para aplicaciones de cliente-servidor de web, con unos 10millones de usuarios reportados.La compaa Sun desarroll la implementacin de referencia original para los compiladores de Java, mquinasvirtuales, y libreras de clases en 1991 y las public por primera vez en el 1995. A partir de mayo del 2007, encumplimiento con las especificaciones del Proceso de la Comunidad Java, Sun volvi a licenciar la mayora de sustecnologas de Java bajo la Licencia Pblica General de GNU. Otros tambin han desarrollado implementacionesalternas a estas tecnologas de Sun, tales como el Compilador de Java de GNU y el GNU Classpath.

  • Java (lenguaje de programacin) 2

    Historia

    Duke, la mascota de Java

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

    El lenguaje se denomin inicialmente Oak (por un roble que haba fuera de laoficina de Gosling), luego pas a denominarse Green tras descubrir que Oak eraya una marca comercial registrada para adaptadores de tarjetas grficas yfinalmente se renombr a Java.

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

    Los objetivos de Gosling eran implementar una mquina virtual y un lenguaje con una estructura y sintaxis similar aC++. Entre junio y julio de 1994, tras una sesin maratoniana de tres das entre John Gaga, James Gosling, PatrickNaughton, Wayne Rosing y Eric Schmidt, el equipo reorient la plataforma hacia la Web. Sintieron que la llegadadel navegador web Mosaic, propiciara que Internet se convirtiese en un medio interactivo, como el que pensaban erala televisin por cable. Naughton cre entonces un prototipo de navegador, WebRunner, que ms tarde seraconocido como HotJava.En 1994, se les hizo una demostracin de HotJava y la plataforma Java a los ejecutivos de Sun. Java 1.0a pudodescargarse por primera vez en 1994, pero hubo que esperar al 23 de mayo de 1995, durante las conferencias deSunWorld, a que vieran la luz pblica Java y HotJava, el navegador Web. El acontecimiento fue anunciado por JohnGage, el Director Cientfico de Sun Microsystems. El acto estuvo acompaado por una pequea sorpresa adicional,el anuncio por parte de Marc Andreessen, Vicepresidente Ejecutivo de Netscape, de que Java sera soportado en susnavegadores. El 9 de enero del ao siguiente, 1996, Sun fund el grupo empresarial JavaSoft para que se encargasedel desarrollo tecnolgico. [2] 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 paralas plataformas ms populares de forma que los binarios (bytecode) de las aplicaciones Java pudiesen ejecutarse encualquier plataforma.El entorno de ejecucin era relativamente seguro y los principales navegadores web pronto incorporaron laposibilidad 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 enel nmero de clases y paquetes que componen la biblioteca estndar.Desde J2SE 1.4, la evolucin del lenguaje ha sido regulada por el JCP (Java Community Process), que usa JavaSpecification Requests (JSRs) para proponer y especificar cambios en la plataforma Java. El lenguaje en s mismoest especificado en la Java Language Specification (JLS), o Especificacin del Lenguaje Java. Los cambios en losJLS son gestionados en JSR 901 [3].

  • Java (lenguaje de programacin) 3

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

    JDK 1.1 (19 de febrero de 1997) Principales adiciones incluidas: comunicado de prensa [5]

    una reestructuracin intensiva del modelo de eventos AWT (Abstract Windowing Toolkit) clases internas (inner classes) JavaBeans JDBC (Java Database Connectivity), para la integracin de bases de datos RMI (Remote Method Invocation)

    J2SE 1.2 (8 de diciembre de 1998) Nombre clave Playground. Esta y las siguientes versiones fueron recogidasbajo la denominacin Java 2 y el nombre "J2SE" (Java 2 Platform, Standard Edition), reemplaz a JDK paradistinguir la plataforma base de J2EE (Java 2 Platform, Enterprise Edition) y J2ME (Java 2 Platform, MicroEdition). Otras mejoras aadidas incluan: comunicado de prensa [6]

    la palabra reservada (keyword) strictfp reflexin en la programacin la API grfica ( Swing) fue integrada en las clases bsicas la mquina virtual (JVM) de Sun fue equipada con un compilador JIT (Just in Time) por primera vez Java Plug-in Java IDL, una implementacin de IDL (Lenguaje de Descripcin de Interfaz) para la interoperabilidad con

    CORBA Colecciones (Collections)

    J2SE 1.3 (8 de mayo de 2000) Nombre clave Kestrel. Los cambios ms notables fueron:comunicado de prensa[7] lista completa de cambios [8]

    la inclusin de la mquina virtual de HotSpot JVM (la JVM de HotSpot fue lanzada inicialmente en abril de1999, 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 Javadesarrollado bajo el Proceso de la Comunidad Java como JSR 59 [9]. Los cambios ms notables fueron:comunicado de prensa [10]lista completa de cambios [11]

    Palabra reservada assert (Especificado en JSR 41 [12].) Expresiones regulares modeladas al estilo de las expresiones regulares Perl Encadenacin de excepciones Permite a una excepcin encapsular la excepcin de bajo nivel original. non-blocking NIO (New Input/Output) (Especificado en JSR 51 [13].) Logging API (Specified in JSR 47 [14].) API I/O para la lectura y escritura de imgenes en formatos como JPEG o PNG Parser XML integrado y procesador XSLT (JAXP) (Especificado en JSR 5 [15] y JSR 63 [3].) Seguridad integrada y extensiones criptogrficas (JCE, JSSE, JAAS) Java Web Start incluido (El primer lanzamiento ocurri en marzo de 2001 para J2SE 1.3) (Especificado en JSR

    56 [16].) J2SE 5.0 (30 de septiembre de 2004) Nombre clave: Tiger. (Originalmente numerado 1.5, esta notacin an es

    usada internamente.[17]) Desarrollado bajo JSR 176 [18], Tiger aadi un nmero significativo de nuevascaractersticas comunicado de prensa [19]

  • Java (lenguaje de programacin) 4

    Plantillas (genricos) provee conversin de tipos (type safety) en tiempo de compilacin para colecciones yelimina la necesidad de la mayora de conversin de tipos (type casting). (Especificado por JSR 14 [20].)

    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 demetadatos. (Especificado por JSR 175 [21].)

    Autoboxing/unboxing Conversiones automticas entre tipos primitivos (Como los int) y clases deenvoltura primitivas (Como Integer [22]). (Especificado por JSR 201 [23].)

    Enumeraciones la palabra reservada enum crea una typesafe, lista ordenada de valores (comoDia.LUNES, Dia.MARTES, etc.). Anteriormente, esto solo poda ser llevado a cabo por constantes enteras oclases construidas manualmente (enum pattern). (Especificado por JSR 201 [23].)

    Varargs (nmero de argumentos variable) El ltimo parmetro de un mtodo puede ser declarado con elnombre del tipo seguido por tres puntos (e.g. void drawtext(String... lines)). En la llamada almtodo, puede usarse cualquier nmero de parmetros de ese tipo, que sern almacenados en un array parapasarlos al mtodo.

    Bucle for mejorado La sintaxis para el bucle for se ha extendido con una sintaxis especial para iterarsobre cada miembro de un array o sobre cualquier clase que implemente Iterable [24], como la claseestndar Collection [25], de la siguiente forma:

    void displayWidgets (Iterable widgets) {

    for (Widget w : widgets) {

    w.display();

    }

    }

    Este ejemplo itera sobre el objeto Iterable widgets, asignando, en orden, cada uno de los elementos a lavariable w, y llamando al mtodo display() de cada uno de ellos. (Especificado por JSR 201.) |} Java SE 6 (11 de diciembre de 2006) Nombre clave Mustang [26]. Estuvo en desarrollo bajo la JSR 270 [27].

    En esta versin, Sun cambi el nombre "J2SE" por Java SE y elimin el ".0" del nmero de versin.[28]. Estdisponible en http:/ / java. sun. com/ javase/ 6/ [29]. Los cambios ms importantes introducidos en esta versinson: Incluye un nuevo marco de trabajo y APIs que hacen posible la combinacin de Java con lenguajes dinmicos

    como PHP, Python, Ruby y JavaScript. Incluye el motor Rhino, de Mozilla, una implementacin de Javascript en Java. Incluye un cliente completo de Servicios Web y soporta las ltimas especificaciones para Servicios Web, como

    JAX-WS 2.0, JAXB 2.0, STAX y JAXP. Mejoras en la interfaz grfica y en el rendimiento.

    Java SE 7 Nombre clave Dolphin. En el ao 2006 an se encontraba en las primeras etapas de planificacin.Su lanzamiento fue en julio de 2011. Soporte para XML dentro del propio lenguaje. Un nuevo concepto de superpaquete. Soporte para closures. Introduccin de anotaciones estndar para detectar fallos en el software.

    No oficiales: NIO2. Java Module System. Java Kernel. Nueva API para el manejo de Das y Fechas, la cual reemplazara las antiguas clases Date y Calendar.

  • Java (lenguaje de programacin) 5

    Posibilidad de operar con clases BigDecimal usando operandos.[30]En el 2005 se calcula en 4,5 millones el nmero de desarrolladores y 2.500 millones de dispositivos habilitados contecnologa Java.

    FilosofaEl lenguaje Java se cre con cinco objetivos principales:1.1. Debera usar el paradigma de la programacin orientada a objetos.2.2. Debera permitir la ejecucin de un mismo programa en mltiples sistemas operativos.3.3. Debera incluir por defecto soporte para trabajo en red.4.4. Debera disearse para ejecutar cdigo en sistemas remotos de forma segura.5.5. Debera ser fcil de usar y tomar lo mejor de otros lenguajes orientados a objetos, como C++.Para conseguir la ejecucin de cdigo remoto y el soporte de red, los programadores de Java a veces recurren aextensiones como CORBA (Common Object Request Broker Architecture), Internet Communications Engine oOSGi respectivamente.

    Orientado a objetosLa primera caracterstica, orientado a objetos (OO), se refiere a un mtodo de programacin y al diseo dellenguaje. Aunque hay muchas interpretaciones para OO, una primera idea es disear el software de forma que losdistintos tipos de datos que usen estn unidos a sus operaciones. As, los datos y el cdigo (funciones o mtodos) secombinan en entidades llamadas objetos. Un objeto puede verse como un paquete que contiene el comportamiento(el cdigo) y el estado (datos). El principio es separar aquello que cambia de las cosas que permanecen inalterables.Frecuentemente, cambiar una estructura de datos implica un cambio en el cdigo que opera sobre los mismos, oviceversa. Esta separacin en objetos coherentes e independientes ofrece una base ms estable para el diseo de unsistema software. El objetivo es hacer que grandes proyectos sean fciles de gestionar y manejar, mejorando comoconsecuencia su calidad y reduciendo el nmero de proyectos fallidos. Otra de las grandes promesas de laprogramacin orientada a objetos es la creacin de entidades ms genricas (objetos) que permitan la reutilizacindel software entre proyectos, una de las premisas fundamentales de la Ingeniera del Software. Un objeto genricocliente, por ejemplo, debera en teora tener el mismo conjunto de comportamiento en diferentes proyectos, sobretodo cuando estos coinciden en cierta medida, algo que suele suceder en las grandes organizaciones. En este sentido,los objetos podran verse como piezas reutilizables que pueden emplearse en mltiples proyectos distintos,posibilitando as a la industria del software a construir proyectos de envergadura empleando componentes yaexistentes y de comprobada calidad; conduciendo esto finalmente a una reduccin drstica del tiempo de desarrollo.Podemos usar como ejemplo de objeto el aluminio. Una vez definidos datos (peso, maleabilidad, etc.), y sucomportamiento (soldar dos piezas, etc.), el objeto aluminio puede ser reutilizado en el campo de la construccin,del automvil, de la aviacin, etc.La reutilizacin del software ha experimentado resultados dispares, encontrando dos dificultades principales: eldiseo de objetos realmente genricos es pobremente comprendido, y falta una metodologa para la ampliacomunicacin de oportunidades de reutilizacin. Algunas comunidades de cdigo abierto (open source) quierenayudar en este problema dando medios a los desarrolladores para diseminar la informacin sobre el uso yversatilidad de objetos reutilizables y bibliotecas de objetos.

  • Java (lenguaje de programacin) 6

    Independencia de la plataformaLa segunda caracterstica, la independencia de la plataforma, significa que programas escritos en el lenguaje Javapueden ejecutarse igualmente en cualquier tipo de hardware. Este es el significado de ser capaz de escribir unprograma una vez y que pueda ejecutarse en cualquier dispositivo, tal como reza el axioma de Java, write once, runanywhere.Para ello, se compila el cdigo fuente escrito en lenguaje Java, para generar un cdigo conocido como bytecode(especficamente Java bytecode)instrucciones mquina simplificadas especficas de la plataforma Java. Esta piezaest a medio camino entre el cdigo fuente y el cdigo mquina que entiende el dispositivo destino. El bytecode esejecutado entonces en la mquina virtual (JVM), un programa escrito en cdigo nativo de la plataforma destino (quees el que entiende su hardware), que interpreta y ejecuta el cdigo. Adems, se suministran bibliotecas adicionalespara acceder a las caractersticas de cada dispositivo (como los grficos, ejecucin mediante hebras o threads, lainterfaz de red) de forma unificada. Se debe tener presente que, aunque hay una etapa explcita de compilacin, elbytecode generado es interpretado o convertido a instrucciones mquina del cdigo nativo por el compilador JIT(Just In Time).Hay implementaciones del compilador de Java que convierten el cdigo fuente directamente en cdigo objeto nativo,como GCJ. Esto elimina la etapa intermedia donde se genera el bytecode, pero la salida de este tipo de compiladoresslo puede ejecutarse en un tipo de arquitectura.La licencia sobre Java de Sun insiste que todas las implementaciones sean compatibles. Esto dio lugar a unadisputa legal entre Microsoft y Sun, cuando ste ltimo aleg que la implementacin de Microsoft no daba soporte alas interfaces RMI y JNI adems de haber aadido caractersticas dependientes de su plataforma. Sun demand aMicrosoft y gan por daos y perjuicios (unos 20 millones de dlares) as como una orden judicial forzando laacatacin de la licencia de Sun. Como respuesta, Microsoft no ofrece Java con su versin de sistema operativo, y enrecientes versiones de Windows, su navegador Internet Explorer no admite la ejecucin de applets sin un conector (oplugin) 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 Co C++. Esto hizo que Java se ganase una reputacin de lento en rendimiento. Las implementaciones recientes de laJVM dan lugar a programas que se ejecutan considerablemente ms rpido que las versiones antiguas, empleandodiversas 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 compiladorestradicionales, eliminando la etapa del bytecode. Esto da lugar a un gran rendimiento en la ejecucin, pero tapa elcamino a la portabilidad. Otra tcnica, conocida como compilacin JIT (Just In Time, o compilacin al vuelo),convierte el bytecode a cdigo nativo cuando se ejecuta la aplicacin. Otras mquinas virtuales ms sofisticadas usanuna recompilacin dinmica en la que la VM es capaz de analizar el comportamiento del programa en ejecucin yrecompila y optimiza las partes crticas. La recompilacin dinmica puede lograr mayor grado de optimizacin quela compilacin tradicional (o esttica), ya que puede basar su trabajo en el conocimiento que de primera mano tienesobre el entorno de ejecucin y el conjunto de clases cargadas en memoria. La compilacin JIT y la recompilacindinmica permiten a los programas Java aprovechar la velocidad de ejecucin del cdigo nativo sin por ello perder laventaja de la portabilidad en ambos.La portabilidad es tcnicamente difcil de lograr, y el xito de Java en ese campo ha sido dispar. Aunque es de hechoposible escribir programas para la plataforma Java que acten de forma correcta en mltiples plataformas de distintaarquitectura, el gran nmero de estas con pequeos errores o inconsistencias llevan a que a veces se parodie eleslogan de Sun, "Write once, run anywhere" como "Write once, debug everywhere" (o Escrbelo una vez, ejectaloen cualquier parte por Escrbelo una vez, depralo en todas partes)El concepto de independencia de la plataforma de Java cuenta, sin embargo, con un gran xito en las aplicaciones en el entorno del servidor, como los Servicios Web, los Servlets, los Java Beans, as como en sistemas empotrados

  • Java (lenguaje de programacin) 7

    basados en OSGi, usando entornos Java empotrados.

    El recolector de basuraEn Java el problema fugas de memoria se evita en gran medida gracias a la recoleccin de basura (o automaticgarbage collector). El programador determina cundo se crean los objetos y el entorno en tiempo de ejecucin deJava (Java runtime) es el responsable de gestionar el ciclo de vida de los objetos. El programa, u otros objetospueden tener localizado un objeto mediante una referencia a ste. Cuando no quedan referencias a un objeto, elrecolector 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 delmtodo el objeto es eliminado). Aun as, es posible que se produzcan fugas de memoria si el cdigo almacenareferencias a objetos que ya no son necesarioses decir, pueden an ocurrir, pero en un nivel conceptual superior.En definitiva, el recolector de basura de Java permite una fcil creacin y eliminacin de objetos y mayor seguridad.

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

    Aplicaciones autnomas

    // Hola.java

    import javax.swing.JOptionPane;

    public class Hola //Declara una clase llamada Hola, que es descendiente

    de la clase Object

    {

    //Entre llaves se declaran los atributos y mtodos de la clase

    public static void main(String[] args)

    //public: indica que el mtodo main()es pblico

    //void: indica que la funcin main() no devuelve ningn valor

    //El mtodo main()debe aceptar siempre como parmetro un vector de

    strings

    {

    JOptionPane.showMessageDialog(null, "Hola Mundo");

    //Esta lnea indica que se va a ejecutar el mtodo

    showMessageDialog(), encargado de mostrar

    //en un cuadro de dilogo un valor (en nuestro caso, un String)

    //El primer parmetro no es necesario y podemos usar el valor nulo

    //(el parmetro indica el JFrame asociado, el contenedor o entorno

    del dilogo a crear)

    }

    }

    Este ejemplo necesita una pequea explicacin. Todo en Java est dentro de una clase, incluyendo programas autnomos.

  • Java (lenguaje de programacin) 8

    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 esHola, por lo que el cdigo fuente debe guardarse en el fichero Hola.java

    El compilador genera un archivo de clase (con extensin .class) por cada una de las clases definidas en elarchivo fuente. Una clase annima se trata como si su nombre fuera la concatenacin del nombre de la clase quela encierra, el smbolo $, y un nmero entero.

    Los programas que se ejecutan de forma independiente y autnoma, deben contener el mtodo main(). La palabra reservada void indica que el mtodo main no devuelve nada. El mtodo main debe aceptar un array de objetos tipo String. Por acuerdo se referencia como args, aunque

    puede emplearse cualquier otro identificador. La palabra reservada static indica que el mtodo es un mtodo de clase, asociado a la clase en vez de una

    instancias de la misma. El mtodo main debe ser esttico o de clase. La palabra reservada public significa que un mtodo puede ser llamado desde otras clases, o que la clase

    puede ser usada por clases fuera de la jerarqua de la propia clase. Otros tipos de acceso son private oprotected.

    La utilidad de impresin (en pantalla por ejemplo) forma parte de la biblioteca estndar de Java: la claseSystem define un campo pblico esttico llamado out. El objeto out es una instancia de PrintStream,que ofrece el mtodo println (String) para volcar datos en la pantalla (la salida estndar).

    Las aplicaciones autnomas se ejecutan dando al entorno de ejecucin de Java el nombre de la clase cuyo mtodomain debe invocarse. Por ejemplo, una lnea de comando (en Unix o Windows) de la forma java cp .Hola ejecutar el programa del ejemplo (previamente compilado y generado Hola.class). El nombre de la clasecuyo mtodo main se llama puede especificarse tambin en el fichero MANIFEST del archivo deempaquetamiento de Java (.jar).

    Applets

    Las applet Java son programas incrustados en otras aplicaciones, normalmente una pgina Web que se muestra en unnavegador.

    // 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);

    }

    }

    Applet Hola Mundo

  • Java (lenguaje de programacin) 9

    Actualmente HTML 5 ha eliminado el uso de la etiqueta . Pero todava existe la forma de usarlo enHTML5. (Texto en ingls) Java Applets in HTML5. [31]

    La sentencia import indica al compilador de Java que incluya las clases java.applet. Applet y java.awt.Graphics, para poder referenciarlas por sus nombres, sin tener que anteponer la ruta completa cada vez que sequieran usar en el cdigo fuente.La clase Hola extiende (extends) a la clase Applet, es decir, es una subclase de sta. La clase Appletpermite a la aplicacin mostrar y controlar el estado del applet. La clase Applet es un componente del AWT(Abstract Window Toolkit), que permite al applet mostrar una interfaz grfica de usuario o GUI (Graphical UserInterface), y responder a eventos generados por el usuario.La clase Hola sobrecarga el mtodo paint (Graphics) heredado de la superclase contenedora (Applet en estecaso), para acceder al cdigo encargado de dibujar. El mtodo paint() recibe un objeto Graphics quecontiene el contexto grfico para dibujar el applet. El mtodo paint() llama al mtodo drawString (String, int,int) del objeto [32]

    Servlets

    Los servlets son componentes de la parte del servidor de Java EE, encargados de generar respuestas a las peticionesrecibidas de los clientes.

    // Hola.java

    import java.io.IOException;

    import javax.servlet.*;

    public class Hola extends GenericServlet

    {

    public void service(ServletRequest request, ServletResponse

    response)

    throws ServletException, IOException

    {

    response.setContentType("text/html");

    PrintWriter pw = response.getWriter();

    pw.println("Hola, mundo!");

    pw.close();

    }

    }

    Las sentencias import indican al compilador de Java la inclusin de todas las clases pblicas e interfaces de lospaquetes java.io y javax.servlet en la compilacin.La clase Hola extiende (extends), es heredera de la clase GenericServlet. Esta clase proporciona la interfaz paraque el servidor le pase las peticiones al servlet y el mecanismo para controlar el ciclo de vida del servlet.La clase Hola sobrecarga el mtodo service (ServletRequest, ServletResponse), definido por la interfaz servletpara acceder al manejador de la peticin de servicio. El mtodo service() recibe un objeto de tipoServletRequest que contiene la peticin del cliente y un objeto de tipo ServletResponse, usado para generar larespuesta que se devuelve al cliente. El mtodo service() puede lanzar (throws) excepciones de tipoServletException e IOException si ocurre algn tipo de anomala.

  • Java (lenguaje de programacin) 10

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

    Aplicaciones con ventanas

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

    // Hola.java

    import javax.swing.*;

    public class Hola extends JFrame {

    Hola() {

    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

    add(new JLabel("Hola, mundo!"));

    pack();

    }

    public static void main(String[] args) {

    new Hola().setVisible(true);

    }

    }

    Las instrucciones import indican al compilador de Java que las clases e interfaces del paquete javax.swing seincluyan en la compilacin.La clase Hola extiende (extends) la clase javax.swing.JFrame, que implementa una ventana con una barra dettulo y un control para cerrarla.El constructor Hola() inicializa el marco o frame llamando al mtodo setDefaultCloseOperation (int) heredadode JFrame para establecer las operaciones por defecto cuando el control de cierre en la barra de ttulo es seleccionadoal valor WindowConstants.DISPOSE_ON_CLOSE. Esto hace que se liberen los recursos tomados por la ventanacuando es cerrada, y no simplemente ocultada, lo que permite a la mquina virtual y al programa acabar suejecucin. A continuacin se crea un objeto de tipo JLabel con el texto "Hola, mundo!", y se aade al marcomediante el mtodo add (Component), heredado de la clase Container. El mtodo pack(), heredado de la claseWindow, 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 hacela ventana sea mostrada invocando al mtodo setVisible (boolean) de la superclase (clase de la que hereda) con elparmetro a true. Vase que, una vez el marco es dibujado, el programa no termina cuando se sale del mtodomain(), ya que el cdigo del que depende se encuentra en un hilo de ejecucin independiente ya lanzado, y quepermanecer activo hasta que todas las ventanas hayan sido destruidas.

  • Java (lenguaje de programacin) 11

    Entornos de funcionamientoEl diseo de Java, su robustez, el respaldo de la industria y su fcil portabilidad han hecho de Java uno de loslenguajes con un mayor crecimiento y amplitud de uso en distintos mbitos de la industria de la informtica.

    En dispositivos mviles y sistemas empotradosDesde la creacin de la especificacin J2ME (Java 2 Platform, Micro Edition), una versin del entorno de ejecucinJava reducido y altamente optimizado, especialmente desarrollado para el mercado de dispositivos electrnicos deconsumo se ha producido toda una revolucin en lo que a la extensin de Java se refiere.Es posible encontrar microprocesadores diseados para ejecutar bytecode Java y software Java para tarjetasinteligentes (JavaCard), telfonos mviles, buscapersonas, set-top-boxes, sintonizadores de TV y otros pequeoselectrodomsticos.El modelo de desarrollo de estas aplicaciones es muy semejante a las applets de los navegadores salvo que en estecaso se denominan MIDlets.Vase Sun Mobile Device Tecnology [33]

    En el navegador webDesde la primera versin de java existe la posibilidad de desarrollar pequeas aplicaciones (Applets) en Java queluego pueden ser incrustadas en una pgina HTML para que sean descargadas y ejecutadas por el navegador web.Estas mini-aplicaciones se ejecutan en una JVM que el navegador tiene configurada como extensin (plug-in) en uncontexto de seguridad restringido configurable para impedir la ejecucin local de cdigo potencialmente malicioso.El xito de este tipo de aplicaciones (la visin del equipo de Gosling) no fue realmente el esperado debido a diversosfactores, siendo quizs el ms importante la lentitud y el reducido ancho de banda de las comunicaciones en aquelentonces que limitaba el tamao de las applets que se incrustaban en el navegador. La aparicin posterior de otrasalternativas (aplicaciones web dinmicas de servidor) dej un reducido mbito de uso para esta tecnologa, quedandohoy relegada fundamentalmente a componentes especficos para la intermediacin desde una aplicacin webdinmica de servidor con dispositivos ubicados en la mquina cliente donde se ejecuta el navegador.Las applets Java no son las nicas tecnologas (aunque s las primeras) de componentes complejos incrustados en elnavegador. Otras tecnologas similares pueden ser: ActiveX de Microsoft, Flash, Java Web Start, etc.

    En sistemas de servidorEn la parte del servidor, Java es ms popular que nunca, desde la aparicin de la especificacin de Servlets y JSP(Java Server Pages).Hasta entonces, las aplicaciones web dinmicas de servidor que existan se basaban fundamentalmente encomponentes CGI y lenguajes interpretados. Ambos tenan diversos inconvenientes (fundamentalmente lentitud,elevada carga computacional o de memoria y propensin a errores por su interpretacin dinmica).Los servlets y las JSPs supusieron un importante avance ya que: El API de programacin es muy sencilla, flexible y extensible. Los servlets no son procesos independientes (como los CGIs) y por tanto se ejecutan dentro del mismo proceso

    que la JVM mejorando notablemente el rendimiento y reduciendo la carga computacional y de memoriarequeridas.

    Las JSPs son pginas que se compilan dinmicamente (o se pre-compilan previamente a su distribucin) de modoque el cdigo que se consigue una ventaja en rendimiento substancial frente a muchos lenguajes interpretados.

    La especificacin de Servlets y JSPs define un API de programacin y los requisitos para un contenedor (servidor)dentro del cual se puedan desplegar estos componentes para formar aplicaciones web dinmicas completas. Hoy da

  • Java (lenguaje de programacin) 12

    existen multitud de contenedores (libres y comerciales) compatibles con estas especificaciones.A partir de su expansin entre la comunidad de desarrolladores, estas tecnologas han dado paso a modelos dedesarrollo mucho ms elaborados con frameworks (pe Struts, Webwork) que se sobreponen sobre los servlets y lasJSPs para conseguir un entorno de trabajo mucho ms poderoso y segmentado en el que la especializacin de rolessea posible (desarrolladores, diseadores grficos,...) y se facilite la reutilizacin y robustez de cdigo. A pesar detodo ello, las tecnologas que subyacen (Servlets y JSPs) son substancialmente las mismas.Este modelo de trabajo se ha convertido en uno de los estndar de-facto para el desarrollo de aplicaciones webdinmicas de servidor.

    En aplicaciones de escritorioHoy en da existen multitud de aplicaciones grficas de usuario basadas en Java. El entorno de ejecucin Java (JRE)se ha convertido en un componente habitual en los PC de usuario de los sistemas operativos ms usados en elmundo. Adems, muchas aplicaciones Java lo incluyen dentro del propio paquete de la aplicacin de modo que seejecuten en cualquier PC.En las primeras versiones de la plataforma Java existan importantes limitaciones en las APIs de desarrollo grfico(AWT). Desde la aparicin de la biblioteca Swing la situacin mejor substancialmente y posteriormente con laaparicin de bibliotecas como SWT hacen que el desarrollo de aplicaciones de escritorio complejas y con grandinamismo, usabilidad, etc. sea relativamente sencillo.

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

    Programacin

    ExpresionesLas expresiones son un conjunto de elementos o tokens junto con literales que son evaluados para devolver unresultado. Los tokens son elemento ms pequeo de un programa que es significativo, e interpretado o entendido porel compilador, en java los tokens se dividen en cinco categoras que son:Identificadores: Son las representaciones que se les da a los nombres que se asignan a las variables, clases, paquetes,mtodos y constantes en el cdigo de java para que el compilador los identifique y el programador puedaentenderlos. En java los identificadores pueden diferenciar entre maysculas o minsculas por ser case sensitive, porlo que la variable cuyo nombre sea Mivariable, no es igual a mivarialble, ya que java identifica estas comovariables diferentes por el case sensitive, tambin se puede utilizar nmeros, o el signo _ para asignar unidentificador.Palabras claves: Son los identificadores reservados por java para cumplir con un objetivo especfico en el cdigo yel compilador, se usan de forma limitada y en casos especficos. Las palabras claves que usa java son las siguientes:

  • Java (lenguaje de programacin) 13

    abstract boolean break byte case

    catch char class continue default

    do double else extends false

    final finally float for if

    implements import instanceof int interface

    long native new null package

    private protected public return short

    static super switch syncroniced this

    throw throws transient true try

    void volatile while var rest

    byvalue cast const future generic

    goto inner operator outer

    Las palabras que se encuentran en negrilla, son palabras claves para java aunque actualmente no se utilicen en laversin de java, pero se pretenden integrar en las siguientes versiones de java. Las palabras como true, false o nulltambin son palabras claves pero son palabras reservadas en java por lo cual no pueden ser utilizadas como unidentificador.Literales y constantes:Los literales son sintaxis para asignar valores a una variable, es decir el valor que puede tomaruna variable, tambin es un valor constante que puede ser de tipo numrico. Las constantes son variables que tienenun valor fijo y no puede ser modificado en el trascurso de la ejecucin del cdigo, estas se declaran por medio de losmodificadores final y static.

    final static double pi= 3.1416;

    Operadores: Son los que nos indican una evaluacin que se aplica a un objeto o un dato, sobre un identificador oconstante. Un ejemplo de operadores puede ser la suma, resta o multiplicacin.Separadores: Se utilizan para indicarle al compilador de java donde se ubican los elementos del cdigo, losseparadores que admite java son: { },:;Tambin el compilador de java identifica y elimina los comentarios, retornos de carros espacios vacos y detabulacin a la hora de compilar por lo que no son considerados parte de un tokens.Las expresiones pueden ser una combinacin en secuencia de variables, operadores y mtodos. Las expresiones sonutilizadas para realizar clculos, para asignar valores a variables, o para controlar la ejecucin del flujo del programa.

    OperadoresLos operadores son aquellos que tras realizar una operacin devuelven un resultado, estos se puede caracterizar porel 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 unoperando para devolver un valor, mientras que los binarios necesitan de dos o ms operandos.Operadores unarios.

  • Java (lenguaje de programacin) 14

    Operador Descripcin

    - Cambio de signo

    ! Operador NOT

    ~ Complemento a 1

    Operadores binarios.

    Operadores Descripcin

    + - * / % Operadores aritmticos

    == != < > = Operadores relacionales

    && ^ Operadores booleanos

    ^ > >>> Operadores a nivel de bit

    + Concatenacin de cadenas

    Operadores a nivel de bit

    Los operadores a nivel de bit nos permiten realizar operaciones sobre nmeros binarios.~ Complemento a 1, este operador invierte los dgitos, cambiando los 0 por 1 y los 1 por 0, un ejemplo puede ser:

    11001011

    ~ 11001011 resultado 00110100

    Como se puede ver se cambian los valores de 0 a 1 y de 1 a 0.& AND a nivel de bit, este operador realiza una operacin AND o suma entre dos nmeros de bit, en donde si dos bitson igual a 1 el resultado ser 1, de lo contrario ser 0, un ejemplo puede ser:

    situacion

    01001101

    & 10011011

    ______________

    00001001

    | Or a nivel de bit, este operador realiza una operacin OR en donde si alguno de los dos nmeros es 1 el resultadoser 1, un ejemplo puede ser:

    11001101

    | 01011101

    ______________

    11011101

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

    001010012

    ^ 011011012

    ______________

    01000100

  • Java (lenguaje de programacin) 15

    01101110

    01101110 >>>

    Comparacin < > = instanceof

    Igualdad == !=

    AND a nivel bit &

    OR a nivel bit |

    XOR a nivel bit ^

    AND lgico &&

    OR lgico ||

    Condicional ? :

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

    Un ejemplo de la precedencia de los operadores en java podra ser el siguiente, en donde tenemos un cdigo que seencargara de realizar una serie de operaciones aritmticas.

    int numero1 = 3;

    int numero2= 4;

    int resultado;

    resultado= numero1 + numero2 * 3;

    System.out.println ( resultado); //esto imprime el valor de 15

  • Java (lenguaje de programacin) 16

    segn la precedencia de los operadores la multiplicacin * tiene mayor prioridad que la suma +, por lo que primerose ejecuta la multiplicacin y luego se realiza la suma.

    int numero1 = 3;

    int numero2= 4;

    int resultado;

    resultado= (numero1 + numero2) * 3;

    System.out.println ( resultado); //esto imprime el valor de 21

    En este caso el resultado cambia ya que primero se evalan los parmetros que estn dentro del parntesis y luego seevala el resto de parmetros. Una de las recomendaciones que da java para el desarrollo es el uso de los parntesisen las operaciones con ms de 3 operandos, as de esta forma el cdigo se hace ms legible y se evitan errores almomento de compilar.

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

    int variable= 12+2;

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

    Conversin de tipos

    En algunos casos suele ser necesario convertir un tipo de dato a otro, esto se le conoce como conversin de tipos,modelado, o tipado, as de esta forma poder realizar las operaciones necesarias sobre el valor que se desea convertir.Se debe tener en cuenta el tipo de dato que se va a convertir, ya que si se convierte un dato que tenga una cantidadmenor de bit al anterior este tendr perdida de informacin, un ejemplo de tipado puede ser un nmero long que sedesea convertir a int, el compilador eliminara los primeros 32bit del long para ajustarlo al int ya que el int es de 32bity el long de 64. Si la conversin se realiza a un tipo de datos de menos bit a un tipo de datos con mayor bit, laconversin se realiza automticamente llamada conversin implcita, pero si se realiza de un tipo de datos con mayorbit a menor bit se tiene que realizar una conversin explicita, la cual se realiza con un casting, al usar este mtodo seobliga a realizar la conversin por lo cual puede haber perdida de datos en la conversin. Para realizar unaconversin explicita se tiene que poner el tipo de dato que se desea realizar la conversin entre parntesis, luego elvalor o la variable que se desea convertir. Un ejemplo de conversin de tipo explicito puede ser:

    Int numero1 = 32;

    byte numero2;

    numero2 = (byte) numero1;

    Un ejemplo de una conversin de tipo implcita puede ser:

  • Java (lenguaje de programacin) 17

    int numero1 = 32;

    long numero2;

    numero2 = numero1;

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

    Tipo origen Tipo destino

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

    short double, float, long, int

    char double, float, long, int

    int double, float, long

    long double, float

    float double

    Los tipos de datos booleanos no pueden ser convertidos a otro tipo de datos, por ningn mtodo mencionadoanteriormente. Otro tipo de conversin que no se encuentre en esta tabla desde el origen al destino, tiene querealizarse por medio de una conversin explcita por casting. Cuando se desea realizar una conversin de un tipostring como origen a otro tipo, es necesario utilizar una funcin que se encarga de convertir el tipo de dato, lafuncin necesaria se compone de la variable que va almacenar el resultado, y dependiendo de la variable se usa elparmetro que inicia con el tipo de dato a convertir, Integer, Byte, Short, o Long, seguida de punto . , el cual indicaque se cargarn los atributos del parmetro, en donde cargaremos el parseInt si queremos convertir a interger oparseByte si queremos convertir a byte, o dependiendo del tipo de dato, seguido de parntesis en donde se agregarael valor de string a convertir. Algunos ejemplos puede ser:

    int numero1;

    long numero2;

    byte numero3;

    String texto= 2013;numero1 = Interger.parseInt ( texto );

    numero2 = Long.parseLong ( texto);

    numero3 = Byte.parseByte ( texto );

    esto suele ser usado para realizar una conversin de texto cuando se ingresan valores numricos por una entrada ajava, la cual los detecta como string, as de esta forma puede convertir el texto que se ingresa a un nmero pararealizar operaciones, como una calculadora.

    Industria relacionadaSun Microsystem, como creador del lenguaje de programacin Java y de la plataforma JDK, mantiene fuertespolticas para mantener una especificacin del lenguaje[34] as como de la mquina virtual[35] a travs del JCP. Esdebido a este esfuerzo que se mantiene un estndar de facto.Son innumerables las compaas que desarrollan aplicaciones para Java y/o estn volcadas con esta tecnologa: La industria de la telefona mvil est fuertemente influenciada por la tecnologa Java. Los entornos de desarrollo Netbeans y Eclipse ha tomado un lugar importante entre la comunidad de

    desarrolladores Java. La fundacin Apache tiene tambin una presencia importante en el desarrollo de bibliotecas y componentes de

    servidor basados en Java.

  • Java (lenguaje de programacin) 18

    IBM, BEA, IONA, Oracle,... son empresas con grandes intereses y productos creados en y para Java.

    CrticasEn 1995 alguien dijo que Java fue creado para abrir una nueva va en la gestin de software complejo, y es por reglageneral aceptado que se ha comportado bien en ese aspecto. Sin embargo no puede decirse que Java no tenga grietas,ni que se adapta completamente a todos los estilos de programacin, todos los entornos, o todas las necesidades.

    General Java no ha aportado capacidades estndares para aritmtica en punto flotante. El estndar IEEE 754 para

    Estndar para Aritmtica Binaria en Punto Flotante apareci en 1985, y desde entonces es el estndar para laindustria. Y aunque la aritmtica flotante de Java (cosa que cambi desde el 13 de noviembre de 2006, cuando seabri el cdigo fuente y se adopt la licencia GPL, aparte de la ya existente)[citarequerida] se basa en gran medidaen la norma del IEEE, no soporta an algunas caractersticas. Ms informacin al respecto puede encontrarse enla seccin final de enlaces externos.

    El lenguaje En un sentido estricto, Java no es un lenguaje absolutamente orientado a objetos, a diferencia de, por ejemplo,

    Ruby o Smalltalk. Por motivos de eficiencia, Java ha relajado en cierta medida el paradigma de orientacin aobjetos, y as por ejemplo, no todos los valores son objetos.

    El cdigo Java puede ser a veces redundante en comparacin con otros lenguajes. Esto es en parte debido a lasfrecuentes declaraciones de tipos y conversiones de tipo manual (casting). Tambin se debe a que no se disponede operadores sobrecargados, y a una sintaxis relativamente simple. Sin embargo, J2SE 5.0 introduce elementospara tratar de reducir la redundancia, como una nueva construccin para los bucles foreach.

    A diferencia de C++, Java no dispone de operadores de sobrecarga definidos por el usuario. Los diseadores deJava tomaron esta decisin puesto que consideraban que, bajo ciertas circunstancias, esta caracterstica podacomplicar la lectura y mantenimiento de los programas.

    AparienciaLa apariencia externa (el look and feel) de las aplicaciones GUI (Graphical User Interface) escritas en Javausando la plataforma Swing difiere a menudo de la que muestran aplicaciones nativas. Aunque el programador puedeusar el juego de herramientas AWT (Abstract Windowing Toolkit) que genera objetos grficos de la plataformanativa, el AWT no es capaz de funciones grficas avanzadas sin sacrificar la portabilidad entre plataformas; ya quecada una tiene un conjunto de APIs distinto, especialmente para objetos grficos de alto nivel. Las herramientas deSwing, escritas completamente en Java, evitan este problema construyendo los objetos grficos a partir de losmecanismos de dibujo bsicos que deben estar disponibles en todas las plataformas. El inconveniente es el trabajoextra requerido para conseguir la misma apariencia de la plataforma destino. Aunque esto es posible (usando GTK+y el Look-and-Feel de Windows), la mayora de los usuarios no saben cmo cambiar la apariencia que seproporciona por defecto por aquella que se adapta a la de la plataforma.

  • Java (lenguaje de programacin) 19

    RendimientoEl bytecode de Java puede ser interpretado en tiempo de ejecucin por la mquina virtual, o bien compilado alcargarse el programa, o durante la propia ejecucin, para generar cdigo nativo que se ejecuta directamente sobre elhardware. Si es interpretado, ser ms lento que usando el cdigo mquina intrnseco de la plataforma destino. Si escompilado, durante la carga inicial o la ejecucin, la penalizacin est en el tiempo necesario para llevar a cabo lacompilacin.Algunas caractersticas del propio lenguaje conllevan una penalizacin en tiempo, aunque no son nicas de Java.Algunas de ellas son el chequeo de los lmites de arrays, chequeo en tiempo de ejecucin de tipos, y la indireccin defunciones virtuales.El uso de un recolector de basura para eliminar de forma automtica aquellos objetos no requeridos, aade unasobrecarga que puede afectar al rendimiento, o ser apenas apreciable, dependiendo de la tecnologa del recolector yde la aplicacin en concreto. Las JVM modernas usan recolectores de basura que gracias a rpidos algoritmos demanejo de memoria, consiguen que algunas aplicaciones puedan ejecutarse ms eficientemente.El rendimiento entre un compilador JIT y los compiladores nativos puede ser parecido, aunque la distincin no estclara en este punto. La compilacin mediante el JIT puede consumir un tiempo apreciable, un inconvenienteprincipalmente para aplicaciones de corta duracin o con gran cantidad de cdigo. Sin embargo, una vez compilado,el rendimiento del programa puede ser comparable al que consiguen compiladores nativos de la plataforma destino,inclusive en tareas numricas. Aunque Java no permite la expansin manual de llamadas a mtodos, muchoscompiladores JIT realizan esta optimizacin durante la carga de la aplicacin y pueden aprovechar informacin delentorno en tiempo de ejecucin para llevar a cabo transformaciones eficientes durante la propia ejecucin de laaplicacin. Esta recompilacin dinmica, como la que proporciona la mquina virtual HotSpot de Sun, puede llegar amejorar el resultado de compiladores estticos tradicionales, gracias a los datos que slo estn disponibles durante eltiempo de ejecucin.Java fue diseado para ofrecer seguridad y portabilidad, y no ofrece acceso directo al hardware de la arquitectura nial espacio de direcciones. Java no soporta expansin de cdigo ensamblador, aunque las aplicaciones pueden accedera caractersticas de bajo nivel usando bibliotecas nativas (JNI, Java Native Interfaces).

    Recursos

    JREEl JRE (Java Runtime Environment, o Entorno en Tiempo de Ejecucin de Java) es el software necesario paraejecutar cualquier aplicacin desarrollada para la plataforma Java. El usuario final usa el JRE como parte de paquetessoftware o plugins (o conectores) en un navegador Web. Sun ofrece tambin el SDK de Java 2, o JDK (JavaDevelopment Kit) en cuyo seno reside el JRE, e incluye herramientas como el compilador de Java, Javadoc paragenerar documentacin o el depurador. Puede tambin obtenerse como un paquete independiente, y puedeconsiderarse como el entorno necesario para ejecutar una aplicacin Java, mientras que un desarrollador debeadems contar con otras facilidades que ofrece el JDK.

  • Java (lenguaje de programacin) 20

    Componentes Bibliotecas de Java, que son el resultado de compilar el cdigo fuente desarrollado por quien implementa la JRE,

    y que ofrecen apoyo para el desarrollo en Java. Algunos ejemplos de estas bibliotecas son: Las bibliotecas centrales, que incluyen:

    Una coleccin de bibliotecas para implementar estructuras de datos como listas, arrays, rboles y conjuntos. Bibliotecas para anlisis de XML. Seguridad. Bibliotecas de internacionalizacin y localizacin.

    Bibliotecas de integracin, que permiten la comunicacin con sistemas externos. Estas bibliotecas incluyen: La API para acceso a bases de datos JDBC (Java DataBase Conectivity). La interfaz JNDI (Java Naming and Directory Interface) para servicios de directorio. RMI (Remote Method Invocation) y CORBA para el desarrollo de aplicaciones distribuidas.

    Bibliotecas para la interfaz de usuario, que incluyen: El conjunto de herramientas nativas AWT (Abstract Windowing Toolkit), que ofrece componentes GUI

    (Graphical User Interface), mecanismos para usarlos y manejar sus eventos asociados. Las Bibliotecas de Swing, construidas sobre AWT pero ofrecen implementaciones no nativas de los

    componentes de AWT. APIs para la captura, procesamiento y reproduccin de audio.

    Una implementacin dependiente de la plataforma en que se ejecuta de la mquina virtual de Java (JVM), que esla 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.

    APIsSun define tres plataformas en un intento por cubrir distintos entornos de aplicacin. As, ha distribuido muchas desus APIs (Application Program Interface) de forma que pertenezcan a cada una de las plataformas: Java ME (Java Platform, Micro Edition) o J2ME orientada a entornos de limitados recursos, como telfonos

    mviles, PDAs (Personal Digital Assistant), etc. Java SE (Java Platform, Standard Edition) o J2SE para entornos de gama media y estaciones de trabajo. Aqu

    se sita al usuario medio en un PC de escritorio. Java EE (Java Platform, Enterprise Edition) o J2EE orientada a entornos distribuidos empresariales o de

    Internet.Las clases en las APIs de Java se organizan en grupos disjuntos llamados paquetes. Cada paquete contiene unconjunto de interfaces, clases y excepciones relacionadas. La informacin sobre los paquetes que ofrece cadaplataforma 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 delprograma JCP (Java Community Process). Las compaas o individuos participantes del JCP pueden influir de formaactiva en el diseo y desarrollo de las APIs, algo que ha sido motivo de controversia.

  • Java (lenguaje de programacin) 21

    Extensiones y arquitecturas relacionadasLas extensiones de Java estn en paquetes que cuelgan de la raz javax: javax.*. No se incluyen en la JDK o elJRE. Algunas de las extensiones y arquitecturas ligadas estrechamente al lenguaje Java son: Java EE (Java Platform, Enterprise Edition; antes J2EE) para aplicaciones distribuidas orientadas al entorno

    empresarial

    Java en cdigo abiertoJava se ha convertido en un lenguaje con una implantacin masiva en todos los entornos (personales yempresariales). El control que mantiene Sun sobre ste ha generado reticencias en la comunidad de empresas confuertes intereses en Java (IBM, Oracle) y obviamente en la comunidad de desarrolladores de software libre.La evolucin basada en un comit en el que participen todos los implicados no es suficiente y la comunidaddemandaba desde hace tiempo la liberacin de las APIs y bibliotecas bsicas de la JDK.En diciembre de 2006, Sun Microsystems comenz el relanzamiento de su plataforma Java[36] bajo la licencia GPLde GNU.En abril de 2009 Oracle adquiri Sun Microsystems, lo que gener temor en la comunidad ante la posiblemercantilizacin del lenguaje de programacin orientado a objetos ms popular actualmente. Por ahora Oracle haseguido manteniendo Java, estando las versiones posteriores a la 6 bajo su control.Se instala una versin homebrew de PSPKVM (0.5.5) para emular la plataforma de Java en PSP. Esto permite usarprogramas JAVA en esta videoconsola.

    Alternativas libresExisten alternativas para el entorno de ejecucin y de desarrollo de Java con una gran cobertura de funcionalidadescon respecto a las implementaciones comerciales de Sun, IBM, Bea, etc.

    Crticas referentes a Java y el software libre Free But Shackled The Java Trap [37], de Richard Stallman, 12 de abril de 2004. (respuesta de James Gosling

    [38]) Traduccin al espaol de este artculo: Libre pero encadenado. La trampa del Java. [39] (Ntese que hay una

    nota en un recuadro amarillo que habla de la situacin actual con respecto a lo que se dice en ese artculo)Notar que este artculo fue escrito antes de la liberacin del cdigo fuente de Java. En la actualidad la postura de laFree Software Foundation y de Richard Stallman han cambiado[citarequerida], mostrndose partidarios ambos de suuso en software libre.

    Referencias Jon Byous, Java technology: The early years [40]. Sun Developer Network, sin fecha[ca. 1998]. Recuperado 21 de

    abril de 2005. James Gosling, A brief history of the Green project [41]. Java.net, sin fecha [ca. Q1/1998]. Recuperado 22 abril de

    2005. James Gosling, Bill Joy, Guy Steele, y Gilad Bracha, The Java language specification, tercera edicin.

    Addison-Wesley, 2005. ISBN 0-321-24678-0. Tim Lindholm y Frank Yellin. The Java Virtual Machine specification, segunda edicin. Addison-Wesley, 1999.

    ISBN 0-201-43294-3.

  • Java (lenguaje de programacin) 22

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

    Enlaces externosWikilibros Wikilibros alberga un libro o manual sobre Programacin en Java. Programas hechos en java con cdigo fuente (http:/ / torturo. com/ programas-hechos-en-java/ )

    Oracle - Sun Sitio oficial de Java para desarrolladores, etc (http:/ / java. sun. com/ ) The Java Language Specification, Tercera edicin (http:/ / java. sun. com/ docs/ books/ jls/ ) Especificacin

    oficial del lenguaje Java Tutorial de Sun sobre el Lenguaje de programacin Java (http:/ / java. sun. com/ docs/ books/ tutorial/ ) Libro blanco original de Java (http:/ / java. sun. com/ docs/ white/ langenv/ ), 1996

  • Java (lenguaje de programacin) 23

    Tutoriales Thinking in Java (http:/ / www. bruceeckel. com/ ), de Bruce Eckel (online) An introduction to Computer Science using Java (http:/ / programmedlessons. org/ java5) por Bradley Kjell. Java Course (http:/ / www. vias. org/ javacourse/ ), de A.B. Downey. Computer-Books.us (http:/ / www. computer-books. us/ java. php) Coleccin de libros sobre Java disponibles

    para descarga gratuita. En castellano:

    Coleccin Java a tope de libros electrnicos (http:/ / www. lcc. uma. es/ ~galvez/ ) (Universidad de Mlaga.Espaa)

    Curso de Java, de cero a hasta conexin a MYSQL, incluye PDF (http:/ / www. cursodejava. com. mx/ )(Mxico)

    Capacitacin en Java sobre Grandes Proyectos (http:/ / www. nullbrainexception. blogspot. com/ )

    Crticas Softpanorama Java Critique Page: Java vs Scripting Languages (http:/ / www. softpanorama. org/ Lang/ java.

    shtml), de Nikolai Bezroukov How Javas Floating-Point Hurts Everyone Everywhere (http:/ / www. cs. berkeley. edu/ ~wkahan/ JAVAhurt.

    pdf), de W. Kahan und Joseph D. Darcy en el ACM 1998 Workshop on Java for HighPerformance NetworkComputing

  • Fuentes y contribuyentes del artculo 24

    Fuentes y contribuyentes del artculoJava (lenguaje de programacin) Fuente: http://es.wikipedia.org/w/index.php?oldid=69904208 Contribuyentes: 2rombos, A. B. 10, ARHEKI, Aalku, Abgenis, Abrego, Adonaybn, Adrruiz,Adryitan, Alejandrosilvestri, Alex Buzeta, AlfredoMorales, Aliamondano, Almario 7, Alqadim, Amads, Amgomude, Andreasmperu, Angel GN, Angus, Argentumm, Ascnder, Aviguille,Axxgreazz, Baiji, Balderai, Batman325, Belb, Benek, Bernard, Bettinaberries, BuenaGente, Cabanyas, Camilo, Casidiablo, Ceballwiki, Centeno, Chiro79, Cinevoro, ColdWind, Comae, Cousteau,Cristian orioles, Cristianrock2, Ctrl Z, Cucaracha, CsarGuti, DJ Nietzsche, DMG, Dangertn, Delphidius, Dem, Denis32crack, Diegatxo, Diego.souto, DiegoBM, Diegusjaimes, Dlorah, Dodo,Doubledragon, Dr. Ricardo, Dusan, Ecemaml, Edtruji, Elmatoguevero, Elproferoman, Emijrp, Er Komandante, Ermey, Especiales, Especiall, FAR, Farisori, Federicotg, Fernandopcg, Fev,Fevero, Flashlack, FrancoGG, Franxiscokafran, Frurgr, Furti, Futbolero, GermanX, Greek, Guigar, Hades87, Helmy oved, Hiperfelix, Hispa, HodracirK, Horazzio, Hugg, Humbefa, Humberto,Hctor Arnau Aparicio, Icvav, Ignacio Icke, Ihavenomouth, Infosalle2011, Innv, Isha, Ivan rome, JMPerez, Jacobofandebillgates, Jaormazabal, Jarisleif, Jarke, Javierito92, Javierrami, Jesuja,Jkbw, JoaquinFerrero, JorSol, JorgeGG, Jorgechp, Jorgeeie, Joseagrc, Josemiguel93, Jstitch, Juan Mayordomo, Juancvasconez, Jugones55, Julioserrano, Jvlivs, Jynus, Kenshin 85, Kizar,Koko10ar, Kraft, Kroji, Laura Fiorucci, Leonpolanco, Lic. Armando, Linfocito B, Ljfeliu, Llopis73, Locos epraix, Locovich, Lourdes Cardenal, Lucien leGrey, Luigi1993ify, Luis.bernal,Magister Mathematicae, Malfer, ManuelGR, Mariano.iglesias, Mario.porras33, Marsal20, Matdrodes, MatiasBellone, Mdiagom, Milestones, Moonmaryhawke, Morbazan, Moriel, Mpadilla, Murode Aguas, NaSz, Netito777, Nicolapedia, NicolasAlejandro, Niqueco, Numbo3, Obelix83, Oblongo, Ocaso, Orgullomoore, Ortisa, Pablopv98, Paintman, Palmerabollo, Patrias, Pirenne, Piztu,Platonides, ProfesorFalken, Prugo, Pybalo, Plux, Qwertyytrewqqwerty, Racso, Rafa3040, Rafael Morais, Rbuj, Ricardo Moctezuma, Roberpl, Roberto Blandino C, Rodrigo.paillan,Rojoblandino, RoyFocker, Rsg, Sabbut, Saburto, Saloca, Sanbec, Sanderaco, Sanmiladsl, Santhy, Sauron, Savh, Sbassi, Sebrev, Sergio Yinyang, SergioVares, Shooke, Sirpuppet, Sixtop,Snakefang, Solde9, Speedplus, Stoleman, Sucoplus, SuperBraulio13, Superzerocool, TToniii, Tano4595, Thr41N, Toad32767, Tomatejc, Torturo, Tuxiano felipe, Txo, UA31, Uncorreotemporal,Unf, Vale Espin, Vatelys, Vigilante Satan, Vitamine, Waeswaes, Whibla, Wpersei, Writkas, Xerox 5B, Yakoo, Yrithinnd, Zeos, Zorosandro, 706 ediciones annimas

    Fuentes de imagen, Licencias y contribuyentesFile:Wave.svg Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Wave.svg Licencia: desconocido Contribuyentes: sbmehta converted to SVG from Sun Microsystems AI version.Archivo:Wikibooks-logo.svg Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Wikibooks-logo.svg Licencia: logo Contribuyentes: User:Bastique, User:Ramac et al.

    LicenciaCreative Commons Attribution-Share Alike 3.0//creativecommons.org/licenses/by-sa/3.0/

    Java (lenguaje de programacin)Historia Filosofa Orientado a objetos Independencia de la plataforma El recolector de basura

    Sintaxis Aplicaciones autnomas Applets Servlets Aplicaciones con ventanas

    Entornos de funcionamiento En dispositivos mviles y sistemas empotrados En el navegador web En sistemas de servidor En aplicaciones de escritorio Plataformas soportadas

    Programacin Expresiones Operadores Operadores a nivel de bit

    Precedencia de operadores Sentencias Conversin de tipos

    Industria relacionada Crticas General El lenguaje Apariencia Rendimiento

    Recursos JRE Componentes APIs Extensiones y arquitecturas relacionadas

    Java en cdigo abierto Alternativas libres Crticas referentes a Java y el software libre

    Referencias Notas Enlaces externos Oracle - Sun Tutoriales Crticas

    Licencia