Java ajalugu ulatub aastasse 1990, kui seda hakati firma Sun poolt välja töötama. Eesmärgiks oli luua vahend, mille abil saaksid töötada paljud uued erinevad protsessorid nii magnetofonides, telefoniaparaatides kui mujal. Seni tuli iga uue protsessoritüübi puhul luua tema jaoks uuesti peaaegu kõik programmid. Ainult vahel õnnestus teise protsessori programmi emuleerida. Et protsessoritel ning nende programmidel olid sageli sees vaid nendele spetsiifilised käsud, siis tekkis nende käskude ülekandmisel raskusi. Sooviti luua lihtne baitkood, mida oleks hõlbus üle kanda. Nii saaks üldotstarbelisi toiminguid (nagu näiteks kellaaja väljastamist) kasutada muutmata kujul kõikjal ning eraldi tuleks luua vaid masinaspetsiifilised käsud. Näiteks kerimine magnetofonil ning vee välja laskmine pesumasinal.
Kuigi uut baitkoodi on võimalik kirjutada otse või kompileerida selle saamiseks kõrgkeeles kirjutatud programme, tehes vajalikud lihtsustused ja täiendused, otsustati luua omaette programmeerimiskeel. Et uus keel ei pea ühilduma eelnevatega, siis saab kõrvale jätta aja jooksul ebaotstarbekaks või veaohtlikuks osutunud kohad. Java on suure osa põhikonstruktsioone üle võtnud keelelt C, mistõttu selle keele oskajatele võivad Java programmilõigud esialgu tuttavamad tunduda.
Ka näiteks Basicu või Perli programmi saab lasta tõlkida mitme operatsioonisüsteemi intepretaatoril, kuid Javast on nad vähemalt pikemate programmide korral aeglasemad. Programmeerija kirjutatud teksti tõlkimine masina käsujadaks on aeglasem korralikult optimeeritud baitkoodi tõlkimisest. Märgatava aja võtab intepretaatori käivitamine, samuti võib lihtsate käskude tõlkimine võtta rohkem aega kui nende täitmine. Samas aga toimuvad aeganõudvad operatsioonid sageli ajal, kui arvuti muidu nagunii kasutajapoolset teadet (näiteks klahvivajutust) ootaks. Viimistletud tervikoperatsioonid, mille teostamist kasutaja sageli ootama peab, näiteks akna avamine, võtavad Javas ainult natukene rohkem aega kui operatsioonisüsteemispetsiifilistes programmides. Lisaks on loodud vahend, mis käivitamise ajal kompileerib Java baitkoodi ümber masinkoodiks ning sel juhul töökiiruses enam tõlkimisest tingitud vahet tavaliselt ei ole.
Suur osa Java programme aeglustavatest põhjustest tuleks muus keeles korralikult koostatavasse programmi nagunii sisse kirjutada. Java kompilaator paneb nad lihtsalt automaatselt sisse. Nii tuleb ka muidu kontrollida, et kasutaja sisestatud andmed sobiksid, et programmi kood on õigesti sisse loetud, et mittevajalikud andmed enam mälu ei raiskaks, et programm operatsioonisüsteemile liiga ei teeks. Muidu saab näiteks mälu vabastamise mõnikord välja jätta lootuses, et ka koos "surnud" andmetega ei ületata programmile eraldatud mälu mahtu, ning lastes programmil selle võrra kiiremini töötada, kuid Java kontrollib ikka üle, et kusagil midagi "ripakile" pole jäänud. Samuti vaadatakse igal massiivi poole pöördumisel üle, et vastava järjenumbriga element ikka massiivi kuulub.
Nagu eespool kirjas, võttis Java suure osa põhikonstruktsioone üle keelelt C, jättes samas kasutamata vahendid, milleta läbi saab ja mis kirjutamise keerulisemaks või veaohtlikumaks teevad. Välja jäeti "null terminated string", mille vääral kasutamisel võis valedesse mälupiirkondadesse sattuda. Ka pole Javas viita mäluaadressile. Siin pole üldse standardvahenditega võimalik otse masina mäluga tegelda, mis välistab suures osas võimaluse masinat või teisi programme kahjustada. Osuti isendile aga annab paljus samad võimalused mis viit. Vaid mäluaadressi asemel on objekti number tabelis. Klassid on nii kirjetüüpide kui objektitüüpide eest. Meetodeid võib kasutaja sinna soovi korral kas lisada või mitte.
Võrguprogrammeerimine pole Java eriomadus, kuid juba keele loomisel on arvestatud võimaluse ja vajadusega luua arvutivõrgus töötavaid programme. Selle keele abil saab luua nii serveri- kui kliendiprogramme. Saab luua näiteks www-serveri brauseritele HTML-lehekülgede saatmiseks kui ka mitme paralleelkasutatega andmebaasi, jututoa või üle võrgu mängitava mängu.
Iseseisvalt arvutis jooksvad programmid suudavad kasutajale pakkuda pea samasuguseid võimalusi nagu igas muus keeles kirjutatud programmid. Vaid masinaomaste käskude puhul tuleb need mõnes muus keeles luua ning siis Java programmist käivitada. Tavakasutaja jaoks aga, kel pole tarvis kõvaketast formaatida ega masinas mälu ümber jagada, peaks Java võimalustest täiesti piisama.
Rakendid on mõeldud käivitamiseks teise programmi (näiteks veebiseiluri) sees ning nendel on peal turvapiirangud. Rakendeid võib lasta sirvijal küllalt julgelt Internetist kohale laadida ja käivitada, ilma et peaks muretsema kohaliku masina võimaliku kahjustumise pärast.
Kuna tegemist on suhteliselt uue programmeerimiskeelega, siis tema võimalusi täiendatakse pidevalt ja märgatavalt. Algselt 1995.a. paiku avaldatud versioonis oli kuus paketitäit klasse arvutamiseks, süsteemiga suhtlemiseks ja ekraanil kujutamiseks. Pideva täiendamise tõttu on ettevalmistatud võimaluste arv kümnekonna aastaga vähemalt kümnekordistunud andmebaasiühenduse, komponenttehnoloogia, turvavahendite ning laiendatud graafika- ja muusikavõimaluste abil, kuid keele kallal töötatakse edasi. Pidevalt kasvades ja arenedes on keelel muidugi oht paisuda suureks ja raskesti haaratavaks, nagu juhtus juhtivaks programmeerimiskeeleks pürginud PL/1-ga ning praegugi on Java keeles valmis meetodeid ligi kakskümmend tuhat. Kuid nii nagu igas keeles on mõnisada tuhat sõna ja hädapärased jutud suudame ajada vähem kui tuhande sõnaga, ei tasu ka programmeerimiskeele puhul lasta end heidutada suurtest sõnade (käskude) hulgast ning lihtsamate programmide juures on võimalik hakkama saada mõne klassi ning mõneteistkümne meetodiga. Kui üldpõhimõtted on selged, saab üksikuid käsklusi alati manuaalist juurde vaadata.
|