Börja med Java
Sven-Olof Nyström
Uppsala Universitet
11 mars 2005
1
Historik: Java
• Hette från början OAK (James Gosling, 1991).
Utvecklades vid SUN Microsystems.
• Från början avsett för inbyggda system (tex
tvättmaskiner, mobiltelefoner, TV/video, spel, mm).
(Storlek och pålitlighet var viktiga)
• Med WWW fick projektet en annan inriktning
Java blev ett programspråk för web-applikationer
• Senaste versioner är J2SE 1.4.2 samt J2SE 5.0
• Utvecklingsmiljö: Java 2 Software Development Kit
2
Java är...
• enkelt (?), baserat på C/C++ (?)
• objekt-orienterat från början
• dynamiskt utbyggbart (nya klassdefinitioner kan
laddas in under körning)
• robust, säkert
• oberoende av hårdvaruarkitektur (portabelt)
• stöd för nätverksprogrammering, multitrådat
• bra högnivåstöd genom standardbibliotek
3
Objektorienterat . . .
• Java är ett rent OOP-språk: det finns bara klasser,
inga funktioner.
• Java är utvecklat för dagens fönsterbaserade datorer
och har många färdiga komponenter för grafik och
användarinteraktion.
• Det finns understöd för trådar (flera “processer” i
samma program) och nätverksprogrammering.
4
Kompilering av Java
• Traditionella kompilatorer översätter programtexten
till maskinkod.
• De flesta Java-kompilatorer översätter till en slags
maskinkod; Javabytekod (JVM).
• Det finns inga maskiner som kör Javabytekod (nja,
nästan inga).
• Därför måste JVM-koden vid körning antingen
– översättas till maskinkod, eller
– interpreteras.
5
Java på webben
• Java används dels för att skriva “vanliga” program för
olika tillämpningar dels också för att skriva applets.
• Applets (små applikationer) kan laddas ned via
webbsidor och exekveras på din dator.
• Webbläsare som t.ex. Netscape och Explorer
innehåller en JVM som kan interpretera bytekod.
• Har bibliotek för protokoll som TCP/IP och HTTP
• Kan komma åt objekt över nätet via URL:er lika lätt
(svårt?) som lokala filer
6
Robust
• Statiska felkontroller (vid kompilering, hittar fel tidigt)
• ...och dynamiska
• Tillåter inte att man släpper igenom fel (exceptions)
• Inga pekare (nåja), men absolut ingen pekararitmetik
• Hård typkontroll
• (Nästan) inga implicita typkonverteringar
7
Robust (forts)
• Länkare dubbelkollar typerna
• Javas pekarmodell:
– Ingen pekararitmetik: kan ej peka fel
– Avsaknad av pekararitmetik gör att indexkontroller
kan genomföras
– Omöjligt att omvandla en integer till en pekare!
– Eliminerar möligheten att skriva i fel minnesadress
8
Säkert
• Robusthet ger säkerhet
• Omöjligt att komma åt data genom “buffer overrun”
• Omöjligt att komma åt data genom pekarmodifiering
9
Hårdvaruoberoende
• Utformat för att stödja nätverksapplikationer
• Hårdvaruoberoende objektfilformat (bytecode)
• ...som kan köras oberoende av processor, kräver
Java runtime system
• bytecode är enkel att tolka (interpretera) och kan lätt
översättas till maskinkod (kompilering just-in-time)
10
Portabelt
• hårdvaruoberoende -> portabelt
• Portabla gränssnitt (ex abstrakt klass Window)
• Java-system självt är portabelt (skrivet i Java med ett
run-time-system som är skrivet i ANSI C)
11
Multitrådat
• Mycket i verkligheten pågår parallellt...
• Multitrådning är möjligheten att bygga sådana
applikationer
• Synkroniseringsverktygen är inbyggda i språket
• Man får snabbare interaktion
12
Dynamiskt
• Kan lätt anpassas till ändringar
• Dynamisk länkning
(ny kod kan laddas in under körning!)
13