Java es un lenguaje de programación de alto nivel. Utilice esta etiqueta cuando tenga problemas para usar o comprender el idioma en sí. Esta etiqueta rara vez se usa sola y se usa con mayor frecuencia junto con [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] y [maven].
Javaes un high- nivel, independiente de la plataforma, orientado a objetos, lenguaje de programación funcionaly entorno de tiempo de ejecución.
El lenguaje Java deriva gran parte de su sintaxis de C y C ++, pero su modelo de objetos es más simple que el de este último y tiene menos facilidades de bajo nivel. Las aplicaciones Java generalmente se compilan en bytecode(llamado archivos de clase) que pueden ser ejecutados por una JVM (Java Virtual Machine), independiente de la arquitectura de la computadora. La JVM a menudo compila aún más el código en el código de máquina nativo para optimizar el rendimiento.
La JVM gestiona la memoria con la ayuda de un recolector de basura (consulte garbage-collection) para manejar la eliminación de objetos de la memoria cuando los objetos ya no están en uso. La disciplina de escriturade Java es estática, fuerte, segura, nominativa y manifiesta. Java admite características como reflexióny la interfaz con C y C ++ a través de JNI (Java Native Interface).
Java está diseñado para tener la menor cantidad posible de dependencias de implementación, con la intención de permitir a los desarrolladores de aplicaciones escribir una vez, ejecutar en cualquier lugar, o a veces escriba una vez, ejecute en todas partes(el código que se ejecuta en una plataforma no necesita ser recompilado para ejecutarse en otra ) Java fue desarrollado originalmente por James Goslingen Sun Microsystems (que se fusionó completamente con Oracle Corporation el 27 de enero de 2010) y fue lanzado en 1995 como componente central de la plataforma Java de Sun Microsystems. Java comenzó como un proyecto llamado "Oak" por James Gosling en junio de 1991.
La plataforma Javaes el nombre dado por Sun (ahora Oracle) a los sistemas informáticos que han instalado herramientas para desarrollar y ejecutar Programas Java La plataforma presenta una amplia variedad de herramientas que pueden ayudar a los desarrolladores a trabajar eficientemente con el lenguaje de programación Java.
Para comenzar, descarga un Java Development Kit (JDK), que te permite desarrollar y ejecutar aplicaciones Java.
Fondo
La implementación de referencia principal de Java es de código abierto (OpenJDK) y está respaldada por las principales empresas, incluidas Oracle, Apple, SAP e IBM.
Muy pocas computadoras pueden ejecutar programas Java directamente. El software de Java a menudo se ejecuta en servidores. Las aplicaciones Java destinadas a ejecutarse directamente en los equipos cliente deben enviarse con sus propios instaladores. (Nota: antes de java9, pedías a los usuarios finales que instalaran un llamado JRE; sin embargo, este concepto ha quedado obsoleto).
Java se compila en bytecode, que luego la JVM compila en el código de máquina nativo. La compilación se realiza justo a tiempo(JIT). Inicialmente, esto se vio como un éxito en el rendimiento, pero las mejoras de compilación JVM y JIT han hecho que esto sea menos preocupante. En algunos casos, la JVM puede ser incluso más rápida que el código nativo compilado para apuntar a una versión anterior de un procesador por razones de compatibilidad con versiones anteriores. Desde Java 9, se puede compilar antes de tiempo(AOT).
Versiones
Las versiones notables de Java, los nombres de código (entre corchetes []) y las fechas de lanzamiento (entre paréntesis) incluyen:
Java SE 15 [JSR 390] (September 15, 2020)
Java SE 14 [JSR 389] (March 17, 2020)
Java SE 13 [JSR 388] (September 17, 2019)
Java SE 12 [JSR 386] (March 19, 2019)
Java SE 11 [JSR 384] (September 25, 2018)
Java SE 10 [JSR 383] (March 20, 2018)
Java SE 9 [JSR 376] (September 21, 2017)
Java SE 8 (1.8) [JSR 337] (March 18, 2014)
Java SE 7 (1.7) [Dolphin] (July 28, 2011)
Java SE 6 (1.6) [Mustang] (December 11, 2006)
J2SE 5.0 (1.5) [Tiger] (September 29, 2004)
J2SE 1.4 [Merlin] (February 13, 2002)
J2SE 1.3 [Kestrel] (May 8, 2000)
J2SE 1.2 [Playground] (December 4, 1998)
JDK 1.1 (February 19, 1997)
JDK 1.0 (January 23, 1996)
JDK Beta (1995)
Desde Java SE 10
, se lanzarán nuevas versiones cada seis meses.
Últimas versiones estables:
Java Standard Edition 15 (15.0.1) - (October 20, 2020)
Java Standard Edition 14 (14.0.2) - (July 14, 2020)
Java Standard Edition 13 (13.0.2) - (January 14, 2020)
Java Standard Edition 12 (12.0.2) - (July 16, 2019)
Java Standard Edition 11 (11.0.9) - (October 20, 2020)
Java Standard Edition 10 (10.0.2) - (July 17, 2018)
Java Standard Edition 9 (9.0.4) - (January 16, 2018)
Java Standard Edition 8 Update 271 (1.8.0_271) - (October 20, 2020)
Java Standard Edition 7 Update 80 (1.7.0_80) - (April 14, 2015)
Para obtener más nombres de código y fechas de lanzamiento, visite Nombres de código de Java SE. Para ver las notas de la versión de cada versión del JDK, visite el artículo de Wikipediasobre el historial de versiones de Java.
Para obtener un JDK de Java y poder desarrollar (o ejecutar) código Java en su máquina, necesita un proveedor de paquetes de instalación de Java. Java es de código abierto, pero un proveedor se encargará de compilar el código fuente de Java en un binario, incluirlo en un instalador y mantener esta versión en su máquina (por ejemplo, con actualizaciones de seguridad).
Java viene en versiones LTS (Long-Term-Support) y no LTS. Cada proveedor elige cómo tratar con las versiones LTS. Algunos (Oracle OpenJDK) tienen la misma ventana de soporte breve para todas las versiones, LTS o no. Algunos (Amazon Coretto) no se molestan en lanzar versiones que no sean LTS. La mayoría de los proveedores lanzan todas las versiones y serán compatibles con las versiones LTS durante mucho más tiempo.
Las versiones de LTS son: Java 8, 11 y 17.
Los principales proveedores son:
- AdoptOpenJDK, también conocido como Adoptium - free, versiones LTS y versiones no LTS, las versiones LTS son compatibles durante mucho tiempo. Recomendado.
- Oracle OpenJDK 15: tenga en cuenta que solo se admiten durante 6 meses, incluso las denominadas versiones LTS (Long Term Support). Deberá actualizar como actualizaciones de Java.
- Oracle JavaSE: con licencia para quienes deseen soporte comercial. Versiones LTS y no LTS, las versiones LTS son compatibles durante mucho tiempo. Está disponible una versión de prueba gratuita pero con licencia muy restringida.
- Amazon Coretto: gratuito, mantenido por Amazon, optimizado solo para AWS, versiones LTS.
- Muchas más ofertas comerciales.
Las fechas Fin de las actualizaciones públicas(anteriormente llamadas Fin de la vida y también denominadas EoPU) para Las distribuciones disponibles gratuitamente de Oracle son:
Java SE 15 - March 2020 for OpenJDK
Java SE 14 - September 2020 for OpenJDK
Java SE 13 - March 2020 for OpenJDK
Java SE 12 - September 2019 for OpenJDK
Java SE 11 - At least September 2022 for AdoptOpenJDK
Java SE 10 - September 2018
Java SE 9 - March 2018
Java SE 8 - January 2019 (commercial user) | December 2020 (personal user)
Java SE 7 - Apr 2015
Java SE 6 - Feb 2013
J2SE 5.0 - Oct 2009
J2SE 1.4 - Oct 2008
Ayuda inicial
¿Eres nuevo en Java o necesitas ayuda para ejecutar tu primer programa Java? Consulte la sección Tutoriales de Oracle Java en Primeros pasos.
Antes de hacer una pregunta, busque para ver si se ha hecho antes (tenemos muchos duplicados, algunos se enumeran a continuación en Preguntas frecuentes) y lea Escribiendo la pregunta perfectapara aprender cómo hacer que Jon Skeet responda a su pregunta.
Convenciones de nombres
Los programas Java deben cumplir con las siguientes convenciones de nomenclaturapara aumentar la legibilidad y disminuir posibilidades de errores accidentales. Al seguir estas convenciones de nomenclatura, facilitará que otros entiendan su código y lo ayuden.
- Los nombres de tipo (clases, interfaces, enumeraciones, etc.) deben comenzar con una letra mayúscula y poner en mayúscula la primera letra de cada palabra subsiguiente. Los ejemplos incluyen:
String
,ThreadLocal
yNullPointerException
. Esto a veces se conoce como PascalCase. - Los nombres de método y campo deben ser camelCased; es decir, deben comenzar con una letra minúscula y poner en mayúscula la primera letra de cada palabra subsiguiente. Ejemplos:
indexOf
,printStackTrace
,interrupt
. - Los nombres de expresiones constantes (
static final
objetos inmutables) deben escribirse en ALL_CAPS_SNAKE_CASE, con guiones bajos que separen cada palabra. Ejemplos:YELLOW
,DO_NOTHING_ON_CLOSE
. Esto también se aplica a los valores de una claseEnum
. Sin embargo, las referenciasstatic final
a objetos no inmutables deben ser camelCased.
Hello World - Tu primer programa
Código de un programa típico de Hello World:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Compilación e invocación del programa Hello World:
javac -d . HelloWorld.java
java -cp . HelloWorld
El código fuente de Java se compila en una forma intermedia (instrucciones de código de bytes para la Java Virtual Machine) que se puede ejecutar con la {{ X0}} comando más adelante.
Más información:
IDEs útiles para Java
- Eclipse IDE(eclipse)
- Ejecute el código Java en línea
- NetBeans IDE (netbeans)
- IntelliJ IDEA(intellij-idea)
- Spring Tool Suite(spring-tool-suitebasado en Eclipse, incluye herramientas para trabajar con Spring)
- JDeveloper IDE(jdeveloper)
- Android Studio(android-studiobasado en IntelliJ IDEA, principalmente destinado a trabajar en proyectos de Andriod)
- BlueJ(bluej)
- ideone: un IDE en línea con otro soporte de idiomas populares.
- Texto sublime(sublimetext)
Recursos para principiantes
- Los Tutoriales de Java- Comienza desde cero en Windows / Linux / Mac y cubre la mayor parte de la biblioteca estándar. La lista Referencia de palabras clave de Javade Oracle complementa los tutoriales de Java bien.
- Genéricos
- Codecademy (Java): aprenda los conceptos básicos de la programación.
- Coding Bat (Java): después de aprender algunos conceptos básicos, perfeccione y perfeccione sus habilidades Java con Coding Bat.
- Convenciones de código para el lenguaje de programación Java
- Stanford Video Lectures en Java
- Curso gratuito de Udemy sobre Java
- Curso de Edx sobre Introducción a la informática con Java
- Cursos de Coursera en Java
- Programación Java: un curso en línea gratuito sobre aprendizaje de Java
Compiladores en línea
Recursos actualizados día a día
- Documentación de Java SE
- Referencia de la API de Java 7
- Referencia de la API de Java 8
- Referencia de la API de Java 9
- Referencia de la API de Java 10
- Referencia de la API de Java 11
- Referencia de la API de Java 12
- Referencia de la API de Java 13
- Referencia de la API de Java 14
Recursos avanzados
- Lenguaje Java y especificaciones de máquinas virtuales
- Otros lenguajes que se pueden mezclar con Java en JVM
- Una guía para Java 8
- Preguntas frecuentes sobre los Java Generics definitivos de Angelika Langer
Java frameworks, bibliotecas y software
Libros y recursos de programación Java
- Desarrollo de aplicaciones Java en Linux por Carl Albing y Michael Schwarz (PDF)
- Cómo pensar como una informática
- Spring IO Guides
- Head First Java
- El tutorial de Java EE 7 (PDF)
- Programación Java Thin-Client (y otros libros rojos de IBM)
- Tutoriales Java de Oracle
- Pensando en Java
- Java efectivo (PDF)
- Efectiva 3ra edición de Java
- OSGi en la práctica (PDF)
- Categoría sabios tutoriales - J2EE
- Códigos y tutoriales de ejemplo de Java - J2EE
- Video de entrenamiento de patrones de diseño Java
- Búsqueda de código para ejemplos de Java
- Motor de referencia cruzada global de Java
- Tutoriales de Java 101
- Proyecto Tutorial Java EE 8
Preguntas frecuentes
La gente a menudo pregunta sobre los siguientes temas de Java:
General:
Classpath:
String
, StringBuilder
y toString
:
- ¿Cómo comparo cadenas en Java?
- Diferencia entre StringBuilder y StringBuffer
- ¿Por qué obtengo
SomeType@2f92e0f4
cuando imprimo mi objeto? - Inmutabilidad de cadenas en Java
equals
y hashCode
:
API de Java Platform SE:
- Saltarse
nextLine()
después del usonextInt()
- Comparar fechas
- Conversión entre java.util.Date y java.time.LocalDate
- Eliminar elementos mientras se itera a través de una Colección, evitando ConcurrentModificationException
- ¿Cómo ordenar un
Map<Key,Value>
en los valores en Java? - ¿Cuándo usar
LinkedList
sobreArrayList
? Arrays.asList()
- ¿Diferencias entre
HashMap
yHashtable
? - ¿Diferencia entre conjunto y lista?
Genéricos:
- ¿Qué significa la
<E>
en Java? - ¿Es
List<Dog>
una subclase deList<Animal>
? ¿Por qué los genéricos de Java no son polimórficos implícitamente (y por qué las colecciones no son covariantes)? - Java Generics: ¿Qué es PECS?
- ¿Qué es un tipo sin procesar y por qué no deberíamos usarlo?
- ¿Cómo crear una matriz genérica?
- Cómo instanciar una variable de tipo genérico
Clases y objetos:
- ¿Java pasa por referencia?
- ¿Cuál es la ventaja de una enumeración Java frente a una clase con campos finales estáticos públicos?
- Diferencia entre público, protegido, privado y predeterminado
Aritmética y conversiones:
- ¿Por qué no puedo imprimir una doble correctamente?
- La división de enteros devuelve 0
- Operadores de asignación compuesta + =, - =, * =, / = de Java
Depuración
- ¿Qué es un seguimiento de pila y cómo puedo usarlo para depurar los errores de mi aplicación?
- ¿Qué es un
NullPointerException
y cómo lo soluciono? - ¿Qué es una
ArrayIndexOutOfBoundsException
y cómo la evito? - ¿Cómo evito los cheques nulos?
- ¿Por qué recibo un
NoClassDefFoundError
? - ¿Por qué recibo un
NoSuchMethodError
?
Thread
y subprocesos múltiples:
- ¿Qué hace
java.lang.Thread.interrupt()
? - Mientras que el bucle no ve un valor cambiado a menos que haya una declaración de impresión en él
implements Runnable
vs.extends Thread
Interactuando con el sistema operativo:
(Editores, solo enumere las preguntas que realmente se hacen con frecuencia).