Java on Sun Microsystemsin kehittämä teknologiaperhe ja ohjelmistoalusta, johon kuuluu muun muassa laitteistoriippumaton korkean tason, luokkapohjainen, oliopohjainen ohjelmointikieli, joka on suunniteltu siten, että siinä on mahdollisimman vähän toteutusriippuvuutta, sekä ajoaikainen ympäristö virtuaalikoneineen ja luokkakirjastoineen. Java (ohjelmointikieli) on yleiskäyttöinen ohjelmointikieli, jonka avulla ohjelmoijat voivat kirjoittaa koodia, joka kääntäessä toimii kaikilla Javaa tukevilla alustoilla ilman tarvetta kääntää koodia uudelleen.

Java-sovellukset on tyypillisesti käännetty tavukoodiin, joka voi toimia missä tahansa Java-virtuaalikoneessa (JVM) taustalla olevasta tietokoneen arkkitehtuurista riippumatta. Javan syntaksi on samanlainen kuin C:n ja C++:n, mutta siinä on vähemmän matalan tason toimintoja kuin kummallakaan. Java-ajonaika tarjoaa dynaamisia ominaisuuksia (kuten reflektointia ja ajonaikaisen koodin muokkausta), joita ei yleensä ole saatavilla perinteisillä käännetyillä kielillä.

Vuodesta 2019 lähtien Java oli GitHubin mukaan yksi suosituimmista käytössä olevista ohjelmointikielistä, erityisesti asiakas-palvelin-verkkosovelluksissa, ja kehittäjiä on raportoitu 9 miljoonalla. Alun perin kaupallisesti lisensoitu Java on vuodesta 2007 alkaen ollut vapaan GNU GPL -lisenssin alainen. Vuonna 2006 arvioitiin, että Java-alusta on käytössä noin 3,8 miljardissa laitteessa jossakin muodossa.

Javan ollessa yksi suosituimmista ohjelmointikielistä, sen avulla tehty paljon tunnettuja ja menestyneitä sovelluksia. Lisäksi Javaa on käytetty paljon mm. graafisissa käyttöliittymissä, yrityssovelluksissa, tieteessä ja sulautetuissa järjestelmissä, joista viimeisimmästä esimerkiksi SIM-kortit ja Blu-ray soittimet ovat laajassa käytössä.Real World Applications of jJava softwaretestinghelp.com 8 Best Popular Projects on Java] Medium.com

Nimi Java nimettiin tammikuussa 1995 Yhdysvalloissa Javaksi kutsutun kahvilaadun mukaan, jota tuotetaan Jaavalla Indonesiassa. Ennen nimenmuutosta kehittäjät olivat käyttäneet uudesta kielestään nimeä Oak ja sitä ennen nimeä Greentalk. Nimeä Oak ei kuitenkaan voinut enää käyttää, koska Oak Technologies -yhtiöllä oli siihen oikeudet. Uusi nimi valittiin palaverissa kymmenen ehdotuksen joukosta, joista äänestysvaiheeseen pääsivät myös nimet DNA ja Silk. Nimen Java ehdottajasta on nykyisin erilaisia käsityksiä.

Ohjelmointikieli JavaScript nimettiin myöhemmin Javan mukaan, mutta sitä yhdistää Javaan lähinnä vain syntaksi.

Historia thumb|James Gosling, Javan luoja, vuonna 2008. thumb|100px|Duke, Javan maskotti. James Gosling, Mike Sheridan, and Patrick Naughton aloittivat Java-ohjelmointikieliprojektin kesäkuussa vuonna 1991. Java oli alun perin suunniteltu interaktiiviselle televisiolle, mutta se oli liian kehittynyttä sen aikaiselle kaapelitelevisioteollisuudelle. Java sai alkuperäisen nimensä Oak erään Goslingin toimiston ulkopuolella olevan tammipuun mukaan. Myöhemmin projektia kutsuttiin nimellä Green, jonka jälkeen se uudelleennimettiin Javaksi erään indonesialaisen kahvin, Java coffeen, mukaan. Gosling suunnitteli Javan käyttäen C/C++ tyylistä syntaksia, joka olisi jo tunnettu systeemi ja sovellus ohjelmoijille.

Sun Microsystems julkaisivat ensimmäisen julkisen version nimellä Java 1.0 vuonna 1996. Se lupasi 'write once, run anywhere' (WORA)-toiminnallisuuden, tarjoten maksuttomia ajoaikoja suosituilla alustoilla. Kohtuullisen turvallinen ja sisältäen konfiguroitavan tietoturvan, Java sallii verkko- ja tiedostonkäyttörajoituksia. Pian merkittävät verkkoselaimet sisällyttivät mahdollisuuden ajaa Java-sovelmia nettisivuilla, ja Javasta tuli nopeasti suosittu ohjelmointikieli. Arthur van Hoff uudelleenkirjoitti Java-kielellä Java 1.0 kääntäjän noudattamaan tarkasti Java 1.0:n kielispesifikaatioita. Java 2:n tulon myötä (alun perin julkaistu nimellä J2SE 1.2 joulukuussa vuonna 1998-1999) uudet versiot sisälsivät useita kokoonpanoja, jotka oli rakennettu erityyppisille alustoille. J2EE sisälsi teknologioita ja rajapintoja yrityssovelluksiin, jotka tyypillisesti ajettiin palvelinympäristössä, kun taas J2ME sisälsi optimoituja rajapintoja mobiilisovelluksille. Työpöytäversiolle annettiin uusi nimi J2SE. Vuonna 2006, Sun uudelleennimesi uudet J2-versiot Java EE:ksi, Java ME:ksi ja Java SE:ksi markkinointisyistä.

