Originalmente llamado OAK por los ingenieros de First Person Inc. (filial creada por Sun Microsystems para llevar a cabo el desarrollo del lenguaje que inicialmente sería utilizado para máquinas domésticas),
Java fue diseñado para correr en computadoras incrustadas. Sin embargo, en 1995, dada la atención que estaba produciendo la Web, Sun Microsystems la distribuyó para sistemas operativos tales como Microsoft Windows.
El lenguaje mismo se inspira en la sintaxis de C++, pero su funcionamiento es más similar al de Smalltalk que a éste. Incorpora sincronización y manejo de tareas en el lenguaje mismo (similar a Ada) e incorpora interfaces como un mecanismo alternativo a la herencia múltiple de C++.
A fines del siglo XX, Java llegó a ser el lenguaje de mayor acogida para programas de servidor. Utilizando una tecnología
llamada JSP (similar a otras tecnologías del lado del servidor como ASP de Microsoft o PHP), se hizó muy fácil escribir páginas dinámicas para sitios de Internet. Sumado a JSP la tecnología de JavaBeans, permitía adaptar al mundo web el patrón MVC (modelo-vista-controlador) que ya se había aplicado con éxito a interfaces gráficas.
Java llegó a ser extremadamente popular cuando Sun Microsystems introdujo la especificación J2EE (Java 2 Enterprise Edition). Este modelo permite, entre otras cosas, lograr una separación entre la presentación
de los datos al usuario (JSP o Applets), el modelo de datos (EJB), y el control (Servlets). Enterprise Java Beans (EJB) es una tecnología de objetos distribuidos que pudo lograr el sueño de muchas empresas como Microsoft e IBM de crear una plataforma de objetos distribuidos con un monitor de transacciones. Con este nuevo estándar,
empresas como BEA, IBM, Sun Microsystems, Oracle y otros crearon nuevos "servidores de aplicaciones" que tuvieron gran acogida en el mercado.
Además de programas del servidor, Java permite escribir programas de interfaz gráfica
o textual. También se pueden correr programas de manera incorporada o incrustada en los navegadores web de Internet en forma de Java applets, aunque no llegó a popularizarse como se esperaba en un principio.
Los programas en Java generalmente son compilados a un lenguaje intermedio llamado bytecode, que luego son interpretados por una máquina virtual (JVM). Esta última sirve como una plataforma de abstracción entre la máquina y el lenguaje permitiendo que
se pueda "escribir el programa una vez, y correrlo en cualquier lado". También existen compiladores nativos de Java, tanto
software libre como no libre. El compilador GCC de GNU compila Java a código de máquina con algunas limitaciones al año 2002.
Con la evolución de las diferentes versiones, no sólo se han producido cambios en el lenguaje,
sino que se han producido cambios mucho más importantes en sus bibliotecas asociadas, que han pasado de unos pocos cientos
en Java 1.0, a más de tres mil en Java 5.0. En particular, se han añadido APIs completamente nuevas, tales como Swing y Java2D.