Gaan na inhoud

Java (programmeertaal)

in Wikipedia, die vrye ensiklopedie
Duke, die Java-gelukbringer

Java is 'n veeldoelige, konkurrente, klasgebaseerde, objekgeoriënteerde programmeertaal wat spesifiek ontwerp is om so min as moontlik implementeringafhanklikhede te hê. Dit is bedoel om programmeerders toe te laat om op 'n skryf eenkeer, hardloop enige plek-basis te werk, wat beteken dat die kode wat loop op 'n platform nie hersaamgestel hoef te word om op 'n ander platform te werk nie. Java-toepassings is tipies saamgestel uit bytecode (klaslêer) wat dan kan loop op 'n Java Virtual Machine (JVM), ongeag van die rekenaarargitektuur. Java is een van die gewildste programmeertale in gebruik, veral vir kliëntbedienerwebprogramme, met meer as 10 miljoen gebruikers gerapporteer. Java is oorspronklik ontwikkel en vrygestel deur James Gosling by Sun Microsystems (wat sedertdien met Oracle Corporation saamgesmelt het). Die taal deel baie van die sintaks van die programmeertale C en C++.

Die oorspronklike en die verwysinguitvoeder-Java-opstellers, virtuele masjiene, en klasbiblioteke is ontwikkel deur Sun in 1991 en die eerste keer in 1995 vrygestel. In Mei 2007, in ooreenstemming met die spesifikasies van die Java Gemeenskapproses, het Sun Java tegnologie geherlisensieer onder die GNU General Public License. Ander het ook alternatiewe implementering van hierdie Sun tegnologie, soos die GNU Compiler vir Java en GNU CLASSPATH, ontwikkel.

Geskiedenis

[wysig | wysig bron]

Java is in Junie 1991 as 'n projek begin deur James Gosling, Mike Sheridan en Patrick Naughton.

Kernbeginsels

[wysig | wysig bron]

Daar was vyf hoofdoelwitte tydens die skepping van die Java programmeertaal:

  1. Dit moet eenvoudig en objek-georiënteerd wees, en moet bekend voel.
  2. Dit moet veilig en robuust wees.
  3. Dit moet onafhanklik van hardeware argitektuur wees.
  4. Die moet met hoë werkverrigting uitvoer.
  5. Dit moet interpreteerbaar wees, threads ondersteun en dinamies wees.


Java-virtuele masjien (JVM)

[wysig | wysig bron]

Die Java-virtuele masjien (Engels: Java Virtual Machine, afgekort JVM) is 'n sagtewaregebaseerde, abstrakte rekenaarmasjien wat programme uitvoer wat na Java-bytekode saamgestel is. Die JVM vorm 'n kernonderdeel van die Java-platform en maak dit moontlik om dieselfde saamgestelde program op verskillende bedryfstelsels en rekenaarargitekture uit te voer, mits 'n versoenbare JVM beskikbaar is.[1]

Die JVM is nie self 'n fisiese verwerker nie, maar 'n abstrakte masjien met sy eie instruksiestel en geheuegebiede. Die implementering daarvan kan tussen bedryfstelsels en hardewareplatforms verskil, terwyl die formaat en betekenis van die uitgevoerde bytekode volgens die JVM-spesifikasie bepaal word.[1]

Samestelling en uitvoering

[wysig | wysig bron]

Java-bronkode word gewoonlik in lêers met die uitbreiding .java geskryf. Die Java-samesteller (javac) vertaal hierdie bronkode na bytekode, wat normaalweg in klaslêers met die uitbreiding .class gestoor word.

Bytekode is 'n tussenvorm van programinstruksies wat vir die JVM ontwerp is, eerder as vir 'n spesifieke fisiese verwerker. Die JVM laai en verifieer klaslêers voordat die relevante instruksies uitgevoer word.[1]

Die uitvoering van 'n gewone Java-program kan soos volg opgesom word:

  1. Die programmeerder skryf die Java-bronkode in 'n .java-lêer.
  2. Die Java-samesteller vertaal die bronkode na bytekode.
  3. Die bytekode word in een of meer .class-lêers gestoor.
  4. Die JVM laai en verifieer die klaslêers.
  5. Die JVM voer die instruksies uit deur middel van interpretasie, samestelling na masjienkode, of 'n kombinasie daarvan.

Hierdie benadering ondersteun Java se beginsel van platformonafhanklikheid. Die JVM-spesifikasie is nie tot 'n enkele bedryfstelsel of verwerkerargitektuur beperk nie.[1]

