Java — objektorienteeritud programmeerimiskeel, JVM, bytecode ja LTS
Tutvu Java'ga: objektorienteeritud keel, JVM ja bytecode, LTS-versioonid (Java 8, 11, tulevane 17) — platvormideülene, turvaline ja tööstusharu standard.
Java on Sun Microsystems'i loodud programmeerimiskeele nimi. Selle ettevõtte ostis välja Oracle Corporation, mis jätkab keele ja selle keskkondade arendamist. Java esimene avalik versioon ilmus 1995. aastail ja on sellest ajast saanud laialdaselt kasutatava keele nii serveri- kui ka kliendipoolsetes lahendustes. Tänapäeval on olemas mitmeid Java väljaandeid ja -versioone; pärast Java 8 ja Java 11 LTS-versioone ilmusid hiljem Java 17 (LTS) ja Java 21 (LTS), mis on mõlemad olulised pikaajalise toe (LTS) väljaanded. Oracle pakub tasulist tuge uuematele väljaannetele, samas kui mitmed teised levitajad (OpenJDK‑põhised builds) pakuvad avatud lähtekoodiga variante.
Ajalugu ja versioonipoliitika
Arendusajaloos on Java-l olnud regulaarne väljaannete tsükkel: alates Java 9-st on uued funktsioonid jõudnud väljaannetes sagedamini (iga kuue kuu tagant), samas kui LTS (Long Term Support) versioonid ilmuvad harvemini ja neile antakse pikaajalist toetust. LTS-versioonid, nagu Java 8, Java 11, Java 17 ja Java 21, on ettevõtetes eriti populaarsed, sest neid toetatakse stabiilsemalt ja pikema aja jooksul.
Objektorienteeritud keel
Java, mille nimi oli Oak arendusfaasis, on objektorienteeritud keel. See tähendab, et programmide põhikonstruktsiooniks on objektid — andmete ja nendega seotud käitumise (meetodite) kombinatsioonid, mis suhtlevad üksteisega, et täita rakenduse ülesandeid. Java süntaks sarnaneb mitmel moel keeltega nagu C, C++ ja C#, kuid kood, mis on kirjutatud nendes keeltes, ei tööta automaatselt Java's ilma muutmiseta .
Platvormi sõltumatus ja Java Virtual Machine (JVM)
Java disaini üks peamisi eesmärke oli platvormi sõltumatus — tuntud lähenemine "kirjuta kord, käivita kõikjal" (write once, run anywhere). Selle saavutab Java nii, et kompilaator ei tõlgi lähtekoodi otse konkreetse masina masinkoodiks, vaid väljastab Java baatkoodi ehk bytecode'i. See bytecode on standardiseeritud ja seda suudab täita iga platvormi jaoks olemasolev Java Virtual Machine (JVM).
- JVM on spetsiaalne käituskeskkond, mis laeb Java klassifaile, kontrollib turvalisust, tõlgib bytecode'i jooksva masina masinkoodiks ja haldab tööaega (runtime).
- JVM-i implementatsioonid võivad sisaldada JIT‑kompilaatorit (Just‑In‑Time), mis kompileerib sagedasti käivitatava bytecode'i masinakoodiks käitusajal, parandades jõudlust.
- Lisaks süstemaatilisele jõudluse optimeerimisele sisaldavad JVM-id ka prügikoristust (garbage collection), mis vabastab automaatselt kasutamata mäluruumi.
Bytecode ja täitmisprotsess
Java kompilaator (.java -> .class) genereerib bytecode'i, mis on sõltumatu protsessori arhitektuurist. Selle bytecode'i võib:
- käivitada otse JVM-i kaudu, kus bytecode tõlgitakse või kompileeritakse jooksvalt masinakoodiks, või
- edasi töödelda vahenditega (näiteks AOT-kompileerimise või muude optimiseeride abil) konkreetsele platvormile.
Selline kihtidevaheline lähenemine annab Java'le paindlikkuse: sama bytecode võib töötada erinevatel operatsioonisüsteemidel ja riistvaradel, kui seal on vastav JVM.
Peamised omadused ja kasutusvaldkonnad
Java omadused teevad sellest sobiva keele paljude ülesannete jaoks:
- Staatiline tüübistus ja selge objektimudel, mis aitab vältida paljusid vigu juba kompileerimisel.
- Automaatsed mäluhaldusmehhanismid (garbage collection), mis vähendavad mälu lekete riski.
- Põhjalik standardteek (Java API), mis hõlmab kõike alates kollektsioonidest ja võrguühendusest kuni XML-i ja krüptograafiani.
- Suur ökosüsteem, tööriistad (nt JDK, build-tööriistad, IDE-d), raamistikud (nt Spring) ja konteinerid, mis tugevdavad Java positsiooni ärirakendustes.
- Kõrge jõudlusvõimalus tänu JIT-optimeeringutele ja JVM-i täiustustele.
- Pidev arendus — uusimate Java väljaannetega lisatakse keele ja JVM-i täiustusi, turvaparandusi ning jõudluse optimeerimisi.
Kus Java't kasutatakse
Java on levinud järgmistel aladel:
- Serveripoolsed äpi- ja mikroteenused (enterprise‑tarkvara, veebiserverid).
- Androidi rakendused (Androidi platvorm kasutab Java-laadset keskkonda ja API-sid, kuigi Google on tugevalt toetanud ka Kotlinit).
- Süsteemitarkvara ja suured andmeprotsessid (nt Hadoop‑ökosüsteem).
- Finants-, telekommunikatsiooni- ja muud tööstuslikud rakendused, kus on nõutav stabiilsus ja jõudlus.
JDK, JRE ja levitused
Java arendamiseks ja käivitamiseks kasutatakse erinevaid pakette:
- JDK (Java Development Kit) – sisaldab kompilaatorit (javac), tööriistu ja standardseid teeke arendamiseks.
- JRE (Java Runtime Environment) – sisaldab JVM-i ja standardteeke käivitamiseks (täna sageli integreeritud JDK-ga või asendatud OpenJDK paketiga).
- Lisaks Oracle'ile on olemas mitu OpenJDK‑põhist levikut, mis pakuvad tasuta ja avatud lähtekoodi variante erinevate tugutingimustega.
Kokkuvõttes on Java terve ökosüsteem — keel, standardteegid, JVM ja mitmed tööriistad — mis teeb sellest jätkuvalt ühe populaarseima valiku nii õppimiseks kui ka tootmiskeskkondades suuremahuliste süsteemide loomiseks.
Java mõisted
Java töötati välja viie peamise eesmärgi saavutamiseks. Need on järgmised:
- Java peaks olema kergesti õpitav, objektorienteeritud ja hajutatud.
- Java peaks olema turvaline ja tugev.
- Java ei tohiks sõltuda ühestki arvutiarhitektuurist või platvormist.
- Java peaks hästi toimima.
- Java peaks olema võimalik, et selle jaoks oleks kirjutatud interpretaator, mis toetaks paralleelsust ja kasutaks dünaamilist tüübistamist.
Java platvorm
Java platvorm viitab Sun Microsystems'i tarkvaratoodete rühmale. Platvormi kasutatakse Java-programmide arendamiseks ja käivitamiseks. Platvorm sisaldab täitmismootorit (mida nimetatakse Java virtuaalmasinaks), mis võimaldab Java-programmidel teha sama asja erinevates arvutisüsteemides.
Seda võimet, et tarkvara on võimalik arendada ühel platvormil ja käivitada seda teistel platvormidel, nimetatakse "platvormideüleseks võimekuseks".
Java programmi näide
Näide "Hello World" Java-programmist:
Java programmide tüübid
On palju erinevaid Java-programme, mis töötavad erinevalt:
- Java Applet - väike Java keeles kirjutatud programm, mis laaditakse veebilehelt alla ja käivitatakse veebibrauseris kliendi arvutis.
- Rakendus - täidetakse kliendi arvutis. Kui see on võrgus, tuleb see enne käivitamist alla laadida.
- JAR-fail (Java-arhiiv) - kasutatakse Java-failide pakkimiseks ühte faili (peaaegu täpselt nagu .zip-fail).
- Servlet - töötab veebiserveris ja aitab luua veebilehti.
- Swing-rakendus - kasutatakse GUI-ga (aknad, nupud, menüüd jne) rakenduse loomiseks.
- EJB - töötab veebiserveris ja seda kasutatakse suurte, keeruliste veebisaitide arendamiseks.
Eelised
Javat kasutatakse tavaliselt õpilastele programmeerimise õpetamiseks esimese keelena, kuid seda kasutavad endiselt ka spetsialistid.
- Java nõuab, et iga muutuja oleks initsialiseeritud. Mõned vanemad keeled, näiteks C, lubavad muutujaid initsialiseerimata jätta, mis võib põhjustada juhuslikke tõrkeid koos salapäraste vigadega.
- Java nõuab, et iga meetod deklareerib tagastustüübi - meetod peaks alati tagastama väärtuse, välja arvatud juhul, kui selle tagastustüüp on void. See hoiab ära ka vead.
- Java on varustatud suure hulga klasside ja meetodite, Java API-ga, mida saab kasutada ilma, et peaks arendama nii palju koodi "nullist".
- Erinevalt C-st on Java primitiivsed tüübid, näiteks int, alati ühesuurused bittide arvu poolest, mis aitab saavutada platvormidevahelist ühilduvust.
- Varem arvati, et Java on aeglasem kui C, kuid viimastel aastatel on see muutunud vähem oluliseks, sest arvutid on kiiremad.
- Javal on olemas erandite käsitlemine, mis nõuab programmeerijalt veatingimuste, näiteks sisend-väljundivigade käsitlemist.
- Ühel Java-platvormil kompileeritud koodi saab käivitada teistel Java't toetavatel platvormidel ilma lähtekoodi ja baitkoodi muutmata. See tähendab, et inimene võib teha Java-programmi Windowsi arvutile ja lasta seda käivitada Linuxi või Maci arvutis.
Kriitika
Java on samuti kritiseeritud. Mõned kriitikaavaldused on järgmised:
- Geneerikaid lisati Java'le nii, et olemasolev kood jätkaks endiselt töötamist. Selleks kasutati tüübi kustutamist. See tähendab, et kompileerimise ajal eemaldatakse geneerilise argumendi tegelik tüüp. See võib viia selleni, et Java interpretaator käitub kohati ootamatult.
- Javal ei ole täisarvude märkimata tüüpe, mida sellised keeled nagu C kasutavad palju. See tähendab ka seda, et C- ja Java-programmide vahel ei ole võimalik numbrilisi andmeid otse vahetada. Ka krüptograafia tugineb mingil määral sellistele tüüpidele; see muudab krüptograafiat kasutavate rakenduste kirjutamise Java keeles keerulisemaks.
- IEEE on määratlenud standardi ujukomaarvutuse jaoks, IEE 754. Java toetab ainult osa selle standardi funktsioonidest.
Küsimused ja vastused
Küsimus: Kuidas nimetatakse Sun Microsystems'i loodud programmeerimiskeelt?
V: Sun Microsystems'i loodud programmeerimiskeele nimi on Java.
K: Kes praegu toetab ja hoiab Java't ajakohasena?
V: Oracle Corporation toetab ja ajakohastab praegu Java't.
K: Millised on Java praegused pikaajalise toe (LTS) versioonid?
V: Java praegused pikaajalise toe (LTS) versioonid on 17., 11. ja 8. versioon.
K: Millal avaldati Java uusim versioon?
V: Java uusim versioon, versioon 19, ilmus septembris 2022.
K: Kas peale Oracle'i toetab Java't ka mõni teine ettevõte?
V: Jah, Eclipse Adoptium toetab Java't ka vähemalt mais 2026 versiooni 8 puhul ja vähemalt septembris 2027 versiooni 17 puhul.
K: Millist koodi Java kasutab?
V: Java kasutab objektorienteeritud koodi, mis tähendab, et see põhineb objektidel, mis töötavad koos, et programmid saaksid oma tööd teha. See näeb välja sarnane C, C++ või C# keelega, kuid nendes keeltes kirjutatud kood ei tööta enamasti ilma muutmata.
K: Kuidas muudab Java ennast platvormi sõltumatuks?
V: Java muudab end platvormi sõltumatuks, pannes kompilaatori muutma koodi masinakoodi asemel spetsiaalsesse formaati, mida nimetatakse bytecode'iks. See tähendab, et programmi käivitamisel saab bytecode'i tõlgendada spetsiaalne programm, mida nimetatakse virtuaalmasinaks, mis tõlgib selle masinakoodiks, nii et see saab töötada erinevates operatsioonisüsteemides, näiteks Androidis.
Otsige