Java

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.

Yleistä

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.

Sovelluskohteet

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.

Esimerkki

Tyypillinen "Hello, World" -esimerkki:
public class HelloWorld {
    public static void main(String[] args) {
        // Tulostetaan teksti "Hello, world"
        System.out.println("Hello, world!");
    }}

For-silmukka

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.
 for (''alustus''; ''ehto''; ''kasvu'') {
     ''koodia''
 }
Esimerkki Java-luokasta, joka tulostaa komentoriville luvut 1–10, jokaisen omalle rivilleen.
public class Silmukka {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            // Tulostetaan luku
            System.out.println(i);
        }
    }}
J2SE 5.0:ssa tuli käyttöön uudistettu for-silmukka, joka käy läpi kaikki vaihtoehdot ilman silmukkamuuttujan kasvatusta.
public class Silmukka {
    public static void main(String[] args) {
        for (String s : args) {
            // Tulostetaan komentorivin parametrit
            System.out.println(s);
        }
    }}

While-silmukka

While-silmukka ajetaan jos ehto on tosi ja toistetaan niin kauan kuin ehto on tosi.
Esim.
public class Silmukka {
    public static void main(String[] args) {
        int a = 1;
        String s = "While-silmukka";
        while (a < 10) {
            a++; 
            System.out.println(s);
        }
    }}