Java
Java on Sun Microsystemsin kehittämä teknologiaperhe ja ohjelmistoalusta, johon kuuluu muun muassa laitteistoriippumaton oliopohjainen ohjelmointikieli sekä ajoaikainen ympäristö virtuaalikoneineen ja luokkakirjastoineen. Alun perin kaupallisesti lisensoitu Java on vuodesta 2007 alkaen ollut vapaan GNU GPL -lisenssin alainen. Java-alusta on käytössä noin 3,8 miljardissa laitteessa matkapuhelimista supertietokoneisiin.
Sun Microsystemsin ostanut Oracle on ilmoittanut aikomuksesta siirtää kehitys Eclipse Foundationille.
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.
Java-ohjelmointikielen kehittivät Bill Joy ja James Gosling kollegoineen Sun Microsystemsillä 1990-luvun alussa. JDK 1.0 (Java Development kit) ilmestyi 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, joka sisälsi uuden JFC-luokkakirjaston "(Java Foundation Classes)", jossa mukaan tuli mm. Swing käyttöliittymien luomiseen 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.
Muihin ohjelmointikieliin, kuten C tai C++ verrattuna, Java sisältää runsaasti ominaisuuksia, kuten graafisen käyttöliittymäkirjaston, rinnakkaisuuden hallinnan, verkko-ominaisuudet ja rikkaat rajapinnat, jotka toisissa kielissä ovat käyttöjärjestelmäriippuvaisia tai kolmansien osapuolten kirjastojen varassa.
Javaa markkinoitiin alun perin Web-käyttöön, selaimen sisällä ajettavia sovelmia varten. Se löi kuitenkin varsinaisesti läpi palvelinkäytössä, dynaamisia www-sivuja luotaessa (JSF, JSP, servlet), raskaissa palvelinsovelluksissa (Java EE) ja kännyköissä ja taskutietokoneissa (Java ME). Yleisyytensä ja ilmaisuutensa ansiosta se on myös suosittu opetuskieli.
Java-alustan käyttöä ei ole rajattu Java-ohjelmointikieleen, vaan mm. Python-, Ruby- ja Scheme-kielille on olemassa kääntäjä, joka tuottaa Java-tavukoodia. Sun Microsystemsin lisäksi ainakin IBM ja GNU ovat kehittäneet oman Java-kääntäjänsä ja IBM, Novell, BEA Systems ja Apache oman virtuaalikoneensa lukuisten avoimen lähdekoodin toteutusten (kuten Kaffe, SableVM, JamVM, CACAO, Jikes RVM, VMkit) lisäksi. GNU:n kääntäjäympäristöön GCC:hen kuuluva GCJ osaa kääntää Javaa konekielelle.
GNU ryhtyi myös kehittämään korvaavaa, vapaata luokkakirjastoa GNU Classpath -projektissa.
Sun ilmoitti 13. marraskuuta 2006 julkaisevansa Javan GNU GPL -lisenssillä.
Apachen virtuaalikone Harmonysta on kehitetty Googlen Androidissa käytetty Dalvik-virtuaalikone. Harmony ei ole virallisesti sertifioitu Java-toteutus.
Javaan kuuluu ohjelmointikieli, josta on julkaistu eri versioita kehitysympäristön (Java Development Kit; JDK) kehittymisen myötä. Kehitysympäristöön kuuluu kääntäjä (javac) ja muut kehitystyökalut (jar, javadoc, jdb). Kehitysympäristö sisältää myös täydellisen ajoympäristön (Java Runtime Environment; JRE), joka tarvitaan käännettyjen ohjelmien ajamiseen. Ajoympäristö sisältää virtuaalikoneen (Java Virtual Machine; JVM), joka on JRE:n versiosta 1.2 (joulukuu 1998) lähtien sisältänyt ajonaikaisen käännöksen konekielelle (just-in-time compiler; JIT). Ajoympäristöön kuuluvat myös luokkakirjastot, jotka ovat nekin saaneet lisää ominaisuuksia Javan kehittymisen myötä. Java 1.2 brändättiin suurten muutosten vuoksi nimellä Java 2. Java 2 -nimeä ei kuitenkaan käytetty markkinoinnissakaan kovin kauan, sillä jo Java 1.5 brändättiin Java 5:ksi.
Ajoympäristö on nykyisin jaettu kolmeen osaan.
Java SE 6 esiteltiin 11. joulukuuta 2006.
Java SE 7 28. heinäkuuta 2011. Viestintävirasto ilmoitti elokuussa 2012, että Java 7 aiheuttaa Windows-ympäristössä vakavan tietoturva-aukon ja kehottaa poistamaan version. Tietoturva-aukkoon tuli korjaava päivitys 30. elokuuta 2012.
Java SE 8 esiteltiin 18. maaliskuuta 2014.
Java SE 9 esiteltiin 9. syyskuuta 2017.
Java SE 10 esiteltiin 20. maaliskuuta 2018.
Javan ensimmäinen kohdeympäristö oli web-selaimet, joissa Java-sovelmia (applet) voitiin ajaa turvallisesti. Appletit olivat osa jo ensimmäistä Java-julkaisua 1995. Tekniikan otti omakseen erityisesti Netscape selainsodissa Microsoftia vastaan. Myös Microsoft kehitti oman virtuaalikoneensa MSJVM:n, jonka toteutuksesta se joutui oikeusjutun kohteeksi Sunin taholta. Microsoft luopui Javan kehityksestä 2001 ja nyttemmin luonut oman lähes samanlaisen kilpailevan tekniikkansa (.NET ja C#). Applettien suosio on jäänyt vähäiseksi ja muut tekniikat, kuten Flash ovat ottaneet paikan yksinkertaisten selainsovellusten luonnissa. Myöskään Java-pohjaiset verkkotietokoneet (JavaStation, JavaOs), joita useat valmistajat esittelivät, eivät yleistyneet.
Verkon yli ladattavien sovellusten luontiin Oraclella on Java Web Start -tekniikka, joka mahdollistaa täydellisten sovellusten suorittamisen verkon yli. Java Web Start esiteltiin maaliskuussa 2001 ja Java versiosta 1.4 lähtien se on ollut osana JRE:tä.
Java Servlet API on dynaamisten websivujen kehittämiseen tarkoitettu rajapinta. Se on osa Java EE -pakettia. Servlet-rajapinnan toteuttaa "servlet container" (joskus käännetty suomeksi termillä "kontti"). Container tarjoaa web-palvelimen, jonka toiminnallisuutta voi laajentaa omilla komponenteilla hyödyntäen Javan rajapintoja. Container tarjoaa suoraan joitain palveluja, kuten istunnonhallinnan. JavaServer Pages (JSP) on Servlet API:a käyttävä tekniikka, joka käyttää yksinkertaista merkkauskieltä HTML:n seassa hyödyntämään palvelimella olevien komponenttien toiminnallisuutta tai sisältää suoraan Java-koodia. JSP muistuttaa lähinnä CGI- tai PHP-skriptausta.
Enterprise JavaBeans (EJB) on Servlet API:n kaltainen tekniikka, mutta on tarkoitettu etupäässä tietokantakäyttöön. EJB-komponentit (pavut) ajetaan sovelluspalvelimessa, joka tukee hajauttamista, transaktioita ja rinnakkaisuuden hallintaa. Sunin määrittelemää rajapintaa hyödyntävien servlet- ja EJB-tekniikoiden hyötynä on se, että periaatteessa sama sovellus on ajettavissa kaikissa rajapinnan toteuttavissa sovelluspalvelimissa. Näitä ovat esim. JBoss, IBM WebSphere Application Server, Oracle GlassFish ja Oracle WebLogic.
Tyypillinen "Hello, World" -esimerkki:
For-silmukassa toistetaan kaarisulkeiden sisältämää koodia niin kauan, kunnes ehto on epätosi. Alla olevassa esimerkissä, olio luodaan "alustus"-kohdassa. Jos "ehto" on tosi, kasvatetaan lukua niin paljon, kuin "kasvu"-kohta määrää, ja siirrytään "koodia"-kohtaan. Tätä jatkuu niin kauan, että "ehto" on epätosi.
Esimerkki Java-luokasta, joka tulostaa komentoriville luvut 1–10, jokaisen omalle rivilleen.
J2SE 5.0:ssa tuli käyttöön uudistettu for-silmukka, joka käy läpi kaikki vaihtoehdot ilman silmukkamuuttujan kasvatusta.
While-silmukka ajetaan jos ehto on tosi ja toistetaan niin kauan kuin ehto on tosi.
Esim.