Vuonna 1997 Sun Microsystems otti yhteyttä ISO/ICE JTC 1 Standartia hallinnoivaan elimeen ja myöhemmin Ecna internationaaliin formalisoidakseen Javan, mutta lopetti pian prosessin. Java säilyi standardina, jota ohjataan ja hallitaan Java-yhteisöprosessin kautta. Kerran Sun Microsystems teki suurimman osan sen Java-implemaatioista saatavaksi ilman maksua, vaikka ne olivat heidän omaa ohjelmistoa. Sun Microsystems sai tuloja myymällä lisenssejä erikoistetuille ohjelmistoille, kuten Java Enterprise System ja Java Premium System.

Marraskuussa 2006 Sun Microsystems julkaisi suuren osan Java-virtuaalikoneestaan (JVM) vapaana ja avoimena lähdekoodina (FOSS) GPL-2.0 -lisenssin ehtojen mukaisesti. Toukokuussa 2007 Sun Microsystems valmisteli prosessin loppuun ja teki JVM:n ytimen koodin saataville ilmaisena avoimen lähdekoodin jakelun ehtojen mukaisesti lukuun ottamatta pientä osaa koodista, josta Sun Microsystems:illä itsellään ei ollut tekijänoikeutta.

Sun Microsystemsin varapuheenjohtaja Rich Green sanoi, että Sunin ihanteellinen rooli Javan suhteen oli evankelista. Oracle Corporationin hankittua Sun Microsystemsin vuosina 2009–2010 Oracle on kuvannut itseään Java-teknologian ylläpitäjänä, jolla on jatkuva sitoutuminen yhteisön osallistumiseen ja avoimuuteen. Tämä ei estänyt Oraclea nostamasta pian sen jälkeen oikeusjuttua Googlen käyttäessä Javaa Android SDK:ssa (ks. Android-kohta).

Javan käyttö Android-pohjaisissa ohjelmissa johti oikeudenkäyntiprosessiin Oraclen ja Googlen välillä vuonna 2012. Toukokuussa vuonna 2012 San Franciscolainen tuomaristo huomasi, että jos tekijänoikeudet koskivat myös ohjelmointirajapintoja, niin Google olisi rikkonut Oraclen tekijänoikeuksia käyttämällä Javaa Android-laitteissa. Käräjäoikeuden William Alsup määräsi 31. toukokuuta 2012 ettei ohjelmointirajapintoja voi suojata tekijänoikeuksilla, mutta tämä laki evättiin myöhemmin U.S. Court of Appeals for the Federal Circuitin puolesta toukokuussa 2014. Google todettiin syyttömäksi toukokuun 26, 2016, vetoamalla Java-ohjelmointirajapintojen reiluun käyttöön Androidissa. Oikeudenkäynti kuitenkin avattiin uudelleen maaliskuussa 2018, tällä kertaa San Franciscon tuomioistuimessa. Google haastoi uudet syytökset vuonna 2019 ja oikeudenkäynti totesi Googlen jälleen syyttömäksi huhtikuussa 2021. Oikeus ei muokannut tekijänoikeuslakeja ohjelmointirajapintojen ympärillä tapahtuman seurauksena, vaan sanoi näiden olevan tapauskohtaisia.

James Gosling erosi Oraclelta 2. huhtikuuta 2010.

Periaatteet Kun Java-kieltä luotiin, siinä oli viisi ensisijaista tavoitetta:

1. Kielen on oltava yksinkertainen, objekti-pohjainen ja tutun oloinen.

2. Sen on oltava vahva/tukeva sekä turvallinen.

3. Sen on oltava arkkitehtuurisesti neutraali ja helposti siirrettävä.

Yksi Javan tavoitteista oli siirrettävyys, mikä tarkoittaa, että Java-alustalle kirjoitettujen ohjelmien on toimittava samalla tavalla kaikenlaisilla laitteisto- ja käyttöjärjestelmäyhdistelmällä. Tämä saavutetaan kääntämällä Java-kielinen koodi välimuotoon, jota kutsutaan tavukoodiksi, sen sijaan että se käännettäisiin suoraan arkkitehtuurikohtaiseksi konekoodiksi. Javan tavukoodin ohjeet ovat konekoodin kaltaisia, mutta ne suoritetaan virtuaalikoneella, joka on kirjoitettu erityisesti sille isäntälaitteistolle. Loppukäyttäjät käyttävät yleisesti Java Runtime Environment -ohjelmaa, joka on asennettu heidän laitteeseensa itsenäisiä Java-sovelluksia varten tai web-selainta Java-apletteja varten.