Interpretasie en betydse samestelling

[wysig | wysig bron]

'n JVM kan bytekode direk interpreteer of dit na inheemse masjienkode omskakel. Baie moderne JVM-implementerings gebruik albei tegnieke om programuitvoering te optimaliseer.

Betydse samestelling (Engels: just-in-time compilation, of JIT) is 'n tegniek waardeur bytekode tydens programuitvoering na masjienkode omgeskakel word. In implementerings soos Java HotSpot kan gereeld uitgevoerde programdele geïdentifiseer en geoptimaliseer word om die werkverrigting te verbeter.

HotSpot gebruik onder meer gelaagde samestelling (tiered compilation), waar verskillende vlakke van samestelling en optimalisering tydens uitvoering toegepas kan word.[2]

Geheuebestuur

[wysig | wysig bron]

Die JVM spesifiseer verskeie geheuegebiede wat tydens programuitvoering gebruik word. Dit sluit onder meer die hoop (heap), waarin voorwerpe en skikkings gewoonlik gestoor word, en die stapel (stack) vir elke uitvoeringsdraad in.

Die JVM-spesifikasie vereis nie 'n bepaalde metode vir die bestuur van ongebruikte voorwerpe nie. Baie moderne JVM-implementerings gebruik egter outomatiese geheueherwinning (Engels: garbage collection) om geheue wat nie meer deur die program benodig word nie, beskikbaar te stel.

Outomatiese geheueherwinning verminder die behoefte aan handmatige geheuevrystelling, maar skakel nie alle moontlike geheueprobleme uit nie.[1]

Java-platform en ontwikkelingshulpmiddels

[wysig | wysig bron]

Die JVM vorm deel van 'n groter sagtewareplatform wat die ontwikkeling en uitvoering van Java-programme ondersteun.

Die Java-ontwikkelingspakket (Java Development Kit, JDK) bevat onder meer die Java-samesteller, die JVM en hulpmiddels vir die ontwikkeling, ontleding en uitvoering van Java-programme.

Die term Java-uitvoeringsomgewing (Java Runtime Environment, JRE) verwys tradisioneel na die komponente wat nodig is om Java-programme uit te voer, sonder die volledige stel ontwikkelingshulpmiddels.

Die JVM en die Java-programmeertaal is nou verwant, maar nie identies nie. Ander programmeertale, waaronder Kotlin en Scala, kan ook programme na JVM-versoenbare bytekode saamstel.[1]

Objekgeoriënteerde programmering

[wysig | wysig bron]

Objekgeoriënteerde programmering (Engels: object-oriented programming, OOP) is een van Java se belangrikste programmeringsparadigmas. Dit behels die organisering van sagteware rondom objekte wat data en verwante gedrag kombineer. Java ondersteun onder meer klasse, objekte, oorerwing, enkapsulering, polimorfisme en abstraksie.[3]

Anders as suiwer objekgeoriënteerde programmeertale, ondersteun Java ook primitiewe datatipes, statiese metodes en ander taalkonstrukte wat nie die skepping van 'n objek vereis nie.

Klasse en objekte

[wysig | wysig bron]

'n Klas (Engels: class) definieer die struktuur en gedrag van 'n bepaalde soort objek. Dit kan velde bevat waarin data gestoor word, asook metodes wat die gedrag van objekte beskryf.

'n Objek (Engels: object) is 'n instansie van 'n klas. Verskillende objekte van dieselfde klas kan hul eie toestand hê, terwyl hulle die gedrag deel wat deur die klas gedefinieer word.

Klasse kan ook konstruktors bevat wat tydens die skepping van nuwe objekte gebruik word om hul aanvanklike toestand te bepaal.[4]

Enkapsulering

[wysig | wysig bron]

Enkapsulering (Engels: encapsulation) verwys na die samevoeging van data en verwante metodes binne 'n klas, asook die beheer van toegang tot die interne toestand van objekte.

Java verskaf toegangswysigers soos public, protected en private om die sigbaarheid van klasse en hul lede te beheer. Die afwesigheid van 'n eksplisiete toegangswysiger kan pakketvlaktoegang tot gevolg hê.

Enkapsulering maak dit moontlik om implementeringsbesonderhede te verberg en die gebruik van 'n klas deur 'n omskrewe koppelvlak te beheer.[4]

Oorerwing

[wysig | wysig bron]

Oorerwing (Engels: inheritance) stel 'n klas in staat om bepaalde eienskappe en gedrag van 'n ander klas te erf.

