Za člověka, který dal podnět k vytvoření Javy, můžeme považovat spoluzakladatele společnosti Sun Williama Nelsona Joye, více známého pod jménem Bill Joy. V druhé polovině sedmdesátých let Bill Joy toužil vytvořit jazyk, který by kombinoval nejlepší vlastnosti z jazyka C a MESA. Při pokusu o přepis operačního systému UNIX v osmdesátých letech pak poznal, že pro tuto práci není zrovna C++ vhodným jazykem. Potřeboval jazyk, který by mu umožnil napsat kratší a efektivnější program.
Jedním z častých omylů je přirovnávání a zaměňování JavaScriptu s Javou. JavaScript má s Javou shodné pouze základní jazykové konstrukce a podobný název. Jinak jde o úplně jiný jazyk. JavaScript je standardizován jako ECMA Script a je běžně používán jako skriptovací jazyk, který je interpretován na straně prohlížeče. Oproti Javě JavaScript nepracuje s instancemi tříd, ale používá objektový model dokumentu (DOM), který je velmi závislý na konkrétním prohlížeči.
V lednu roku 1991 se společně sešli Bill Joy, James Gosling, Mike Sheradin, Patrick Naughton, projektoví vedoucí Sunu, nad projektem Stealth Project (Tajný projekt), který měl za cíl vytvořit systém pro domácí spotřebiče. Vizí projektu bylo umožnit centrální řízení chodu domácích spotřebičů.
Projektu se později dostalo názvu Green Project (Zelený projekt) a týmu, který projekt realizoval, názvu Green Team (Zelený tým). Vedoucím projektu se stal James Gosling, který v minulosti vytvořil Gosling Emacs, první implementaci GNU EMACSu běžící pod systémem UNIX. Green Team nejprve pro dosažení svého cíle používal jazyk C++, který však nebyl shledán plně vyhovujícím.Gosling tedy jazyk C++ rozšířil a modifikoval. Jeho rozšíření je známé pod názvem C++ ++ --. Bohužel ani toto rozšíření plně nevyhovovalo účelu projektu. Nakonec Gosling začal pracovat na novém platformě nezávislém jazyku, který by plně vyhovoval cílům Zeleného projektu. Gosling jazyk pojmenoval Oak (dub), podle stromu, který rostl pod okny jeho kanceláře. Za přímého předchůdce jazyka Oak lze považovat jazyk C++.
V roce 1992 světu Green Team představil výsledky své práce v podobě prototypu zařízení, které v sobě spojovalo osobní digitální asistent (PDA) a dálkové ovládání. Zařízení se jmenovalo star-seven (*7) a bylo vybaveno procesorem RISC, dotykovým displejem a umožňovalo práci s aplikacemi v jazyce Oak. Bohužel na začátku devadesátých let minulého století neměl nikdo o podobná zařízení zájem, a tak se star-seven nikdy nezačalo sériově vyrábět.
Přestože nová technologie byla v podobě jazyka Oak na světě, nedařilo se pro ni najít vhodné uplatnění. V roce 1994 se do projektu opět aktivně zapojuje Bill Joy a startuje projekt s názvem Liveoak. O něco později přichází Patrick Naughton s myšlenkou vložit podporu Liveoak do webového prohlížeče WebRunner, na kterém společně s Jonathanem Paynem pracoval. První komerční prohlížeč, který Javu podporoval, byl Netscape Navigator 2.0.
V roce 1995 byla zjištěna existence jiného jazyka s názvem Oak, a tak bylo potřeba nalézt jazyku nové jméno. Gosling vzpomíná, že nalezení nového názvu nebylo vůbec jednoduché a hledání jim zabralo mnoho hodin. Inspirace pro nové jméno se pak dostavila náhle cestou do místního bufetu na kávu. Java v americkém slangu znamená právě kávu.První verze jazyka Java byla světu představena 23. května 1995 na konferenci SunWorld 1995. V roce 1996 byl vydán první Java Developement Kit (JDK 1.0), který obsahoval vše potřebné pro tvorbu appletu. Dnes SDK zahrnuje i kompletní zdrojový kód platformy Java.
V březnu roku 1997 Sun začal usilovat o standardizaci jazyka pod normou ISO. V květnu 1999 však Sun Javu ze standardizačního procesu normou ISO stáhl a začal se poohlížet po standardu v rámci sdružení ECMA (European Computer Manufacturers' Association). Na začátku prosince 1999 opustil SUN i tuto snahu o standardizaci. Java tak zůstává proprietárním standardem společnosti Sun, který je řízen z Java Community Process.
Samotný jazyk vychází z jazyka C++. Oproti němu je však syntaxe Javy o něco jednodušší. Taktéž odpadla většina konstrukcí, které programátorům způsobovaly problémy. S výjimkou osmi primitivních datových typů můžeme o Javě mluvit jako o objektovém jazyce. Objektový přístup s sebou nese možnost tvorby robustních aplikací.Další velkou výhodu Javy je její přenositelnost a platformní nezávislost. Java je jazykem interpretovaným. To znamená, že místo skutečného strojového kódu se při kompilaci vytváří pouze takzvaný mezikód (ByteCode). Výhodou tohoto je, že tento mezikód je spouštěn na virtuálním stroji Javy (JVM - Java Virtual Machine). Program tedy stačí napsat pouze jednou a spouštět lze všude tam, kde je nainstalován příslušný virtuální stroj.
Tento přístup s sebou bohužel nese to, že běh aplikací, které jsou napsané v Javě, je značně pomalejší, než kdyby byly psány jako klasické nativní aplikace. Aby tato pomalost běhu aplikací nebyla tak znatelná, vyvinula firma Sun takzvaný Just In Time Compiler (JIT). Ten zrychluje běh aplikace tak, že mezikód překládá do strojového kódu procesoru. Tato technologie značně urychluje běh aplikace, avšak zase klade vyšší nároky na paměť. Správa paměti je zabezpečena pomocí automatického garbage collectoru. Ten vyhledává již nepoužívané části paměti a uvolňuje je pro další použití.
Mezi hlavní vývojová prostředí Javy se dnes řadí Eclipse a Netbeans. Oboje vývojová prostředí jsou na výši a jednoznačně nelze říci, které je lepší. Zajímavá informace může být ta, že s vývojem Netbeans se započalo na Karlově univerzitě v roce 1997 pod názvem Xelfi.
Java dnes již není pouze jazykem, ale celou technologií. Mezi hlavní platformy Javy můžeme uvést Javu SE pro vytváření spustitelných aplikací pro rozsáhlou skupinu počítačů. Javu EE pro tvorbu servletů a Javu ME pro psaní aplikací pro malá zařízení, především mobilní telefony.Zápisu kódu v jazyce Java si dnes ukážeme na dvou příkladech. První je tradiční program Hello world. Druhý pak výpočet faktoriálu.
Program Hello world public class hello { static public void main(String[] argv) { System.out.println("Hello world!"); } } Program Faktoriál public class Factorial { public static long factorial(long n) { if (n == 0) return 1; else return n * factorial(n-1); } public static void main(String[] args) { long N = Long.parseLong(args[0]); System.out.println(factorial(N)); } }