Universaalin tavukoodin käyttö tekee ohjelmien siirrettävyydestä helppoa. Kuitenkin tavukoodin tulkitsemisesta konekoodiksi aiheutuva ylimääräinen suoritusaika tekee tulkittavista ohjelmista lähes aina hitaampia kuin suorat suoritettavat ohjelmat. Itse Java on alustariippumaton ja sopeutuu käyttöalustaan käyttämällä sille tarkoitettua Java Virtual Machine (JVM), joka muuntaa Java-tavukoodin alustan konekielelle.

4. Sen täytyy suorittaa/toimia korkealla suorituskyvyllä.

5. Sen on oltava tulkittu, säikeitetty ja dynaaminen.

Java ohjelmoinnin neljä periaatetta

Java-ohjelmointikielessä on neljä keskeistä periaatetta, jotka tunnetaan nimellä "Java-ohjelmoinnin neljä periaatetta" tai "The Four Pillars of Object-Oriented Programming". Nämä periaatteet ovat:

Kapselointi (encapsulation) Periytyminen (inheritance) Polymorfismi (polymorphism) Abstraktio (abstraction)

Kapselointi tarkoittaa luokkien käyttämistä ohjelman eri osien eristämiseen toisistaan, mikä helpottaa koodin ylläpidettävyyttä ja selkeyttä. Kapselointi mahdollistaa sen, että ohjelman osat ovat riippumattomia toisistaan, ja muutokset voidaan tehdä vain yhteen luokkaan kerrallaan ilman että tarvitsee huolehtia muista osista.

Periytyminen on periaate, joka mahdollistaa uusien luokkien luomisen jo olemassa olevien luokkien pohjalta. Tämä säästää aikaa ja vaivaa, sillä jo olemassa olevia toimintoja ei tarvitse kirjoittaa uudelleen uutta luokkaa varten.

Polymorfirsmi tarkoittaa eri tyyppisten olioiden käyttämistä yhden ja saman nimen alla, mikä vähentää koodin monimutkaisuutta ja tekee sen ylläpidosta helpompaa. Polymorfismi mahdollistaa ohjelman osien vaihtamisen toisiin, kunhan ne toteuttavat saman rajapinnan.

Abstraktio tarkoittaa oleellisten yksityiskohtien keskittymistä ja epäolennaisten yksityiskohtien poistamista koodista, mikä helpottaa sen ylläpidettävyyttä. Abstraktio mahdollistaa koodin yksinkertaisuuden säilyttämisen ja helpottaa sen ymmärtämistä.

Nämä neljä periaatetta ovat tärkeitä Java-ohjelmoinnissa, sillä ne tekevät koodista jäsennellympää, ymmärrettävämpää ja ylläpidettävämpää.

Yleistä Java-ohjelmointikielen kehittivät Bill Joy ja James Gosling kollegoineen Sun Microsystemsillä 1990-luvun alussa. JDK 1.0 (Java Development kit) julkaistiin syksyllä 1995. Se soveltui www-sivulle luotavien applettien tekemiseen, mikä nosti Javan nopeasti ohjelmointimaailman kuumimmaksi puheenaiheeksi. Keväällä 1997 julkaistiin JDK 1.1, jossa oli muuttunut erityisesti käyttöliittymän ohjelmointi oliomaisempaan suuntaan. JDK 1.2 julkaistiin loppuvuonna 1998, ja se sisälsi uuden JFC-luokkakirjaston (Java Foundation Classes), jossa mukaan tuli mm. Swing käyttöliittymien luominen ja monipuolisia tietorakenneluokkia.

Java-kielen 1990-luvun lopulla saavuttaman suuren suosion takana ovat laitteistoriippumattomuuden lisäksi kielen C++-kieltä läheisesti muistuttava, mutta helpommin omaksuttavaksi suunniteltu kielioppi, oliopohjaisuus ja virtuaalikoneen mukana tuleva, erittäin kattava standardikirjasto. Myös muistinhallintaa on helpotettu ottamalla käyttöön roskienkeräin (engl. garbage collector), joka vapauttaa muistia kun sitä ei enää tarvita. Java kuuluu ohjelmointikieliin, joissa on käytössä ns. vahva tyypitys. Tämä tarkoittaa sitä, että jokaisella muuttujalla on tyyppi ja muuttujat voivat saada ainoastaan tyyppinsä mukaisia arvoja.

Toisin kuin tavanomaisen kielet, Javan lähdekoodia ei käännetä suoraan konekielelle, vaan tavukoodiksi, joka suoritetaan virtuaalikoneessa. Koska Java-ohjelmat ajetaan virtuaalikoneessa, ne eivät normaalisti pysty vaikuttamaan suoraan muihin prosesseihin, eivätkä pääse virtuaalikoneelle määrätyn hiekkalaatikon ulkopuolelle vaan esimerkiksi tiedostoja käsitellessä käskyt kulkevat virtuaalikoneen läpi, joka varmistaa että käsky on turvallisuusasetusten mukainen. Java-ohjelmat ovat mm. näiden rajoitusten vuoksi tavanomaisia konekieliohjelmia turvallisempia, mutta samalla hieman hitaampia.