Java | ||
Fecha de la primera versión | 1995 | |
---|---|---|
Paradigma | Orientado a objetos , estructurado , imperativo , funcional | |
Autor | Microsistemas solares | |
Desarrolladores | Oracle Corporation | |
Última versión | Java SE 16.0.1 (20 de abril de 2021) | |
Mecanografía | Estático , fuerte , seguro , nominativo | |
Influenciado por | Objective-C , C ++ , Smalltalk , Eiffel , Ada 83 , Mesa , Modula-3 , Oberon , UCSD Pascal | |
Influenciado | C # , J # , Ada 2005 , Gambas , BeanShell , Clojure , ECMAScript , Groovy , JavaScript , PHP , Kotlin , Python , Scala , Seed7 , Vala , Processing | |
Implementaciones | Lista de JVM | |
Sistema de explotación | Multiplataforma | |
Licencia | GNU GPLV2 + CPE | |
Sitio web | www.oracle.com/java/technologies | |
Extensión de archivo | java, class, jar, jad y jmod | |
Java es un lenguaje de programación orientado a objetos creado por James Gosling y Patrick Naughton , empleados de Sun Microsystems , con el apoyo de Bill Joy (cofundador de Sun Microsystems en 1982 ), presentado oficialmente en23 de mayo de 1995en SunWorld .
La compañía Sun luego fue comprada en 2009 por la compañía Oracle , que ahora posee y mantiene Java .
Una peculiaridad de Java es que el software escrito en este lenguaje se compila en una representación binaria intermedia que se puede ejecutar en una máquina virtual Java (JVM) sin importar el sistema operativo .
El lenguaje Java se hace cargo en gran medida de la sintaxis del lenguaje C ++ . Sin embargo, Java ha sido despojado de los conceptos más sutiles de C ++ y tanto de los más confusos, como punteros y referencias, como de la herencia múltiple omitida por la implementación de interfaces . Asimismo, desde la versión 8, la llegada de interfaces funcionales introduce la herencia múltiple (sin la gestión de atributos) con sus ventajas y desventajas como la herencia de diamantes . Los diseñadores favorecieron el enfoque orientado a objetos para que en Java todo sea objeto, excepto los tipos primitivos ( enteros , números de coma flotante, etc.) que, sin embargo, tienen sus variantes que heredan del objeto Object (Integer, Float, ...).
Java le permite desarrollar aplicaciones cliente-servidor . Del lado del cliente, los applets son el origen de la notoriedad del idioma. Es especialmente en el lado del servidor donde Java se ha impuesto en el mundo empresarial gracias a los servlets , el lado del servidor de los applets y, más recientemente, JSP ( JavaServer Pages ) que puede reemplazar a PHP , ASP y ASP.NET .
Java dio origen a un sistema operativo ( JavaOS ), entornos de desarrollo ( eclipse / JDK ), máquinas virtuales ( MSJVM (en) , JRE ) aplicación multiplataforma ( JVM ), una variación para dispositivos móviles / embebidos ( J2ME ), una aplicación gráfica biblioteca de diseño de interfaces ( AWT / Swing ), aplicaciones pesadas (Jude, Oracle SQL Worksheet, etc.), tecnologías web (servlets, applets) y una variación para la empresa ( J2EE ). La portabilidad del código de bytes de Java está garantizada por la máquina virtual de Java y posiblemente por las bibliotecas estándar incluidas en un JRE. Esta máquina virtual puede interpretar el código de bytes o compilarlo sobre la marcha en lenguaje de máquina. La portabilidad depende de la portabilidad de las JVM en cada sistema operativo.
El lenguaje Java proviene de un proyecto de Sun Microsystems que data de 1990: el ingeniero Patrick Naughton no estaba satisfecho con el lenguaje C ++ utilizado en Sun, sus interfaces de programación en lenguaje C, así como las herramientas asociadas. Mientras consideraba una migración a NeXT, se le ofreció la oportunidad de trabajar en una nueva tecnología y así nació el Stealth Project ( sigilo ).
El Proyecto Stealth pasó rápidamente a llamarse Proyecto Verde con la llegada de James Gosling y Mike Sheridan. Juntos, con la ayuda de otros ingenieros, comenzaron a trabajar en una oficina en Sand Hill Street en Menlo Park , California . Intentaron desarrollar tecnología para el desarrollo de aplicaciones de próxima generación, ofreciendo a Sun la perspectiva de oportunidades únicas.
El equipo inicialmente planeó usar el lenguaje C ++, pero lo abandonó por diferentes razones. En primer lugar, estaban desarrollando en un sistema integrado con recursos limitados y sentían que el uso de C ++ requería demasiada inversión y que esta complejidad era una fuente de error para los desarrolladores. La falta de recolección de basura hizo que la gestión de la memoria tuviera que programarse manualmente, un desafío pero también una fuente de errores.
El equipo tampoco estaba satisfecho con las deficiencias del lenguaje C ++ en términos de seguridad, programación distribuida y subprocesos múltiples . Además, querían una plataforma que pudiera adaptarse a cualquier tipo de dispositivo o plataforma.
Bill Joy había previsto un nuevo lenguaje que combina el mejor lenguaje de programación Mesa (en) y el lenguaje C . En un artículo llamado Más ( más ) , propuso a Sun que sus ingenieros estén desarrollando un entorno orientado a objetos basado en C ++. Originalmente, Gosling planeaba modificar y mejorar el lenguaje C ++, al que llamó C ++ ++, pero la idea pronto se abandonó a favor del desarrollo de un nuevo lenguaje de programación al que llamaron Oak. ( Oak ) en referencia, según la leyenda, a un árbol plantado frente a la ventana de su oficina .
El equipo trabajó duro y, en el verano de 1992, pudieron demostrar una plataforma que incluía el sistema operativo Green , el lenguaje Oak (1992), bibliotecas y hardware. Su primer logro, presentado en3 de septiembre de 1992, fue la construcción de una PDA llamada Star7 que tiene una interfaz gráfica y un agente inteligente llamado Duke para ayudar al usuario.
En noviembre del mismo año, Green Project se suspendió para convertirse en FirstPerson, Inc. , propiedad total de Sun Microsystems, y el equipo se trasladó a Palo Alto. El equipo de FirstPerson estaba interesado en crear herramientas altamente interactivas y cuando Time Warner convocó a licitación para un decodificador multifunción, FirstPerson cambió su enfoque para ofrecer dicha plataforma.
Sin embargo, la industria de la televisión por cable descubrió que ofrecía demasiadas opciones para el usuario y FirstPerson perdió el mercado frente a Silicon Graphics . Incapaz de interesar a la industria audiovisual, la empresa se reintegró a Sun.
Junio a Julio de 1994, después de tres días de lluvia de ideas con John Gage, James Gosling, Joy, Naughton, Wayne Rosing y Eric Schmidt , el equipo reorientó la plataforma en la web . Creían que con la llegada del navegador Mosaic , Internet era el lugar para desarrollar el mismo tipo de herramienta interactiva que imaginaban para la industria del cable. Naughton desarrolló como prototipo un pequeño navegador web, WebRunner, que luego se convertiría en HotJava .
El mismo año, el lenguaje pasó a llamarse Java después de que se descubrió que el nombre Oak ya estaba siendo utilizado por un fabricante de tarjetas de video.
Origen del nombre JavaEl nombre "Java" no es un acrónimo , se eligió durante la lluvia de ideas para reemplazar el nombre original "Oak" , debido a un conflicto con una marca existente, porque el café ( "java" en la jerga estadounidense) es la bebida favorita de muchos programadores. . El logo elegido por Sun es también una taza de café humeante.
Lanzamiento público de JavaEn Octubre de 1994, HotJava y la plataforma Java se presentaron para Sun Executives . Java 1.0a estaba disponible para su descarga en 1994, pero la primera versión pública del navegador HotJava llegó en23 de mayo de 1995en la conferencia SunWorld .
El anuncio fue realizado por John Gage, director científico de Sun Microsystems. Su anuncio fue acompañado por el anuncio sorpresa de Marc Andressen, vicepresidente del ejecutivo de Netscape, de que Netscape iba a incluir soporte de Java en sus navegadores. La9 de enero de 1996, el grupo Javasoft fue formado por Sun Microsystems para desarrollar esta tecnología. Dos semanas después, estaba disponible la primera versión de Java.
La aparición de la versión 1.2 del lenguaje marca un punto de inflexión significativo: fue en 2000 cuando la versión apareció simultáneamente en dos plataformas Java:
Sun luego los califica como una plataforma Java 2 a diferencia de las primeras generaciones 1.0 y 1.1. Todas las versiones posteriores, desde J2EE 1.2 hasta Java SE o Java EE 7, siguen siendo conocidas como plataformas Java 2, aunque desde entonces la '2' ha sido descontinuada oficialmente.
Applets
Históricamente, la capacidad de los navegadores web para ejecutar subprogramas Java era la única solución para mostrar aplicaciones de cliente enriquecidas (RIA para aplicaciones de Internet enriquecidas ). Luego surgieron tecnologías de la competencia, como Macromedia Flash , DHTML JavaScript , Silverlight basado en XAML o Xul .
Los subprogramas en la estación de trabajo del Cliente pueden comunicarse con los servlets en el Servidor, al igual que Javascript puede comunicarse con el Servidor por medio de AJAX . Flex utiliza tecnología Flash a través de Adobe Flash Player .
En una era en la que JavaScript sufría de problemas de compatibilidad entre navegadores, los subprogramas de Java tenían la ventaja de la portabilidad porque la portabilidad de interfaces complejas era difícil para todos los navegadores del mercado.
Además de las consecuencias de la "moda" de Java, el progreso realizado en tecnologías que compiten con Java ha llevado a la mayoría de los desarrolladores a alejarse de los subprogramas de Java y los problemas inherentes a esta tecnología (incompatibilidades entre JVM, rendimiento deficiente, bibliotecas deficientes. Gráficos, complejidad ). Finalmente, los navegadores modernos ya no incluyen sistemáticamente el entorno Java debido a su gran tamaño, y la tasa de máquinas capaces de mostrar subprogramas fue solo del 70% en 2010, mucho más bajo que para Flash, por ejemplo. En 2010, casi todas las aplicaciones de cliente enriquecido utilizaron tecnologías alternativas; Flash en su mayor parte pero también GWT .
Finalmente, la llegada de HTML5 , destinado a integrar muchas características multimedia y RIA , también hace que los applets sean obsoletos.
JavaFX
Con la aparición de Java 8 en Marzo del 2014, JavaFX se convierte en la herramienta oficial de creación de kits de herramientas de interfaz gráfica de usuario de Java, para todo tipo de aplicaciones (aplicaciones móviles, aplicaciones de escritorio, aplicaciones web, etc.), y el desarrollo de su predecesor Swing se descontinúa (excepto por la corrección de errores). JavaFX es una API de Java pura (el lenguaje de scripting específico que se asoció con él durante un tiempo ahora está abandonado). JavaFX contiene una amplia variedad de herramientas, que incluyen medios de audio y video, gráficos 2D y 3D, programación web , programación paralela y más.
Lado del servidorCon los servidores de aplicaciones , los EJB se utilizan para encapsular las clases definidas previamente. Estos elementos se utilizan en arquitecturas J2EE para aplicaciones multicapa. La ventaja que obtenemos de este trabajo es poder ocultar la implementación del código del lado del servidor al cliente.
Uso de la estación de trabajoEl uso nativo del lenguaje Java para aplicaciones en una estación de trabajo se mantuvo hasta ahora relativamente raro debido a su falta de velocidad. Sin embargo, con el rápido aumento de la potencia de las computadoras, las mejoras durante la década del 2000 en la máquina virtual Java y en la calidad de los compiladores, varias tecnologías han ganado terreno como NetBeans y el entorno Eclipse , las tecnologías de archivos compartidos LimeWire , Vuze (ex Azureus) e I2P . Java también se utiliza en el programa de matemáticas MATLAB , a nivel de interfaz hombre-máquina y para álgebra informática. Las aplicaciones swing también están surgiendo como una alternativa a la tecnología .NET.
Usar con móvilesOracle anuncia inicioOctubre 2012en la conferencia JavaOne su deseo de ofrecer soluciones Java para el campo del software embebido, para procesadores menos potentes que los habitualmente disponibles en las PC. Oracle reúne todo un ecosistema de empresas especializadas en estos segmentos de mercado, como la editorial MicroEJ o incluso STMicroelectronics que ofrece Java en sus STM32 cuyo núcleo es un CortexM3 / M4.
Java, en particular a través de Eclipse y NetBeans , ya ofrece entornos de desarrollo integrados para dispositivos móviles. Java es el lenguaje principal utilizado para desarrollar aplicaciones para el sistema operativo gratuito de Google para dispositivos móviles : Android .
JavaFX también puede habilitar el uso de Java en móviles, aunque este no es su propósito principal.
Sistema operativo Windows, Mac OS X y GNU / LinuxMicrosoft proporcionó en 2001 un entorno de trabajo de tipo Java, llamado J ++ , con sus sistemas operativos antes del lanzamiento de Windows XP . Tras una decisión judicial , y ante el incumplimiento de las especificaciones de este lenguaje, Microsoft tuvo que abandonar este y crear un nuevo lenguaje, denominado C # (ver capítulo " Independencia vis-à-vis la plataforma " más bajo)
Muchos fabricantes de computadoras continúan incluyendo un entorno JRE en sus sistemas Windows.
Java también aparece como estándar en Mac OS X de Apple , así como para distribuciones Linux . Entonces, hoy en día, la mayoría de los usuarios pueden ejecutar aplicaciones Java sin ningún problema. Sin embargo, en las computadoras Apple, la distribución de Java 5 a Java 6 fue manejada directamente por Apple y no por Oracle. Esta política resultó en retrasos y restricciones de versión:
Por lo tanto, J2SE 1.4 no estaba disponible antes de Mac OS X v10.2 (nombre en clave Jaguar ), J2SE 5.0 de Mac OS X v10.4 ( Tiger ), Java SE 6 solo funciona en Mac OS X v10.5 ( Leopard ) equipado con un El procesador Intel y Java 7 requieren una computadora Mac Intel que ejecute Mac OS X v10.7 .3 ( Lion ).Licencias de código abiertoLa 11 de noviembre de 2006, el código fuente del compilador javac y la máquina virtual HotSpot se publicaron como código abierto bajo la licencia pública general GNU .
La 13 de noviembre de 2006, Sun Microsystems anuncia el paso de Java, es decir el JDK (JRE y herramientas de desarrollo) y los entornos Java EE (ya bajo licencia CDDL) y Java ME bajo licencia GPL de aquíMarzo de 2007, bajo el nombre del proyecto OpenJDK .
En Mayo de 2007, Sun lanza OpenJDK con una licencia gratuita. Sin embargo, OpenJDK todavía depende de fragmentos de código no libre que Sun no posee. Es por eso que la empresa Redhat se lanza enjunio de 2007el proyecto IcedTea (en) que tiene como objetivo reemplazar los fragmentos de código no libre y así hacer que OpenJDK sea utilizable sin ningún software propietario. Enjunio 2008, el proyecto IcedTea ha superado rigurosas pruebas de compatibilidad con Java (TCK). Por tanto, IcedTea es una implementación de código abierto de las especificaciones de Java. Sin embargo, Sun, luego Oracle, retiene el control de la tecnología a través de un catálogo de patentes que se aplican a Java, así como al mantener TCK bajo una licencia propietaria.
Adquisición por OracleLa empresa Oracle adquirió en 2009 la empresa Sun Microsystems . Ahora podemos ver el logotipo de Oracle aparecer en la documentación de la API de Java.
La 12 de abril de 2010, James Gosling , el creador del lenguaje de programación Java, renuncia a Oracle por razones que no desea revelar. Se había convertido en el director de tecnología de la división de software cliente de Oracle.
En 2018, Oracle anunció que las actualizaciones de su versión Java SE 8 para uso profesional estarían sujetas a una licencia paga deenero 2019.
El lenguaje Java ha experimentado varias evoluciones desde JDK 1.0 ( Java Development Kit ) con la adición de muchas clases y paquetes a la biblioteca estándar. Desde J2SE1.4, la evolución de Java está liderada por el JCP ( Java Community Process ) que utiliza JSR ( Solicitudes de especificaciones de Java ) para proponer adiciones y cambios en la plataforma Java. El lenguaje en sí está especificado por Java Language Specification (JLS ), y los cambios en JLS se manejan bajo el código JSR 901.
Cabe destacar que las sucesivas evoluciones del lenguaje apenas se relacionan con su sintaxis - relativamente estable desde el inicio - pero principalmente con el enriquecimiento de sus funciones, con el embarque y la optimización de librerías de software ( API ) en muy campos. : bases de datos, gestión XML, informática distribuida y web, multimedia, seguridad, etc.
Numeración de versionesDebemos distinguir la versión del lenguaje Java de las de las plataformas y el JRE:
A veces se pueden ofrecer dos versiones simultáneamente, como 8u65 y 8u66: la diferencia generalmente consiste en correcciones de errores menores (sin impacto de seguridad en particular), para las cuales la actualización a la última versión no es crítica y, por lo tanto, se deja a elección de los administradores. (JRE) o desarrolladores (JDK).
Las versiones públicas de Java pueden ir seguidas de versiones no públicas, llamadas Avanzadas, reservadas para uso comercial; por lo tanto, Java 1.6u45 es la última versión pública de Java6, pero 6u113 es la última versión disponible.marzo de 2016.
Versión | Última versión | Nombre JSE / JRE | Nombre clave | Especificación | JDK | Estado octubre 2018 | Periodo de mantenimiento | Soporte extendido |
---|---|---|---|---|---|---|---|---|
1.0 | 1.0.2 | Java 1.0 | roble | JSR 52 | JDK 1.0.2 | Ya no se apoya activamente | 1996-2000 | |
1.1 | 8_16 | Java 1.1 | JSR 52 | 1.1.8_16 | Ya no se apoya activamente | 1997-2000 | ||
1.2 | 2_017 | J2SE 1.2 | Patio de recreo | JSR 52 | 1.2.2_11 | Ya no se apoya activamente | 2000-2006 | |
1.3 | 1_29 | J2SE 1.3 | Cernícalo | JSR 58 | 1.3.1_29 | Obsoleto | 2000-2001 | |
1.4 | 2_30 | J2SE 1.4 | Esmerejón | JSR 59 | 1.4.2_30 | Obsoleto | 2000-2008 | |
1,5 | 0_22 a 0_85 | J2SE 5.0 | Tigre | JSR 176 | 1.5.0_22 | En desuso, 5u51 a 5u85 solo disponible con soporte específico de Oracle | 2002-2009 | Mayo de 2015 |
1,6 | 0_45 a 0_111 | Java SE 6 | Mustango | JSR 270 | 6u113 | En desuso, 6u51 a 6u111 solo disponible con soporte específico de Oracle | 2005-2013 | Diciembre de 2018 |
1,7 | 0_79 a 0_80 | Java SE 7 | Delfín | JSR 336 | 1.7.0_79 | Estable, versión 1.7.0_79 | 2011-2015 | Julio 2022 |
1.8 | 0_171 | Java SE 8 | Kenai luego Spider | JSR 337 | 1.8.0_171 | Estable, versión 1.8.0_171 ofrecida a los usuarios | 2014-Sep2018 | Julio de 2019 |
9 | 9.0.4 | Java SE 9 | Paraguas | JSR 379 | 9.0.4 | Estable | 2018-? | |
10 | 10.0.1 | Java SE 10 | JSR 383 | 10.0.1 | compatible 6 meses antes del próximo lanzamiento de JDK Java11-LTS | 2018, no una versión LTS (soporte a largo plazo) | ||
11 | 11.0.1 | Java SE 11 | JSR 384 | 11.0.1 | Versión LTS | 2023 | 2026 | |
12 | 12.0.2 | Java SE 12 | JSR 386 | 12.0.2 | ||||
13 | Java SE 13 | JSR 388 | 13,0 | |||||
14 | Java SE 14 | JSR 389 | 14.0.1 |
Aquí solo se enumeran los números de versión más recientes de cada lanzamiento. Los detalles de las sucesivas modificaciones por versión y por actualización se pueden encontrar en wikipedia.en / java_history .
Contenido y desarrollos De JDK 1.0 a J2SE 1.4Publicado el 30 de septiembre de 2004(3270 clases e interfaces), su nombre en clave es Tiger . Inicialmente tiene el número 1.5, que siempre se utiliza como número de versión interno. Desarrollado por (en) JSR 176 , Tiger agregó una cantidad significativa de nuevas características al lenguaje:
Este ejemplo itera a través del contenido del objeto widgets de la clase Iterable y contiene solo referencias a objetos de la clase Widget, asigna cada uno de estos elementos a la variable w y luego llama al método display () en el elemento w (especificado en JSR 201). En 2011 se introducirá una sintaxis similar en C ++ 11 .
Además de los cambios de idioma, se han producido cambios más significativos a lo largo de los años que han llevado de unos pocos cientos de clases en JDK 1.0 a más de 3.000 en J2SE 5.0. Se han agregado API completas, como Swing o Java2D, y muchos métodos del JDK 1.0 original se han declarado en desuso (es decir, en desuso, podrían eliminarse en una versión posterior de Java).
Java SE 6Publicado el 11 de diciembre de 2006(3,777 clases e interfaces en más de 20 paquetes), su nombre en clave es Mustang . Se lanzó una versión beta el15 de febrero de 2006, otra beta en junio de 2006, una versión " candidata a lanzamiento " enNoviembre de 2006, y la versión final en 12 de diciembre de 2006. Con esta versión, Sun cambia permanentemente el nombre J2SE a Java SE y elimina el .0 del número de versión.
Esta versión ha sido objeto de numerosos agujeros de seguridad y sus actualizaciones correctivas, lo que ha llevado a la versión 1.6.0_45 de Oracle e incluso a la 1.6.0_51 para su versión Mac OS. Esta es también la última versión de Java que se ejecuta para Mac OS X 10.6 y versiones anteriores.
Java SE 7Publicado el 7 de julio de 2011(8000 clases e interfaces), su nombre en clave es Dolphin . Esta es la primera versión bajo la licencia GNU GPL .
Desde la actualización 6 (7u6), la edición estándar de Oracle de Java nuevamente es totalmente compatible con Mac OS X, las actualizaciones para este sistema operativo ya no son compatibles con Apple sino con Oracle. Sin embargo, esta versión de Java no es compatible con Mac OS X v10.6 : de hecho, Apple ha incluido algunas API requeridas por Java 7 en Mac OS X 10.7.3, pero no se espera que se implementen en versiones anteriores de Mac OS. La versión 7u90 deabril 2015 es la última actualización disponible públicamente de Java 7.
Java 7 ofrece las siguientes características nuevas, entre otras:
Nombre en clave Kenai. Varias versiones en desarrollo del JDK están disponibles para su descarga en el otoño de 2013, y Java 8 se lanza a mediados deMarzo del 2014de acuerdo con una hoja de ruta presentada por Oracle desdeMayo 2013.
Una de las principales novedades de esta versión es la incorporación de lambdas , lo que lleva a un rediseño de parte de la API, en particular las colecciones y la noción de flujo . Otras adiciones notables incluyen opciones, implementaciones predeterminadas dentro de una interfaz, un rediseño de la API de fecha y más. Por otro lado, la versión Enterprise Edition (Java 8 EE) no se espera antes de 2017.
La modularización de la JVM con el proyecto Jigsaw , inicialmente prevista para esta versión, se pospone por su parte a la versión 9, en particular debido a las vulnerabilidades de seguridad encontradas por Java 6, que Oracle prefirió corregir en 2013 sobre las evoluciones de Java.
Java SE 9Originalmente programada para 2015, pero pospuesta en parte debido al proyecto Jigsaw, esta versión finalmente se lanzó el 21 de septiembre de 2017.
Java 9 integra:
Esta versión fue lanzada el 20 de marzo de 2018.
Esta nueva versión incluye en particular:
Esta versión fue lanzada el 25 de septiembre de 2018.
Más allá del cambio en el modelo de soporte de la versión a largo plazo, esta versión incluye notablemente:
Esta versión fue lanzada el 19 de marzo de 2019.
Esta versión integra 8 evoluciones:
Esta versión fue lanzada el 17 de septiembre de 2019.
Esta versión fue lanzada el 17 de marzo de 2020
Esta versión fue lanzada el 15 de septiembre de 2020.
Java SE 16Esta versión fue lanzada el 16 de marzo de 2021.
Cuando se creó el lenguaje Java, se decidió que este lenguaje debía cumplir cinco objetivos:
La primera característica, el carácter coloquial y orientado a objetos ("OO"), se refiere a un método de programación y diseño del lenguaje y al hecho de que un programa escrito en Java es bastante similar a un programa escrito en C ++ .
Aunque existen varias interpretaciones de la expresión orientada a objetos , una idea clave en este tipo de desarrollo es que los diferentes tipos de datos deben estar directamente asociados a las diferentes operaciones que se pueden realizar sobre esos datos. Como resultado, los datos (llamados Propiedades ) y el código que los manipula (llamados Métodos ) se combinan en una sola entidad llamada Clase de Objeto. El código se divide lógicamente en pequeñas entidades coherentes y, por lo tanto, se vuelve más simple de mantener y más fácilmente reutilizable, siendo inherentemente modular.
Otros mecanismos como la herencia permiten explotar todas las características de una Clase previamente escrita en sus propios programas sin siquiera tener que conocer su funcionamiento interno - solo se ve la interfaz (la interfaz descrita, propiedades y métodos sin proporcionar el código asociado) . Java prohíbe la noción de herencia de varias clases padre a menos que sean interfaces.
En la versión 1.5 del lenguaje se agregaron los genéricos , un mecanismo de polimorfismo similar (pero diferente) a las plantillas del lenguaje C ++ oa los functores OCaml . Los genéricos permiten expresar de forma más sencilla y segura (desde el punto de vista de la mecanografía) las propiedades de objetos como contenedores (listas, árboles, etc.): el tipo lista se considera entonces genéricamente comparado con el tipo d ' objeto contenido en la lista.
Este elemento contribuye a la robustez y el rendimiento de los programas, el Garbage Collector es llamado de forma regular y automática durante la ejecución del programa. En varios procesadores y / o sistemas de múltiples núcleos , esto incluso emplea múltiples de baja prioridad hilos con el fin de interrumpir la ejecución del programa tan poco como sea posible. Además, el programador puede sugerir ejecutar el recolector de basura usando el método System.gc () si es necesario .
Una queja recurrente contra lenguajes como C ++ es la onerosa tarea de tener que programar manualmente la gestión de la memoria. En C ++, la memoria asignada por el programa para crear un objeto se desasigna cuando se destruye (por ejemplo, mediante una llamada explícita al operador de eliminación ). Si el programador se olvida de codificar la desasignación, esto da como resultado una " pérdida de memoria " y el programa consume cada vez más. Peor aún, si un programa solicita por error la desasignación varias veces o utiliza un área de la memoria después de solicitar la desasignación, lo más probable es que se vuelva inestable y provoque un error fatal.
En Java, muchos de estos problemas se evitan mediante la recolección de basura . El espacio de memoria necesario para cada objeto creado se gestiona en un montón de memoria (en inglés : memory heap ) reservado para este propósito. El programa accede a cada objeto a través de una referencia en el montón. Cuando ya no hay ninguna referencia para alcanzar un objeto, el recolector de basura lo destruye automáticamente, ya que se ha vuelto inaccesible, liberando memoria y evitando así cualquier fuga de memoria.
El recolector de basura utiliza un algoritmo de etiquetado y liberación (en inglés : mark and sweep ) para administrar casos complejos de objetos que hacen referencia entre sí o bucles de referencias (para un ejemplo de doble encadenamiento de listas ). En la práctica, aún existen casos de error de programación donde el recolector de basura considera que un objeto sigue siendo útil mientras el programa ya no accede a él funcionalmente (pero mantiene una referencia al objeto), lo que constituye un caso particular de " fuga de memoria ".
La recolección de basura hace que la administración de la memoria sea notablemente más fácil y segura. Los diseñadores y usuarios de programas o bibliotecas no tienen que preocuparse por la desasignación de objetos (operador de eliminación en C ++), excepto posiblemente por razones de rendimiento.
La independencia de la plataforma significa que los programas escritos en Java funcionan de manera muy similar en diferentes arquitecturas de hardware. Por tanto, la licencia de Sun para Java insiste en que todas las implementaciones deben ser compatibles. En teoría, podemos así realizar el desarrollo en una arquitectura dada y ejecutar la aplicación final en todas las demás.
Este resultado se obtiene por:
Tenga en cuenta que incluso si hay explícitamente una primera fase de compilación, el código de bytes de Java es interpretado o convertido sobre la marcha en código nativo por un compilador sobre la marcha ( justo a tiempo , JIT).
Tipos de compilacionesLas primeras implementaciones del lenguaje utilizaron una máquina virtual interpretada para lograr la portabilidad. Estas implementaciones produjeron programas que se ejecutaron más lentamente que los escritos en un lenguaje compilado (C, C ++, etc.) por lo que el lenguaje sufrió una reputación de bajo rendimiento.
Las implementaciones más recientes de Java Virtual Machine (JVM) producen programas mucho más rápido que antes, utilizando diferentes técnicas:
Después de que Sun descubrió que la implementación de Microsoft no era compatible con las interfaces RMI y JNI , y tenía elementos específicos de la plataforma en comparación con su plataforma original, Sun presentó una demanda contra Microsoft y obtuvo daños (20 millones de dólares). Este acto de justicia endureció aún más los términos de la licencia de Sun. En respuesta, Microsoft descontinuó el soporte para Java en sus plataformas, y en las versiones recientes de Windows Internet Explorer no es compatible con los subprogramas de Java sin agregar complementos. Sin embargo, Sun hace que los entornos de ejecución de Java estén disponibles de forma gratuita para las distintas plataformas de Microsoft.
La portabilidad es técnicamente un objetivo difícil de alcanzar y el éxito de Java en esta área ha sido desigual. Si bien es posible escribir programas para la plataforma Java que funcionen bien en muchas máquinas de destino, la gran cantidad de plataformas con pequeños errores e inconsistencias ha resultado en un uso indebido del eslogan de Sun " Escriba una vez, ejecute en cualquier lugar " ( "Escriba una vez, ejecutar en cualquier lugar " ) para " escribir una vez, depurar en todas partes " ( " Escribir una vez, depurar en todas partes " ).
Sin embargo, la independencia de la plataforma de Java es exitosa con aplicaciones del lado del servidor como servicios web, servlets y Java Beans, así como sistemas integrados en OSGi, utilizando el entorno Java integrado .
La plataforma Java fue uno de los primeros sistemas en ofrecer soporte para ejecutar código desde fuentes remotas. Un subprograma puede ejecutarse en el navegador web de un usuario, ejecutando código descargado de un servidor HTTP . El código de un subprograma funciona en un espacio muy restrictivo, lo que protege al usuario de códigos incorrectos o maliciosos. Este espacio está delimitado por un objeto denominado administrador de seguridad . Dicho objeto también existe para el código local, pero por defecto está inactivo.
El administrador de seguridad (la clase SecurityManager ) le permite definir un cierto número de autorizaciones para usar los recursos del sistema local (sistema de archivos, red, propiedades del sistema, etc.). Una autorización define:
Los editores de subprogramas pueden solicitar un certificado que les permita firmar digitalmente un subprograma como seguro, dándoles potencialmente (con la autorización adecuada) permiso para salir del espacio restrictivo y acceder a los recursos del sistema local.
A continuación, se muestra un ejemplo de un programa típico de Hello world escrito en Java:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } }El archivo fuente casi siempre lleva el nombre de la clase con la extensión ".java" (aquí "HelloWorld.java", incluso sería obligatorio porque la clase tiene el atributo público en su declaración, lo que lo hace accesible para todos los demás programas) . Podemos compilar y luego ejecutar este ejemplo en la terminal con los siguientes comandos (en Linux ):
javac HelloWorld.java export CLASSPATH=. java HelloWorldLa línea “ export CLASSPATH =. Se usa para decirle a Java que también debe buscar programas de clase en el directorio actual. Esta ruta también se puede especificar al iniciar el programa usando la opción -classpath (o -cp para abreviar):
java -cp. HelloWorldNotas:
( fuente )
Una clase es la descripción de datos llamados atributos y de operaciones llamadas métodos. Esta es una plantilla de definición para objetos con el mismo conjunto de atributos y el mismo conjunto de operaciones. A partir de una clase podemos crear uno o más objetos por instanciación; cada objeto es una instancia de una sola clase.
Visibilidad:
Un atributo se define dando su tipo, luego su nombre y posiblemente una parte de inicialización.
Visibilidad:
Un método se define por:
Visibilidad:
apellido | Tamaño en bytes durante los cálculos | Valor por defecto | Valores posibles |
---|---|---|---|
booleano | Un solo bit es suficiente, pero a menudo reservamos un byte para almacenarlos. | false | true, false |
byte | 1 | 0 | enteros entre -128 y +127 (-2 7 y 2 7 -1) |
pantalones cortos | 2 | 0 | enteros entre −32 768 y 32 767 (-2 15 y 2 15 -1) |
En t | 4 | 0 | números enteros entre -2 147 483 648 y 2 147 483 647 (-2 31 y 2 31 -1) |
largo | 8 | 0 | números enteros entre -9 223 372 036 854 775 808 y 9 223 372 036 854 775 807 (-2 63 y 2 63 -1) |
tanque | 2 | '\u0000' | Todos los valores Unicode (valores U + U + 0000 a FFFF, 4 dígitos requieren después '\u') Los primeros 128 caracteres son códigos ASCII y apóstrofes nota: 'a', '1', '\'', '\n'. |
flotador | 4 | 0.0 | Conjunto de números [−3,402 823 47 × 10 38 .. −1,402 398 46 × 10 −45 ], 0, [1,402 398 46 × 10 −45 .. 3,402 823 47 × 10 38 ] |
doble | 8 | 0.0 | Conjunto de números [−1,797 693134862315 70 × 10 308 .. −4,940 656458412465 44 × 10 −324 ], 0, [4,940 656458412465 44 × 10 −324 .. 1,797 693134862315 70 × 10.308 ] |
Objeto | Depende de la máquina virtual | null |
La tabla anterior enumera los tipos básicos, sin embargo, hay otros tipos en Java que son objetos y deben usarse como tales. Por ejemplo para definir un entero podemos usar el tipo 'Integer' cuyo valor de inicialización por defecto seránull
Para instanciar una variable, la sintaxis (aquí la misma que en C) es la siguiente:
NomDuType maVariable;myVariable luego se asigna en la pila.
A menudo es necesario almacenar una gran cantidad de datos en colecciones: lista de compras, notas de los estudiantes, etc. Las colecciones se pueden visualizar, modificar, ordenar, copiar, borrar, etc. Pueden tener un tamaño fijo o variable.
Las colecciones de tamaño fijo son más ligeras que las colecciones de tamaño variable.
Colecciones de tamaño fijoLa clase abstracta AbstractListse proporciona para implementar colecciones de tamaño variable.
Para inicializar una ArrayList tienes que importar la clase java.util.ArrayListy escribir liste = new ArrayList<T>();o liste = new ArrayList<>(); desde JDK 7.0.
Desde JDK 1.5, tenemos la posibilidad de indicar el tipo de elementos contenidos en una ArrayList: enteros, cadenas de caracteres u otros objetos.
Para agregar un elemento escribimos liste.add(Objet);
Para acceder a un elemento de ArrayList: liste.get(index);
Para averiguar la cantidad de elementos que contiene una lista: liste.size();
Para eliminar un elemento: liste.remove(index);los elementos que siguen al elemento eliminado se desplazarán hacia la izquierda.
Aunque todos tienen un papel similar, cada bucle se adapta a una situación:
Nota : es posible combinar condiciones (expresiones booleanas) utilizando operadores adicionales: el "Y" lógico && (declaración ejecutada si todas las condiciones son verdaderas):
También existe el "OR" lógico || (instrucción ejecutada si al menos una de las condiciones es verdadera):
if (<condition 1> || <condition 2>) { instruction(s) si au moins une des deux est vraie }¡Finalmente, está el "NO" lógico ! que le permite revertir el resultado de una condición.
Es posible combinar estas operaciones para obtener estructuras condicionales complejas. Puede agregar paréntesis para definir las prioridades de las condiciones (como en un cálculo). En otros casos, la JVM realiza las diversas comprobaciones de izquierda a derecha.
La elección de ejecución de las instrucciones está determinada por la expresión siguiente al cambio cuyo tipo puede ser entero ( int , char , byte o short o clases de envolvente correspondientes), enumerado ( enum ) o String (cadena de caracteres, desde Java 7 solamente).
Nota: '¿ El operador condicional u operador ternario ? : puede evitar el uso de una declaración condicional. Una expresión condicional tendrá cualquier valor después de probar la condición booleana:
<expression booléenne> ? <valeur si vrai> : <valeur si faux> Conexiones incondicionalesEl bloque de código finalmente se ejecutará independientemente del resultado cuando el programa salga del bloque try-catch .
A continuación, se muestra un ejemplo de cómo detectar una excepción:
FileOutputStream fos = null; try { //Chacune de ces deux instructions peut générer une exception // création d'un flux pour écrire dans un fichier fos = new FileOutputStream(...); // écriture de données dans ce flux fos.write(...); } catch (IOException e) { //Gestion de l'erreur de création ou d'écriture dans le flux e.printStackTrace(); } finally{ //Cette section de code est toujours exécutée, qu’il y ait une exception ou pas // fermeture du flux s'il a été ouvert if(fos != null) fos.close(); }Este ejemplo ilustra el mecanismo de excepciones en Java. En caso de error de entrada / salida en el bloque try , se reanuda la ejecución en el bloque catch correspondiente a esta situación (excepción del tipo IOException ).
En este bloque de captura , la variable e hace referencia a la excepción que ocurrió. Aquí invocamos el método printStackTrace () que muestra en la consola información sobre la excepción que ocurrió: nombre, motivo, estado de la pila de llamadas cuando se lanzó la excepción y, opcionalmente, número de línea donde ocurrió el error.
A continuación, se ejecuta el bloque finalmente (aquí para cerrar los recursos utilizados). Este es solo un ejemplo, la acción a tomar cuando ocurre una excepción depende del funcionamiento general de la aplicación y la naturaleza de la excepción.
Tipos genéricosUn tipo genérico también se llama Plantilla, toma uno o más tipos como argumentos. El tipo pasado como parámetro se determina durante la instanciación.
Esto hace posible, en particular, en el contexto de ArrayLists, evitar las conversiones.
public class ArrayList<E> { ArrayList<String> al = new ArrayList<String>(); }Estos tipos genéricos solo se utilizan en el momento de la compilación, no directamente en el código de bytes.
Diferencia con C ++: las plantillas en C ++ duplican una clase para cada tipo. Java, por otro lado, actúa en tiempo de compilación como si hubiéramos duplicado las clases de estos tipos intrínsecos, pero en realidad solo trata con una clase.
Codificación de código fuenteLas especificaciones del lenguaje Java especifican que está formado por caracteres en formato UTF-16 , lo que permite el uso en el código fuente de todos los caracteres existentes en el mundo:
public class HelloWorld { private String text = "hello world"; }Sin embargo, para garantizar la portabilidad entre plataformas, los nombres de las clases solo deben constar de caracteres ASCII .
Operador | Significado |
---|---|
== | Igual (no confundir con = que es el operador de asignación) |
! = | Diferente |
< | Inferior |
> | Superior |
<= | Menor o igual |
> = | Mayor qué o igual a |
JavaStyle son convenciones de programación del lenguaje Java definidas por Sun. El respeto de las convenciones estrictas asegura la homogeneidad en el código fuente de una aplicación desarrollada por un equipo completo y promueve la distribución del código fuente a una comunidad que comparte las mismas convenciones de codificación.
La minúscula camel se utiliza para los nombres de métodos y variables.
Sun proporciona una gran cantidad de marcos y API para permitir el uso de Java para una amplia variedad de usos.
Básicamente, hay cuatro marcos principales :
La persistencia se basa en estándares:
Sin embargo, existen muchas otras tecnologías, API y extensiones opcionales para Java:
La programación se puede realizar desde un símbolo del sistema iniciando un compilador de Java (a menudo llamado javac ), pero para mayor comodidad, es mejor usar un entorno de desarrollo integrado o IDE (que permite compilar automáticamente), algunos son gratuitos. Por ejemplo :
Se puede producir un programa Java con herramientas que automatizan el proceso de construcción (es decir, la automatización de algunas tareas que involucran un número potencialmente grande de dependencias como el uso de bibliotecas, compilación, generación de archivos, documentación, implementación, etc.). Los más utilizados son:
Resultados:
% scons -Q javac -d classes -sourcepath src src/Exemple1.java src/Exemple2.java src/Exemple3.java jar cf test.jar classes