In Java word die sleutelwoord extends gebruik om 'n subklas van 'n bestaande klas af te lei. Die oorspronklike klas staan bekend as die superklas.

Java ondersteun enkelvoudige klasurewing: 'n klas kan slegs een direkte superklas hê. 'n Klas kan egter verskeie koppelvlakke implementeer.

Die final-wysiger kan gebruik word om te voorkom dat verdere subklasse van 'n klas geskep word. Die sealed-wysiger maak dit moontlik om te beperk watter klasse 'n bepaalde klas mag uitbrei.[4]

Polimorfisme

[wysig | wysig bron]

Polimorfisme (Engels: polymorphism) verwys na die vermoë om verskillende soorte objekte deur 'n gemeenskaplike tipe of koppelvlak te hanteer, terwyl hul onderskeie implementerings verskillende gedrag kan vertoon.

Java ondersteun dinamiese metodedispatch, waardeur die implementering van 'n oorskryfbare instansiemetode volgens die werklike tipe van die objek gekies word.

'n Subklas kan 'n geërfde metode oorheers (Engels: override) deur 'n geskikte nuwe implementering daarvan te verskaf.

Java ondersteun ook metode-oorlading (Engels: method overloading), waar verskeie metodes dieselfde naam kan hê, maar verskillende parameterlyste gebruik. Oorlading en oorheersing is afsonderlike taalmeganismes.[4]

Abstrakte klasse en koppelvlakke

[wysig | wysig bron]

Abstraksie (Engels: abstraction) behels die voorstelling van noodsaaklike eienskappe en gedrag sonder dat alle implementeringsbesonderhede aan die gebruiker daarvan blootgestel word.

'n Abstrakte klas kan abstrakte metodes bevat waarvan die implementering aan geskikte subklasse oorgelaat word. Abstrakte klasse kan ook gewone metodes en velde bevat.

'n Koppelvlak (Engels: interface) beskryf 'n tipe waaraan klasse of ander koppelvlakke kan voldoen. Klasse gebruik die sleutelwoord implements om koppelvlakke te implementeer.

Moderne Java-koppelvlakke kan benewens abstrakte metodes ook verstekmetodes (default methods), statiese metodes en private hulpmetodes bevat.[5]

Hierdie meganismes bevorder die skeiding van koppelvlakke en implementerings, en ondersteun die ontwikkeling van uitbreibare sagtewarestelsels.

Sintaks

[wysig | wysig bron]

Die sintaks van Java word grootliks beïnvloed deur C++. Java is ontwerp as 'n objek-georiënteerde taal (maar nie as 'n suiwer objek-georiënteerde taal nie, aangesien daar ook primitiewe datatipes bestaan, soos int.)

Java se styl van aanmerkings op kode is soortgelyk aan C++, met 'n spesiale sintaks wat ook beskikbaar is om JavaDocs te skep.

Kritiek

[wysig | wysig bron]

Kritiek gerig op Java sluit in uitvoertyd,[6] die implementasie van generika,[7] hoe getalle wat slegs positief kan wees hanteer word,[8] die implementing van dryfpunt-bewerkings en 'n geskiedenis van sekuriteitsfoute in die hoof JA VM Hotspot.

Sien ook

[wysig | wysig bron]
  • Java, vir ander betekenisse van die begrip Java.
  • JavaScript, 'n programmeertaal.

Verwysings

[wysig | wysig bron]
  1. 1 2 3 4 5 6 "The Java Virtual Machine Specification – Chapter 1: Introduction". Oracle (in Engels). Besoek op 29 Oktober 2026.
  2. ↑ "Java HotSpot Virtual Machine Performance Enhancements". Oracle (in Engels). Besoek op 29 Oktober 2026.
  3. ↑ "Object-Oriented Programming Concepts". Oracle Java Tutorials (in Engels). Besoek op 29 Oktober 2026.
  4. 1 2 3 4 "The Java Language Specification – Chapter 8: Classes". Oracle (in Engels). Besoek op 29 Oktober 2026.
  5. ↑ "The Java Language Specification – Chapter 9: Interfaces". Oracle (in Engels). Besoek op 29 Oktober 2026.
  6. ↑ "argiefkopie". Geargiveer vanaf die oorspronklike op 11 Februarie 2008. Besoek op 5 November 2017.
  7. ↑ https://web.archive.org/web/20071010002142/http://weblogs.java.net/blog/arnold/archive/2005/06/generics_consid_1.html
  8. ↑ https://web.archive.org/web/20090220171410/http://darksleep.com/player/JavaAndUnsignedTypes.html