Java

Wikipedia
Loikkaa: valikkoon, hakuun
Tämä artikkeli käsittelee ohjelmointikieltä. Sanan Java tai Jaava muista merkityksistä katso Jaava (täsmennyssivu).
Java
Javan logo.svg
Paradigma olio
Tyypitys vahva, staattinen
Yleinen suoritusmalli tulkattava
Muistinhallinta Automaattinen
Julkaistu 1995
Kehittäjä Oracle Corporation, aikaisemmin Sun
Vakaa versio Java Standard Edition 8 Update 11 (1.8.0_11) (7. elokuuta 2014)
Merkittävimmät toteutukset Oracle, IBM, ja muut
Vaikutteet Objective-C, C++, Smalltalk, Eiffel
Vaikuttanut C#, D, J#, PHP
Murteet -
Käyttöjärjestelmä alustariippumaton
Verkkosivu http://www.oracle.com/technetwork/java/
Uutisryhmä comp.lang.java

Java on Sun Microsystemsin kehittämä laaja teknologiaperhe ja ohjelmistoalusta, johon kuuluu muun muassa laitteistoriippumaton oliopohjainen ohjelmointikieli sekä ajoaikainen ympäristö virtuaalikoneineen ja luokkakirjastoineen. Sun on ilmoittanut Javan julkaisusta vapaana ohjelmistona GNU GPL -lisenssillä.[1] Java-alusta on käytössä noin 3,8 miljardissa laitteessa matkapuhelimista supertietokoneisiin.[2]

Nimi[muokkaa | muokkaa wikitekstiä]

Java on saanut nimensä Jaavan saaren (Indonesiassa) mukaan, sillä kyseisellä saarella tuotetaan kahvilajia, jota Java-kielen kehittäjät nauttivat suuria määriä kieltä suunnitellessaan ja toteuttaessaan. JavaScript puolestaan on saanut nimensä Java-kielen suuresta suosiosta. JavaScript ei muilla tavoin liity mitenkään Javaan.

Yleistä[muokkaa | muokkaa wikitekstiä]

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. kohuttu Swing 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.[3] 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 kiintolevyä käytettäessä käskyt kulkevat virtuaalikoneen läpi, joka varmistaa ettei käsky ole hiekkalaatikon ulkopuolella. 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ä.[4]

Apachen virtuaalikone Harmonysta on kehitetty Googlen Androidissa käytetty Dalvik-virtuaalikone. Harmony ei ole virallisesti sertifioitu Java-toteutus.

Sunin kehitysympäristö[muokkaa | muokkaa wikitekstiä]

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 Standard Edition (Java SE) sisältää yleiset ominaisuudet, graafiset käyttöliittymät, tietokanta- (Java Database Connectivity; JDBC) ja perus-XML-rajapinnat.
  • Java Enterprise Edition (Java EE) on tarkoittu palvelinsovellusten kehittämiseen ja ajamiseen ja sisältää mm. nimeämis- ja hakemistopalvelut (Java Naming and Directory Interface; JNDI), komponenttirajapinnan (Enterprise Java Beans; EJB), servlet- ja portlet-määrittelyt, JSP (JavaServer Pages) ja muita web-palvelintekniikoita.
  • Java Micro Edition (Java ME) on tarkoitettu teholtaan rajoittuneiden laitteiden ohjelmointiin, kuten matkapuhelimiin ja digibokseihin (Multimedia Home Platform; DVB-MHP). J2ME eroaa merkittävästi muista ympäristöistä ja käyttää rajoitetumpaa virtuaalikonetta (K Virtual Machine; KVM) ja jättää toteuttamatta joitain kielen ominaisuuksia (kuten liukuluvut ja luokkien purkajat). Java ME on edelleen jaettu konfiguraatioihin ja profiileihin laitteiden ominaisuuksien mukaan.

Java SE 6 esiteltiin 11. joulukuuta 2006 ja 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.[5] Tietoturva-aukkoon tuli korjaava päivitys 30. elokuuta 2012.[6] Tämän jälkeen javasta löytyi kuitenkin uusi vakava haavoittuvuus ja viestintävirasto kehotti jälleen poistamaan javan.

Sovelluskohteet[muokkaa | muokkaa wikitekstiä]

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[muokkaa | muokkaa wikitekstiä]

Tyypillinen "Hello, World" -esimerkki:

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

Silmukat[muokkaa | muokkaa wikitekstiä]

For-silmukka[muokkaa | muokkaa wikitekstiä]

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[muokkaa | muokkaa wikitekstiä]

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);
        }
    }
}

Lähteet[muokkaa | muokkaa wikitekstiä]

  • Peltomäki - Silander: Java 2. Jyväskylä: Docendo Finland Oy, 2003.

Viitteet[muokkaa | muokkaa wikitekstiä]

Aiheesta muualla[muokkaa | muokkaa wikitekstiä]

Wikibooks
Wikikirjastossa on aihe: Java.