Java (programmeertaal) Niet te verwarren met JavaScript.
Java is een objectgeoriënteerde programmeertaal. Java is een platformonafhankelijke taal die qua syntaxis grotendeels gebaseerd is op de (eveneens objectgeoriënteerde) programmeertaal C++. Java beschikt echter over een uitgebreidere klassenbibliotheek dan C++. GeschiedenisJava ontstond begin jaren 90 in een klein dochterbedrijf van Sun Microsystems onder leiding van James Gosling. Dat bedrijfje, First Person (met onder meer Arthur van Hoff en Patrick Naughton), had als opdracht: "make something cool" (vertaald: maak iets cools). In de beginjaren richtte het bedrijfje zich op software voor settopboxen. Toen enkele onderhandelingen op het nippertje mislukten begonnen ze aan Java. De werknaam Oak werd gekozen toen men naar buiten keek bij het zoeken naar een naam en daar een eik (Engels: Oak) zag staan. Er bleek echter al een programmeertaal met die naam te bestaan, dus kozen ze "Java", een verwijzing naar Javaanse koffie. Later bouwden ze voort op deze terminologie en introduceerden ze JavaBeans (bonen) en JAR-archieven (Java ARchive) (een jar is een pot). Aanvankelijk wilde men Java promoten als programmeertaal voor allerhande elektronische apparaten, zoals televisies, afstandsbedieningen en koelkasten. Maar toen het world wide web meer en meer aan populariteit won, bedacht Sun dat ze hun (toen nog steeds niet al te populaire) taal goed konden gebruiken in een webomgeving. Dankzij de open specificatie en de mogelijkheid om een Javaprogramma als applet in een webpagina in te bedden (ook wel "embedden" genoemd) was de hype al snel gecreëerd. Het gebruik van Java voor kleine apparaten werd korte tijd later (1997) toch gerealiseerd met het uitbrengen van de Java Card technology, waarmee chipkaarten in Java geprogrammeerd kunnen worden. Deze techniek werd al gauw na de introductie in de mobieletelefoon-wereld geadopteerd voor gebruik in de simkaart. Het bleek aan te slaan en in 2005 werd deze Javatechniek in meer dan 80% van de uitgegeven simkaarten toegepast. De volgende generatie Java bood vervolgens de mogelijkheid om Javaprogrammatuur op servers zelf uit te voeren (Engels: 'server-side'). Dit gebeurt in de vorm van servlets, Enterprise JavaBeans en JavaServer Pages. Met name op dit gebied heeft Java de afgelopen jaren zijn kracht bewezen en wordt de taal gezien als een belangrijke omgeving voor webapplicaties. Zie ook Java 2 Enterprise Edition. Sterk in opkomst is de Java-versie die bedoeld en geschikt is voor apparatuur met een beperkte verwerkingscapaciteit, zoals pda's, mobiele telefoons en — eindelijk — de settopbox. Zie hiervoor Java 2 Micro Edition. Op 13 november 2006 gaf Sun delen van Java vrij als opensourcesoftware, onder de GNU General Public License (GPL). Op 8 mei 2007 gaf Sun de laatste delen van Java vrij onder de GPL, op enkele kleine gedeeltes na waar Sun niet het auteursrecht op heeft. Toen Google succesvol werd met het besturingssysteem Android, dat in Java geschreven programma's kan uitvoeren, werd Java populairder bij ontwikkelaars. Dit had ten dele te maken met de geoptimaliseerde virtuele machine Dalvik die gebruikt wordt om Java-programma's uit te voeren, waardoor Java-programma's sneller werden. ReleasesJava heeft de volgende versies gekend:
Over de nummering van de versies is veel te doen geweest. Na het uitbrengen van versie 1.2 is de 2 vaak vermeld achter Java, wat dan een hele reeks boeken opleverde die "Java 2 behandelden", ook als het om versie 1.3 of 1.4 ging. Vanaf versie 1.5.0 was er een dubbele nummering: had men het over Java 5.0, dan ging het over de JRE of Java Runtime Environment. Het versienummer 1.5.0 verwees heel specifiek naar de JDK of Java Development Kit, met andere woorden de ontwikkelomgeving. SE staat overigens voor "Standard Edition". GebruikGedurende de jaren 90 is Java tamelijk populair geworden. In de meeste gevallen leek Java alleen goed voor gebruik in het onderwijs en voor webapplicaties, respectievelijk vanwege de strakke syntaxis en de mogelijkheid "applets" in webpagina's in te bouwen. Door kleine verschillen in Java-versies tussen diverse browsers is het gebruik van applets eigenlijk nooit echt van de grond gekomen, wat geleid heeft tot de introductie van de Java-plug-in: in plaats van een virtuele Javamachine door de browserbouwer in te laten bouwen, kan de gebruiker hem zelf downloaden wanneer dat nodig is. Hiermee wordt incompatibiliteit tussen JVM's van verschillende merken omzeild. Een ander platform waar Java veel wordt gebruikt is de mobiele telefoon. Veel toestellen bieden de mogelijkheid om Javaprogramma's uit te voeren. Deze programma's moeten dan wel voldoen aan de specificaties die zijn vastgelegd in de Java 2 Micro Edition-standaard. Het gebruik van Javaprogramma's in servers is meer en meer toegenomen sinds het implementeren van just in time compilatie, dat op het niveau van de Java Virtual Machine een grote versnelling van de uitvoering met zich meebracht, waardoor de eerder trage Javaprogramma's nu ook bruikbaar werden voor serverapplicaties. Daarnaast bevatten de J2EE (Enterprise Edition)-bibliotheken een groot aantal klassen voor het programmeren van (web)serverapplicaties, het communiceren met gegevensbestanden en het gebruik van allerlei generieke diensten. De meeste internet-gebaseerde bankdiensten in Nederland en België bijvoorbeeld draaien inmiddels op Java-technologie. Het opensource-contentmanagementsysteem van Nederlandse bodem MMBase is geheel geschreven in Java. Java is door de eenvoud en webbased-mogelijkheden ook erg populair als programmeertaal voor computerspellen. Een voorbeeld hiervan is Minecraft. Ook de ontwikkeling van bibliotheken, zoals Java OpenAL (JOAL) en Java OpenGL (JOGL), draagt bij aan het gebruik van Java voor computerspellen. Er worden ook opensourcebibliotheken ontwikkeld, zoals de Lightweight Java Game Library (LWJGL). De jMonkeyEngine is een engine voor het ontwikkelen van 3D-computerspellen in Java. Vergelijking met andere talenJava versus C++Java wordt gecompileerd naar bytecode voor een virtuele machine, de Java Virtual Machine (JVM). De JVM is beschikbaar voor allerlei verschillende soorten computers. Hierdoor is de gecompileerde bytecode platformonafhankelijk, dat wil zeggen de code kan op elke willekeurige computer draaien, onafhankelijk van het besturingssysteem (zoals Windows, Unix of Mac OS X). Er is dus maar één (virtueel) platform: de JVM. C++-broncode (en ook de broncode van C, de niet object-georiënteerde voorloper van C++) wordt meestal direct naar machinetaal gecompileerd, waardoor de uitvoerbare bestanden slechts op één doelplatform draaien. De Javabytecode wordt op het laatst mogelijke moment (just in time, JIT) gecompileerd naar machinetaal. Bij deze JIT-compilatie worden ook de dynamische eigenschappen van een programma meegenomen. Het kan gebeuren dat veelgebruikte bytecode opnieuw wordt gecompileerd omdat in een gebleken situatie met een iets andere compilatie grote snelheidswinsten te boeken zijn. Hierdoor zal een Javaprogramma in eerste instantie langzamer draaien dan vergelijkbare programma's die direct naar machinetaal gecompileerd zijn. In de begintijd van de programmeertaal Java was het JIT-compileren ook nog niet volledig geïmplementeerd. Hierdoor heeft Java een serieus imagoprobleem opgelopen dat nog steeds voortduurt, hoewel Java tegenwoordig competitief presteert. Daarnaast wordt van Java ten opzichte van C++ soms als nadeel aangemerkt dat voor de taal C++ onafhankelijke ISO/ANSI-comités bestaan, terwijl Java nog steeds in handen lijkt te zijn van Oracle. Anderen beweren dat daar tegenover staat dat Java nog de mogelijkheid heeft om te groeien, zich aan te passen en nieuwe ontwikkelingen in te bouwen, terwijl C++ door standaardisatie verstard is en dus aan alle kanten door allerlei ontwikkelingen ingehaald wordt. In Java wordt de programmeur beter tegen zichzelf beschermd dan in C++ en C. Zo is er in Java geen pointermanipulatie. Dit is een voordeel omdat fouten bij het gebruik van pointers moeilijk te traceren zijn en zelfs kunnen uitlopen op het crashen van het besturingssysteem. Nadeel is dan weer dat het de vrijheid van de programmeur beperkt. Een ander belangrijk verschil tussen Java en C++ is het ontbreken van expliciet geheugenbeheer in Java: Java houdt zelf bij welke objecten met de new-operator zijn aangemaakt en verwijdert deze automatisch zodra er geen referenties meer naar die objecten zijn. Daarnaast is exception handling grondiger en correcter geregeld dan in C++. Net als C++ ondersteunt Java (sinds 5) ook generiek programmeren. In tegenstelling tot in C++ bestaan in Java geparametriseerde types alleen voor de compiler. In Java worden deze types vervangen door het overeenkomende, minst specifieke niet-generieke type (bv.: Sommigen vinden Java een iets overzichtelijkere taal dan C++, maar dat is een kwestie van smaak: het schrijven van totaal onbegrijpelijke programma's is met C(++) gemakkelijker dan met Java. Veel C++-programmeurs missen zaken die in Java bewust zijn weggelaten zoals destructors, operator-overloading en pointermanipulatie. Verder klagen ze over het feit dat de garbage-collector de ongebruikte objecten niet snel genoeg vrijgeeft. Java en JavaScriptVeel mensen verwarren Java met JavaScript, maar in feite hebben de twee talen weinig met elkaar te maken. Hoewel beide talen op het eerste gezicht qua syntaxis op elkaar lijken, zijn er grote verschillen:
Java vs .NETHet concept van de virtuele machine (VM) is ouder dan Java zelf. In de jaren 70 was er de P-Code-virtuele machine om Pascalprogramma's platformonafhankelijk mee uit te voeren. Ook Microsoft creëerde later zijn eigen virtuele machine: de Common Language Runtime of CLR, de basis van .NET. Hét grote verschil tussen de Java VM van Sun en de CLR van Microsoft is echter dat die van Sun op verschillende besturingssystemen kan draaien, terwijl die van Microsoft beperkt is tot de diverse Windows-versies van Microsoft. Al is er inmiddels door de opensourcegemeenschap een aantal succesvolle .NET-runtimes voor Linux uitgebracht, waarvan Mono de bekendste is, waarmee ook .NET-code op andere besturingssystemen kan draaien. Java en open sourceVaak wordt Java genoemd in verband met open source en open standaarden en op 13 november 2006 kondigde Sun Microsystems aan Java vrij te geven onder de GNU General Public License. Al eerder had Sun het beheer van het Javaplatform in handen gelegd van een onafhankelijke organisatie, het Java Community Process (JCP). Dit samenwerkingsverband van Sun met andere bedrijven, instellingen en individuele personen bepaalt welke API's en andere standaarden onderdeel gemaakt worden van het platform. Ook bepaalt de JCP de richting van het kernplatform zelf – welke klassen opgenomen worden in de standaardbibliotheek en welke veranderingen er doorgevoerd worden in de taal zelf. Over veranderingen in het kernplatform heeft Sun echter een veto binnen het JCP. Sun heeft destijds een Java-ontwikkelomgeving uitgebracht, NetBeans, die later vrijgegeven is in de opensourcegemeenschap en nu door een opensourcegemeenschap verder wordt ontwikkeld en beheerd. Ook zijn in de opensourcewereld veel tools en software te vinden voor Java en/of in Java geschreven, die worden uitgebracht onder een van de vele opensourcelicenties. VoorbeeldprogrammaHet bekende "Hello world"-programma in Java kan er zo uitzien: public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
Zie ookExterne links
Bronnen, noten en/of referenties
Wikibooks heeft meer over dit onderwerp: Programmeren in Java.
|