Java - Internetin ohjelmointikieli

Java on SUN microsystemssin kehittämä ohjelmointikieli. Se on täysin arkkitehtuuririippumaton, säikeinen (multithreat) ja oliopohjainen.

Javan kehityksen lahtökohtana on kielen käyttö verkkosovelluksissa, joten se on täysin koneriippumatonta bytecode-koodia (vastakohtana machinecode, konekieli). Muina päämäärinä on ollut tuvallisuus, mahdollisimman vahan resusseja vaativa, mahdollisuus ajaa ohjelmia missä laitteistossa ja käyttöjärjestelmässä tahansa sekä mahdollisuus laajentaa ohjelmia dynaamisesti.

Alunperin java-projekti lahti käyntiin kun kehitettiin ohjelmistoja verkkotettuihin laitteisiin ja sulautettuihin järjestelmiiin. Tarkoituksena oli kehittaa pieni, luotettava, hajautettu sovellusympäristö. Aluksi kieleksi oli valittu C++, mutta sen käytössä ajauduttiin ongelmiin joiden pohjalta java kielen kehitys alkoi.

Java-virtuaalikone

Perusjava

Perusjavaan kuuluu seuraavat luokkakirjastot, nämä on jokaisessa javaympäristössä, joten niita ei tarvitse siirtää itse ohjelman mukana.

java.lang
Kokoelma perustyyppejä jotka ovat jokaisen java ohjeman kaytettävissä. Sisältää muunmuassa Objekti ja Class luokat (luokkahiararkkian perusluokat), säikeet, keskeytykset, ja perustietotyypit
java.io
Tiedoston ja tiedostovuoiden käsittely, vastaa perusunixin io-kirjastoa
java.net
Verkkoliikennointiin ja yhteysprotokolliin liisstyvät luokat, Soketit, Urlit yms.
java.util
Monimutkaisempia tietorakenteita, kuten Container, Dictionary, HashTable, Date ja Time
java.awt
Abstract Windowing Toolkit, Sisätää luokat ikkunoiden, buttoneiden, scrollbaarien ja muiden käyttöliittymäelementtien käsittelyyn.

Java ohjelmointi

Java kieli on yksikertaista, alla on perinteinen 'Hello world' ohjelma joka maarillelee luokan HelloWorld ja sille metodin main

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

Java ohjelmat kaannetaan ensin bytecode-koodiksi, jota voidaan ajaa java-virtuaalikoneella.

Java ohjelman kääntö ajoivaiheet.

Javassa on normaalit c:n tietotyypit (int, char..) lukuunottamatta osoittimia. Taulukot luodaan samaan tapaan kuin c:ssa: int a[10]; kymmenen alkion kokonaislukutaulukko. Merkkojonot on toteutettu omana String-luokkanaan.

Muistin käsittely on jätetty kokonaan java-ympäriston huoleksi, joten ohjelmoijan tarvitsee vain luoda oliot kun niitä tarvitaan, ja automaattinen roskien keruu (Garbage Collection) poistaa käyttämättömät objektit muistista.

C:hen verrattuna javasta on jätetty pois Struktuurit ja Unionit, myöskin itsenäiset funktiot on poistettu. Kaikki nämä hoidetaan luokilla ja niiden metodeilla. C++.aan verrattuna javasta on jätetty pois moniperinta (Multiple Inheritance) sen ongelmallisuuden takia. Moniperinta on korvattu liittymillä(?) (interface) jotka maarittelevat joukon metdeja, jotka yksi tai useampi luokka toteuttaa.

Appletit

Java appletit ovat pieni java ohjelmia jotka on tarkoitettu ajettavaksi suljetussa ympäristössä, yleensä www-selaimessa. Appletti ladataan selaimeen, kun html-dokumentissa on <applet> -tagi. Tagissa voidaan maaritella polku josta koodi ladataan (codebase), appletin koko seka parametrit. Pieni esimerrkiappletti:

<html>
<head>
<title>Ikkunointi testi</title>
</head>
<body>
<p>Java window test</P>
<applet codebase="classes" code="window.class" width=400 height=200></applet>
</body>
</html>

window-applettitestisivu

Html-koodi lataa classes hakemistosta luokan window.class. Sille luodaan oikean kokoinen ikkuna ja suoritetaan sen init metodi. Tarvittaessa ajetaan myoskin start ja stop -metodit.

Turvallisuus

Javan kehityksessä on panostettu paljon turvallisuuteen.

Ohjelman käännöksessä tarkistetaan ettei objektien määräämiä rajoituksia ylitetä. Tärkein sääntö on ettei pointtereita voi muuttaa mitenkaan, joten niillä ei voi päästa käsiksi 'kiellettyihin' muistialueisiin, objekteihin tai metodeihin.

Ohelmaa ladatessa bytecode-objektikoodi tarkistetaan uudelleen ja katsotaan ettei siina:

  1. Muuteta pointtereita
  2. Ylitetä luokkrajoja muuttujissa
  3. Kutsuta väärien luokkien metodeja
  4. Että metodeilla on oiken tyyppiset parametrit ja paluuarvot
  5. Yliteta pinoa (Stack overflow)

Tämän jälkeen classloader luo koodista luokkahierarkkiat. Ohelmasta ladatut luokat luetaan eri nimialueelle kuin sisäänrakennetut. Tällä estetään ladattujen luokkien latautumista sisäänrakennettujen päälle. Luokkia käytettäessä tarkistetaan aina ensin sisäänrakennetut luokat ensin ja sen jalkeen ladatut luokat. Näin estetään ladattjen luokkien uudelleen määrittelemästä sisään rakennettuja luokkia.

Verkkoyhteyksien ja lokaalien tiedostojen suojaus. Jos java-ohjelmat (appletit) ladataan verkosta appletviewerilla tai netscapella asetetaan appletille monia rajoituksia. Appletti ei voi ottaa yhteyksia verkkoon muualle kuin koneeseen josta se on ladattu. Appletti ei voi kayttaa lokaalilla tiedostojarjestelmällä olevia tiedostoja millaan lailla.

Lähteet

http://www.funet.fi/pub/languages/java/docs/html/tutorial/
http://www.funet.fi/pub/languages/java/docs/security.ps.Z
http://www.funet.fi/pub/languages/java/docs/html/whitepaper/
http://www.funet.fi/pub/languages/java/docs/html/JDK-1_0_2/apibook/javabooa.htm

Last update: 9.10.1996 -- Tomi Leppikangas