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-virtuaalikonePerusjavaan kuuluu seuraavat luokkakirjastot, nämä on jokaisessa javaympäristössä, joten niita ei tarvitse siirtää itse ohjelman mukana.
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.
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>
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.
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:
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.