Java (programmeertaal)
| Java -programmeertaal | |
|---|---|
| Auteur | James Gosling , Sun Microsystems |
| Datum van herkomst | 23 mei 1995 |
| Laatste versie | 18 [1] |
| Gebruik | Algemeen doel |
| paradigma's | Objectgericht |
| Typen | Luid |
| Taalspecificaties | De Java-taalspecificatie, Java SE 17 |
| Algemene extensies | .jar, .java, .class |
| Beïnvloed door | Simula , Ada 83 , C ++ , Eiffel , Generic Java , Mesa , Modula-3 , Oberon , Objective-C , UCSD Pascal , Smalltalk |
| Het beïnvloedde | Ada 2005 , BeanShell , C # , Clojure , D , ECMAScript , Groovy , J # , JavaScript , PHP , Python , Scala , Seed7 , Vala |
| Referentie implementatie | |
| Implementatie | tolk met JITter |
| Besturingssysteem | Windows , Linux , macOS |
| Licentie | GNU General Public License , Java Community Process |
| Website | Java-technologie Oracle-ontwikkelaars |
In de informatica is Java een programmeertaal op hoog niveau , objectgeoriënteerd en statisch typen , die vertrouwt op het gelijknamige uitvoeringssoftwareplatform , specifiek ontworpen om zo onafhankelijk mogelijk te zijn van het uitvoeringshardwareplatform (door eerst bytecode te compileren en vervolgens te interpreteren door een JVM ) (hoewel deze functie prestaties in termen van berekening lager inhoudt dan die van direct gecompileerde talen zoals C en C ++ of daarom perfect aangepast aan het hardwareplatform).
Geschiedenis
Java is ontstaan op basis van onderzoek gedaan aan de Stanford University in het begin van de jaren negentig . In 1992 werd de taal Oak (in het Italiaans "eik") geboren, geproduceerd door Sun Microsystems en gemaakt door een groep deskundige ontwikkelaars onder leiding van James Gosling . [2] Deze naam werd later veranderd in Java (een Indonesische koffiesoort ; het geadopteerde logo is een kopje voor deze drank) vanwege copyrightkwesties : de programmeertaal Oak bestond al. [3]
Om de overgang naar Java te vergemakkelijken voor ouderwetse programmeurs , met name degenen die zijn gekoppeld aan talen zoals C++ , is de basissyntaxis ( besturingsstructuren , operators , enz.) Bijna identiek gehouden aan die van C++ [4 ] [5] ; op taalniveau zijn er echter geen functies geïntroduceerd die als een bron van onnodige complexiteit worden beschouwd en die de introductie van bepaalde bugs tijdens het programmeren bevorderen, zoals aanwijzerberekeningen en overerving van meerdere klassen. [6] Voor de objectgeoriënteerde kenmerken van de taal hebben we ons laten inspireren door C++ en vooral door Objective C. [7]
In eerste instantie besloot Sun dit nieuwe product te gebruiken om complexe toepassingen voor kleine elektronische apparaten te maken; het was pas in 1993 met de explosie van internet dat Java begon op te vallen als een hulpmiddel om te beginnen met programmeren voor internet. Tegelijkertijd kondigde Netscape Corporation de keuze aan om zijn toenmalige naamgenoot en beroemde browser uit te rusten met de Java Virtual Machine (JVM). Dit markeert een revolutie in de wereld van internet: dankzij applets werden webpagina's interactief op clientniveau, d.w.z. applicaties draaien rechtstreeks op de computer van de internetgebruiker en niet op een externe server. Gebruikers kunnen bijvoorbeeld rechtstreeks op de webpagina's games spelen en profiteren van dynamische en interactieve chats.
Java werd officieel aangekondigd op 23 mei 1995 bij SunWorld. Op 13 november 2006 bracht Sun Microsystems de implementatie van de Java-compiler en virtuele machine uit onder de GPL -licentie . Niet alle Java-platforms zijn gratis. De gratis Java-omgeving heet IcedTea. [8] Op 8 mei 2007 heeft Sun ook de bibliotheken vrijgegeven, met uitzondering van enkele componenten die geen eigendom zijn, onder de GPL-licentie, waardoor Java een programmeertaal is waarvan de referentie-implementatie gratis is. [9] De taal wordt gedefinieerd door een document genaamd The Java Language Specification, vaak afgekort JLS . De eerste editie van het document werd gepubliceerd in 1996. [10] Sindsdien heeft de taal talrijke veranderingen en toevoegingen ondergaan, die van tijd tot tijd in volgende edities werden toegevoegd. Eind 2018 is de meest recente versie van de specificatie de Java SE 11 Edition . [10]
Beschrijving
Principes
Java is gemaakt voor vijf hoofddoelen: [11]
- "eenvoudig, objectgericht en vertrouwd" zijn;
- "robuust en veilig" zijn;
- platformonafhankelijk zijn ;
- netwerktools en bibliotheken bevatten ;
- worden ontworpen om code van externe bronnen veilig uit te voeren.
Taal
Een van de fundamentele principes van de taal wordt uitgedrukt door het motto WORA ( schrijf één keer, voer overal uit , dat wil zeggen "één keer schrijven, overal uitvoeren"): gecompileerde code die op het ene platform draait, hoeft niet opnieuw te worden gecompileerd om op een ander platform te kunnen draaien ; in feite is het product van de compilatie in een formaat genaamd bytecode dat kan worden uitgevoerd door elke implementatie van een virtuele processor genaamd Java Virtual Machine ; vanaf 2014 is Java een van de meest gebruikte programmeertalen ter wereld, vooral voor client-server- applicaties , met een aantal ontwikkelaars geschat op ongeveer 9 miljoen. [12] [13] ; een goed startpunt voor het leren van Java is de officiële tutorial [14] .
Hallo Wereld!
Hieronder vindt u de broncode van een eenvoudig programma dat de tekst " Hallo wereld " op de console afdrukt .
klas HalloWereld {
public static void main ( String [] args ) {
Systeem . uit . println ( "Hallo wereld" );
}
}
Een minimaal programma in Java moet noodzakelijkerwijs de klassendefinitie bevatten via de trefwoordklasse gevolgd door de klassenaam en de hoofdmethode of hoofdmethode , evenals het startpunt van het programma waarin variabelen , objecten en statische methoden worden aangeroepen op variabelen en/of dynamisch op objecten.
In het bovenstaande voorbeeld bevat main de instructie voor het afdrukken van de Hello World -string op het scherm ; hoewel het volledig functioneel en gemakkelijk te begrijpen is, wordt er geen gebruik gemaakt van de objectgeoriënteerde filosofie die normaal wordt toegepast op elk programma dat in Java is geschreven. Hieronder staat de broncode van een programma dat dezelfde taak uitvoert als het vorige met behulp van objectgeoriënteerd programmeren .
openbare les Bericht {
privé String om af te drukken ;
openbaar bericht ( String print ) {
dit . toPrint = afdrukken ;
}
openbare ongeldige afdruk () {
Systeem . uit . println ( dit .toPrint ) ;
}
public static void main ( String argumenten [] ) {
Bericht Hallo wereld = nieuw bericht ( "Hallo wereld!" );
hallo wereld . afdrukken ();
}
}
De hoofdmethode vertrouwt het afdrukken van het bericht toe aan een object dat speciaal voor deze taak is gemaakt, waarop de dynamische afdrukmethode die is gedefinieerd vóór de main wordt aangeroepen samen met de constructor van de klasse of die specifieke methode (met dezelfde naam van de klasse) die wordt gebruikt om het klasseattribuut ' toPrint van het object dat in main is gemaakt / geïnstantieerd, te initialiseren. Definieerbare methoden kunnen privé worden verklaard (gemarkeerd met het sleutelwoord private ) als ze alleen binnen dezelfde klasse kunnen worden aangeroepen of openbaar (gemarkeerd met het sleutelwoord public ) als ze ook kunnen worden aangeroepen door andere klassen, van een statisch type (gemarkeerd met de statisch sleutelwoord ) indien vrij aanroepbaar binnen de klasse (bijvoorbeeld op globale variabelen), dynamisch indien aanroepbaar op objecten.
Door nieuwe klassen te schrijven die de afdrukbewerking ondersteunen , kan men het programma aanpassen om berichten van radicaal verschillende typen weer te geven, waarbij de hoofdlijn vrijwel ongewijzigd blijft en alleen de halve regel na de nieuwe wordt gewijzigd . U kunt bijvoorbeeld denken aan een bericht dat is geschreven in een venster dat op het scherm van de gebruikte computer wordt weergegeven, of een tekenreeks die via een netwerkverbinding wordt verzonden om op het venster van een clientcomputer te verschijnen . Of het programma kan met de gebruiker praten op de opdrachtregel of in een venster (beschouw de dialoog als een "interactief bericht").
Het is mogelijk om het gedrag van het programma radicaal te wijzigen met beperkte veranderingen en op bepaalde punten a priori gepredisponeerd ( polymorfisme ): het programma is bestand tegen onverwachte updates en behoeften. Hieronder staat de broncode van twee programma's die dezelfde tekst in een venster tonen . De eerste maakt een standaardvenster waarin de string die als parameter is ingevoerd, wordt geschreven, terwijl het tweede programma een venster maakt met respect voor de parameters (bijvoorbeeld de grootte van het venster) die in de code zijn ingevoegd.
javax.swing.JOptionPane importeren ;
openbare les HelloWorld {
public static void main ( String [] args ) {
JOptionPane . showMessageDialog ( null , "Hallo wereld!" );
}
}
//HelloWorld.java
pakket halloworld ;
javafx.application.Application importeren ;
import javafx.event.ActionEvent ;
javafx.event.EventHandler importeren ;
javafx.scene.Scene importeren ;
javafx.scene.control.Knop importeren ;
javafx.scene.layout.StackPane importeren ;
javafx.stage.Stage importeren ;
openbare klasse HelloWorld breidt Application {
@Override
public void start ( Stage primaryStage ) {
Knop btn = nieuwe knop ();
btn . setText ( "Zeg 'Hallo wereld'" );
btn . setOnAction ( nieuwe EventHandler < ActionEvent > () {
@Override
public void - handle ( ActionEvent- gebeurtenis ) {
Systeem . uit . println ( "Hallo wereld!" );
}
});
StackPane root = nieuwe StackPane ();
wortel . haalKinderen (). toevoegen ( btn );
Scènescène = nieuwe scène ( root , 300 , 250 ) ;
primairStage . setTitle ( "Hallo wereld!" );
primairStage . setScene ( scènes );
primairStage . toon ();
}
public static void main ( String [] args ) {
lanceren ( argumenten );
}
}
De voorgestelde code creëert objecten die worden gebruikt om de grafische interface te beheren. Er wordt eerst een venster gemaakt met de titel Hello World! ; in dit venster wordt een label ingevoegd met het woord Hello World! . Ten slotte wordt de grootte van het venster vastgesteld dat ten slotte zichtbaar wordt gemaakt samen met het label dat het opschrift draagt dat moet worden weergegeven. Ook in deze code wordt objectprogrammering gebruikt, maar op een andere manier: de hoofdpersoon kent niet de mechanismen die nodig zijn om een grafische interface op het scherm te creëren en deze worden bepaald door de JFrame- en JLabel-klassen die a priori zijn voorbereid ( inkapseling ) .
Typ systeem
Java is een typeveilige , statisch getypeerde , nominatieve typesysteem en manifeste typetaal . Op grond van deze kenmerken wordt het over het algemeen als een sterk getypeerde taal beschouwd . De taal onderscheidt duidelijk primitieve typen die atomaire waarden definiëren van gestructureerde typen die samengestelde datastructuren definiëren.
Primitieve typen worden ook wel atomaire typen en basistypen genoemd en worden gedefinieerd in de taalspecificaties: voor elk is de exacte set toegestane waarden en ondersteunde operators bekend.
Gestructureerde typen zijn ook referentietypen , dat wil zeggen, ze definiëren objecten en zijn klassen of interfaces. Hiervan zijn de arrayklassen gedefinieerd in de taalspecificatie; alle andere gestructureerde typen zijn " door de gebruiker gedefinieerd ", dwz door de programmeur. Door de gebruiker gedefinieerde typen die om de een of andere reden aan de taal zijn gebonden, worden verzameld in het pakket java.langen zijn subpakketten; de taal stelt voor sommigen (,, Objecten Stringanderen Iterable) aanvullende syntactische of semantische regels vast.
Referentietypes omvatten klassen voor stringbeheer, arrays en verzamelingen (lijsten, kaarten, enz.).
- Basistypen
| Jongen | Beschrijving | Containerklasse |
|---|---|---|
| byte | 8-bits geheel getal met teken | Byte |
| kort | 16-bits geheel getal met teken | Kort |
| int | 32-bits geheel getal met teken | Geheel getal |
| lang | 64-bits geheel getal met teken | Lang |
| vlot | 32-bits enkele precisie drijvende komma ( IEEE 754 -standaard ) | Vlot |
| dubbele | 64-bits dubbele precisie zwevende komma ( IEEE 754 -standaard ) | Dubbele |
| char | Unicode enkel teken (16-bits geheel getal zonder teken) | Karakter |
| booleaans | trueoffalse |
Booleaans |
Uit dit alles volgt dat de waarden van de basistypen geen objecten zijn. Voor elk basistype is er echter een overeenkomstige klasse, in jargon gedefinieerd als een wrappertype of containertype , in het pakket java.lang, een klasse waarmee u een primitieve typewaarde in een object kunt inkapselen. Geschikte methoden van de wrapper-klasse maken het mogelijk om het object te verkrijgen dat een bepaalde waarde inkapselt, en de waarde ingekapseld door een bepaald object.
Vanaf versie 5.0 worden autoboxing en unboxing ondersteund , waarmee u van het primitieve type naar de corresponderende wrapper -klasse kunt converteren en vice versa. De compiler, "achter de schermen", vertaalt de conversie naar een geschikte methodeaanroep op de containerklasse; daarom is het geen echte conversie, maar een handige syntaxis die de creatie van een object van de wrapper-klasse "verbergt". Net als veel andere programmeertalen heeft Java ook arrays tussen de datastructuren ( zie arrays in Java ).
Constanten
Constante waarden in Java worden geïdentificeerd met het trefwoord: final gevolgd door het type, de naam van de constante en de toegewezen waarde:
uiteindelijke constante_type <constante_naam> = waarde;
voorbeeld:
laatste dubbele PRIJS = 15,99 ;
Volgens afspraak zijn de namen van de constanten allemaal hoofdletters.
Verder is het ook mogelijk om een methode of een klasse definitief te declareren wanneer u in het eerste geval wilt voorkomen dat de methode wordt overschreven in een subklasse of in het tweede geval wilt voorkomen dat er een onderliggende klasse wordt gemaakt vanuit de betreffende klasse.
Gegevensstructuren
Besturingsstructuren
De volgende besturingsstructuren worden ondersteund :
- Selectieve structuren:
if ... elseenswitch, zoals in C. - Iteratieve structuren:
- Het afhandelen van uitzonderingen in Java wordt afgehandeld door een syntaxis
try ... catch ... finallydie vergelijkbaar is met die van C ++.
Naast de constructies voor objectgeoriënteerd programmeren, wordt de rest van de Java - syntaxis genoemd als C , die is afgeleid van of vergelijkbaar is met die van de C-taal .
Objectoriëntatie
Java is een objectgeoriënteerde taal . Het idee achter de OOP is om de echte of abstracte entiteiten weer te geven die de dynamiek bepalen van het probleem dat door de software wordt opgelost in de vorm van unitaire entiteiten, waarbij specifiek gebruik en werking a priori zijn gedefinieerd. Deze entiteiten worden objecten genoemd . De specificaties die de kenmerken van deze eenheden definiëren en waaronder ze in jargon worden gemaakt of geïnstantieerd , worden klassen genoemd .
Java is echter geen pure objecttaal, maar alleen objectgeoriënteerd : de waarden van primitieve typen zijn bijvoorbeeld geen objecten.
In de Java-taal hebben objecten velden ( ook wel instantie- of voorbeeldattributen of variabelen genoemd ) en methoden . Methoden worden meestal gebruikt om gemakkelijk vele andere constructies te implementeren die sommige andere talen native bieden, zoals gebeurtenisafhandeling (geïmplementeerd via listeners ) of eigenschappen, geïmplementeerd via accessor-methoden en, meer in het algemeen, met JavaBeans- objecten .
In Java zijn er geen functies: de blokken code die "niet bij een object horen" worden geïmplementeerd als statische methoden van een bepaalde klasse en zijn daarom altijd methoden. In Java ligt een sterke nadruk op het onderscheid tussen interface en implementatie van een klasse of object: de eerste is de verzameling openbare specificaties die de gebruikers van een bepaald object kunnen gebruiken, terwijl de tweede de verzameling interne structuren en uitvoerbare instructies is. die over het algemeen aan die specificaties voldoen. De term interface wordt ook in een andere betekenis gebruikt, zoals hieronder uitgelegd.
Erfenis
Overerving tussen typen wordt ondersteund . Hiermee kunt u de hiërarchie vaststellen van de klassen waaruit een programma bestaat. Taal dicteert dat de bekende klasse aan het hoofd van de hiërarchie staat java.lang.Object. [16]
In Java is er geen meervoudige overerving tussen klassen. [17] Enerzijds zorgt deze beperking voor een lineaire klassenhiërarchie en voorkomt het de nadelen die worden geïntroduceerd door meervoudige overerving. Aan de andere kant kan het gemakkelijk worden overwonnen door gebruik te maken van interfaces , dat wil zeggen typen die vergelijkbaar zijn met klassen, maar specifiek ontworpen om te worden uitgebreid en onderworpen aan bepaalde beperkingen die door de taal worden opgelegd. [18] [19] Bijgevolg bieden ze enkele voordelen van meervoudige overerving, zoals de mogelijkheid dat hetzelfde object tot verschillende typen behoort, zonder de nadelen zoals de dubbelzinnigheid die wordt geïntroduceerd door het feit dat een klasse verschillende implementaties van dezelfde methode kan erven .
Sinds de komst van Java heeft enkele overerving zich geleidelijk gevestigd als het standaardmodel van overerving in objectgeoriënteerde technologieën en is het ook omarmd door de talen van het Microsoft .NET -framework . Vanaf Java 8 is het mogelijk om de standaardmethoden van de interfaces te gebruiken om een beperkte meervoudige overerving te bouwen. Dit heeft geen invloed op de hoofdovererving die enkelvoudig blijft, maar maakt het mogelijk dat methoden tegelijkertijd van meerdere interfaces worden overgenomen. [20]
Ontwikkelomgevingen
Om programma's in Java te ontwikkelen, is elke teksteditor in theorie voldoende ; in de praktijk, als je iets meer wilt schrijven dan de klassieke hallo wereld , heb je een geïntegreerde ontwikkelomgeving (IDE) nodig: er zijn verschillende IDE's ( Integrated Development Environment ), sommige gratis en andere tegen betaling.
Java-ontwikkelkit
Sun (nu Oracle ) biedt een specifieke software-ontwikkelingskit , de Java Development Kit (of JDK ), die een aantal veelgebruikte tools bevat, waaronder,, en javacandere , ontworpen voor het verwerken ( compileren ) van bestanden, bronnen en/of reeds gecompileerd, dus inclusief de Java Runtime Environment (JRE). Ze werken aan de code die al op het systeem is geschreven en opgeslagen: geen van hen biedt een visuele schrijfomgeving met die functies die nuttig zijn bij het maken van complexe programma's, zoals syntaxisaccentuering door verschillende kleuren, automatische aanvulling of de mogelijkheid om tussen bronnen te navigeren door op de muis te klikken .
javadocjar
Geïntegreerde ontwikkelomgevingen
Oracle heeft zelf de ontwikkeling gepromoot van een gratis en open source ontwikkelomgeving genaamd NetBeans , die alleen kan worden gedownload [21] , of (optioneel) met de JDK [22] .
- Een veelgebruikte open-source geïntegreerde ontwikkelomgeving is Eclipse , gedoneerd aan de ontwikkelaarsgemeenschap door IBM en waarvan de ontwikkeling wordt gevolgd door een enorme gemeenschap van gebruikers.
- Een van de meest populaire commerciële geïntegreerde ontwikkelomgevingen is JBuilder , geproduceerd door Borland .
- Een geïntegreerde ontwikkelomgeving die meerdere prijzen heeft gewonnen [23] is IntelliJ IDEA .
- Een gratis en vooral lichte ontwikkelomgeving voor Java is BlueJ, met een duidelijke didactische aanpak.
- Een andere geïntegreerde ontwikkelomgeving voor Java is JCreator , waarvan de voordelen vooral de eenvoud van de interface en de lichtheid zijn.
- Een ontwikkelomgeving voor Java (en andere programmeertalen) is Visual Studio Code : gratis en gratis software , ook als de officiële versie onder een propriëtaire licentie valt .
Uitvoeringsomgeving
Java-platform
Programma's die zijn geschreven in Java-taal, na een initiële compilatiefase met het verkrijgen van de zogenaamde bytecode , zijn bedoeld voor uitvoering op het Java-platform via een interpretatiefase (om deze reden wordt de Java-taal ook semi-geïnterpreteerd genoemd) door een Java Virtual Machine en running hebben toegang tot de standaard bibliotheek -API's . Deze twee stappen bieden een abstractieniveau waardoor applicaties volledig onafhankelijk kunnen zijn van het hardwaresysteem waarop ze zullen draaien. Een implementatie van het java-platform is de Java Runtime Environment (JRE), die nodig is voor de uitvoering van het gecompileerde programma, terwijl voor de ontwikkeling van programma's in Java uitgaande van de broncode de Java Development Kit (JDK) die ook de JRE bevat .
Draagbaarheid
Uitvoeren van programma's die in Java zijn geschreven, moeten hetzelfde gedrag vertonen in verschillende uitvoeringscontexten. Om dit te bereiken werken we op verschillende niveaus en de eerste daarvan is natuurlijk de taal die speciaal voor dit doel is ontworpen. Het biedt bijvoorbeeld een uniforme syntaxis voor het definiëren van kritieke secties , een taak die in andere talen meestal plaatsvindt met behulp van bibliotheken van derden of systeemprimitieven. [24] Bovendien laat het praktisch geen ruimte voor ongedefinieerd gedrag of implementatieafhankelijk gedrag van de uitvoeringsomgeving.
De taalspecificatie vereist een uitvoeringsomgeving die toezicht houdt op de uitvoering van het programma en die bepaalde bewerkingen verbiedt die anders onveilig zouden zijn. Ze verwijzen expliciet naar de Java Virtual Machine , waarmee ze aangeven dat deze de typische ontvanger is van de bytecode die wordt geproduceerd door de eerste compilatie van een Java-programma, en in feite compileert de compiler javacin de JDK precies in bytecode. Het is echter mogelijk om naar verschillende architecturen te compileren, in feite is het mogelijk om specifieke objectcode van een bepaald besturingssysteem te produceren met behulp van een speciale compiler, bijvoorbeeld de GNU Compiler Collection .
In principe zou je het programma maar één keer moeten kunnen schrijven en het overal laten draaien, vandaar de beroemde slogan van Sun: "write once, run overal". Draagbaarheid is een technisch moeilijk te bereiken doel, en het succes van Java op dit gebied is een kwestie van enige controverse. Hoewel het inderdaad mogelijk is om in Java programma's te schrijven die zich consistent gedragen op veel verschillende hardwareplatforms , zijn deze afhankelijk van virtuele machines die op zichzelf programma's zijn en die onvermijdelijk hun eigen bugs hebben , die van elkaar verschillen: hiervoor is het een parodie op Sun's De slogan "Eén keer schrijven, overal uitvoeren" was geboren, die werd "Een keer schrijven, overal debuggen " . [25]
Bibliotheken
Platformversies
De taal zelf definieert slechts een klein deel van de bibliotheken die in combinatie met de taal zelf kunnen worden gebruikt. De rest wordt bepaald door het platform waarop het programma wordt uitgevoerd. Oracle biedt drie officiële platforms, elk bedoeld voor verschillende gebieden:
Bibliotheken van derden
Bovendien kan de programmeur een willekeurig aantal bibliotheken van derden gebruiken. Deze bibliotheken, die in verschillende pakketten zitten , worden door de programmeur gebruikt om bepaalde algemene methoden of attributen te gebruiken om programma's te vereenvoudigen en te standaardiseren en ze leesbaarder te maken voor programmeurs. Er zijn veel pakketten die door programmeurs in de Java-taal kunnen worden gebruikt . Zo zijn er pakketten:
- invoer en uitvoer ( java.io ) ;
- voor wiskundige methoden en constanten ( java.Math );
- voor het maken van applets ( java.applet );
- om netwerktoepassingen te maken ( javax.net );
- voor afdrukken ( javax.print );
- voor beveiliging ( java.security en javax.security ).
Documentatie
De taalspecificaties leggen geen bepaalde syntaxis op voor de documentatie van de bronnen, maar in de loop van de tijd is de syntaxis die werd herkend door de Javadoc -tool en gereguleerd door goed gedefinieerde officiële specificaties (zij het buiten de taal) het standaardformaat geworden [26] . Deze standaard bepaalt dat de documentatie wordt geleverd in opmerkingen die rechtstreeks in de bronnen zijn ingevoegd en zijn uitgerust met een speciale opmaak, die wordt genegeerd door de compiler, maar wordt herkend door gespecialiseerde tools. Dit maakt het gemakkelijk om de documentatie bij te werken, omdat deze direct het syntactische element vergezelt dat erdoor wordt gemarkeerd; bovendien geeft dit u bij het lezen van de bronnen van een programma een overzicht van de specificaties en uitvoering van het betreffende programma-element.
Een ander handig hulpmiddel voor documentatie zijn annotaties , geïntroduceerd in de derde versie van de taalspecificatie [27] . Hoewel ze formeel een andere syntaxis hebben dan Javadoc-opmerkingen, worden ze voor hetzelfde doel gebruikt, namelijk om metadata te verschaffen die de gemarkeerde programma-entiteiten beschrijven. Hoewel opmerkingen specificaties op een discursieve (zij het gestructureerde) manier rapporteren, zijn annotaties door hun aard ideaal voor verwerking door tools, in plaats van voor menselijke lezing. Bovendien wordt, onder passende omstandigheden [28] , de informatie die ze verstrekken samen met de code gecompileerd en kan deze zelfs tijdens runtime worden gelezen , wat opmerkingen niet kunnen doen.
Versies
In september 2017 stelde Mark Reinhold, hoofdarchitect van het Java-platform, voor om het releaseplan te wijzigen van één release per twee jaar naar de huidige zes maanden. Niet alle versies hebben echter uitgebreide ondersteuning (LTS - Long Term Support), de laatste worden om de 3 jaar uitgebracht, momenteel zijn versie 17, 11 en 8 LTS.
| Versie | Publicatiedatum | Einde van gratis openbare updates [29] [30] [31] [32] |
Verlengde ondersteuning tot |
|---|---|---|---|
| JDK-bèta | 1995 | ? | ? |
| JDK 1.0 | januari 1996 | ? | ? |
| JDK 1.1 | februari 1997 | ? | ? |
| J2SE 1.2 Speeltuin | december 1998 | ? | ? |
| J2SE 1.3 Torenvalk | mei 2000 | ? | ? |
| J2SE 1.4 Merlijn | februari 2002 | oktober 2008 | februari 2013 |
| J2SE 5.0 Tijger | september 2004 | november 2009 | april 2015 |
| Java SE 6 Mustang | december 2006 | april 2013 | December 2018 December 2026, betaalde ondersteuning voor Azul Platform Core [33] |
| Java SE 7 Dolfijn | juli 2011 | april 2015 | juli 2022 |
| Java SE 8 (LTS) | maart 2014 | Januari 2019 voor commercieel gebruik van Oracle December 2030 voor niet-commercieel gebruik van Oracle December 2030 voor Azul Ten minste mei 2026 voor AdoptOpenJDK Ten minste mei 2026 voor Amazon Correct |
december 2030 |
| Java SE 9 | september 2017 | Maart 2018 voor OpenJDK | Niet beschikbaar |
| Java SE 10 | maart 2018 | September 2018 voor OpenJDK | Niet beschikbaar |
| Java SE 11 (LTS) | september 2018 | September 2026 voor Azul Ten minste oktober 2024 voor AdoptOpenJDK Ten minste september 2027 voor Amazon Correct Ten minste oktober 2024 voor Microsoft [34] [35] |
September 2026 September 2028 voor Azul [33] |
| Java SE 12 | maart 2019 | September 2019 voor OpenJDK | Niet beschikbaar |
| Java SE 13 | september 2019 | Maart 2020 voor OpenJDK | Niet beschikbaar |
| Java SE 14 | maart 2020 | September 2020 voor OpenJDK | Niet beschikbaar |
| Java SE 15 | september 2020 | Maart 2021 voor OpenJDK Maart 2023 voor Azul [33] |
ND |
| Java SE 16 | maart 2021 | September 2021 voor OpenJDK | Niet beschikbaar |
| Java SE 17 (LTS) | september 2021 | September 2029 voor Azul Ten minste september 2027 voor Microsoft |
September 2029 of later September 2031 voor Azul Platform Prime |
| Java SE 18 | maart 2022 | September 2022 voor OpenJDK | Niet beschikbaar |
Legende: Oude versie Vorige versie nog steeds ondersteund Huidige versie Toekomstige versie | |||
Java werd aanvankelijk gedistribueerd als Java Development Kit 1.0 (JDK 1.0). Dit omvat de Java-runtime (de virtuele machine en klassenbibliotheken) en de ontwikkelingstools (de Java-compiler en andere tools). Vervolgens leverde Sun een pakket dat alleen de runtime bevatte, de Java Runtime Environment (JRE). Normaal gesproken verwijzen mensen naar een bepaalde versie van Java via de versie van de JDK (bijv. JDK 1.4).JDK-versies 1.2 en hoger worden vaak Java 2 genoemd. De officiële naam van de JDK 1.4 is bijvoorbeeld Java (TM) 2 Platform, standaardeditie 1.4.
De taal bleef stabiel van JDK 1.0 tot JDK 1.4.x, met J2SE 5.0 werden nieuwe functies in de taal geïntroduceerd. De klassenbibliotheek die bij JDK wordt geleverd, is in sommige delen geleidelijk uitgebreid en aangepast.
In september 2017 stelde Mark Reinhold, chief manager voor het Java-platform, voor om elke 6 maanden een nieuwe versie van Java uit te brengen, in plaats van elke 2 jaar zoals voorheen het geval was.
- Versies van de taalspecificatie
Taalveranderingen worden geformaliseerd in de taalspecificatie. Elke nieuwe editie van de specificaties integreert de tot op dat moment gevraagde wijzigingen via de Java Specification Requests en vervolgens doorgevoerd in de compiler javac.
- De Java-programmeertaal, eerste editie
- De Java-programmeertaal, tweede editie
- De Java-programmeertaal, derde editie
- De Java-programmeertaal, Java SE 7 Edition
- De Java-programmeertaal, Java SE 8 Edition
- De Java-programmeertaal, Java SE 9 Edition
Curiositeiten
- Het lijkt erop dat de naam Eik is afgeleid van het feit dat Gosling en zijn collega's, in de periode waarin ze de taal ontwikkelden, als enige gezelschap dat van een eik hadden die net buiten het raam van het kantoor waar ze werkten stond.
- Volgens een stedelijke legende - nooit bevestigd - was de naam van de taal bedoeld, op een later tijdstip en door de makers zelf, als een acroniem voor " Just Another Vacuum Acroniem " (" Just Another Empty Acroniem "), met een ironische verwijzing naar een zeer groot aantal afkortingen die in de IT-omgeving worden gebruikt.
- Gezien het feit dat de makers van de taal vaak in een café waren waar ze het project bespraken, lijkt het erop dat de taal zijn naam en symbool ontleende aan deze gewoonte ( Java is een kwaliteit van koffie van het gelijknamige eiland Indonesië ), zozeer zelfs dat het magische getal dat een bytecode -bestand identificeert dat is verkregen uit de compilatie van een Java-bestand , is , wat in het Engels meisje (babe) van het café (café) [36] betekent .
0xCAFEBABE
Opmerkingen
- ^ [1]
- ^ De Java -taalspecificatie , op java.sun.com . Ontvangen op 5 mei 2011 .
- ^ JavaWorld.com, "Dus waarom hebben ze besloten om het Java te noemen?" , op javaworld.com . Ontvangen op 5 mei 2011 (gearchiveerd van het origineel op 3 augustus 2009) .
- ^ Zoals opgemerkt in Design Goals of the Java (TM) Programming Language: Simple, Object Oriented, and Familiar , op java.sun.com . Ontvangen op 6 mei 2011 .
- ^ De Java-taalomgeving
- ^ De Java-taalomgeving
- ^ De Java (tm) taal: een overzicht
- ^ "V: Welke componenten van de JDK-software gebruiken jullie vandaag open source? A: We gebruiken de Java-programmeertaalcompiler ("javac") en de Java HotSpot virtuele machine." Veelgestelde vragen over gratis en open source Java Gearchiveerd op 3 maart 2012 in WebCite .; de bron wordt vrijgegeven via de OpenJDK Gearchiveerd op 11 juni 2007 op het internetarchief . projecteren.
- ^ Open JDK is hier! ( TXT ), op mail.openjdk.java.net , Sun Microsystems, 8 mei 2007. Ontvangen op 9 mei 2007 .
- ^ a b De Java -taalspecificatie , op java.sun.com . Ontvangen op 5 mei 2011 .
- ^ Ontwerpdoelen van de programmeertaal Java (TM) , op java.sun.com . Ontvangen op 6 mei 2011 .
- ^ Populariteit van programmeertaal , op langpop.com , 2014. Ontvangen op 7 februari 2014 (gearchiveerd van het origineel op 27 mei 2012) .
- ^ TIOBE Programming Community Index , op tiobe.com , 2009. Ontvangen op 6 mei 2009 .
- ^ De Java-tutorials
- ^ in het bijzonder is het gedefinieerd om te werken aan elk object dat een instantie is van java.lang.Iterable
- ^ James Gosling, Bill Joy, Guy Steele, Gilad Bracha, hoofdstuk 4. Typen, waarden en variabelen , in de Java-taalspecificatie, derde editie . Ontvangen op 6 mei 2011 .
- ^ De taalspecificaties staan de specificatie van meer dan één superklasse in de definitie van een bepaalde klasse niet toe: zie Java SE-specificaties , Java SE-specificaties .
- ^ De Java-taalomgeving, "Java-taalinterfaces" , op java.sun.com . Ontvangen op 6 mei 2011 .
- ^ James Gosling, Bill Joy, Guy Steele, Gilad Bracha, hoofdstuk 9. Interfaces , in de Java-taalspecificatie, derde editie . Ontvangen op 7 mei 2011 .
- ^ Java 8 uitgelegd: standaardmethoden , op zeroturnaround.com . Ontvangen 3 april 2016 .
- ^ Welkom bij NetBeans
- ^ Java SE-downloads
- ^ Onderscheidingen
- ^ De Java -taalomgeving , op java.sun.com . Ontvangen op 6 mei 2011 .
- ^ William Wong, schrijf eens, debug overal , op electronicdesign.com . Gearchiveerd van het origineel op 21 maart 2009 . Tot nu toe is de "eenmaal schrijven, overal uitvoeren"-belofte van Java niet uitgekomen. Het grootste deel van een Java-toepassing wordt gemigreerd tussen de meeste Java-implementaties, maar profiteren van een VM-specifieke functie veroorzaakt porteringsproblemen.
- ^ Hoe u doccommentaar schrijft voor de Javadoc Tool , op oracle.com . Ontvangen 16 juni 2011 .
- ^ De Java-taalspecificatie, annotaties , op java.sun.com . Ontvangen 16 juni 2011 .
- ^ Het type dat de gebruikte annotatie definieert, moet zijn gemarkeerd met de meta-annotatie
@Retention. Zie de Java-taalspecificatie, Interfaces , op java.sun.com . Ontvangen 16 juni 2011 . - ^ Oracle Java SE Support Roadmap , op oracle.com .
- ^ Ondersteuning | AdoptOpenJDK , op adoptopenjdk.net .
- ^ Amazon Corretto 8 & 11 ondersteuning uitgebreid , op aws.amazon.com .
- ^ Azul Java Support Roadmap , op kr.azul.com .
- ^ a b c Azul Support Roadmap , op Azul | Betere Java-prestaties, superieure Java-ondersteuning . Ontvangen op 8 juli 2021 .
- ^ Ondersteuningsplan voor de Microsoft Build van OpenJDK , op docs.microsoft.com . Ontvangen op 3 augustus 2021 .
- ^ Aankondiging van de algemene beschikbaarheid van Microsoft Build van OpenJDK , op Java bij Microsoft , 25 mei 2021. Ontvangen op 3 augustus 2021 .
- ^ De privémededeling van James Gosling aan Bill Bumgarner , op radio.weblogs.com . Ontvangen op 1 augustus 2011 (gearchiveerd van het origineel op 23 mei 2009) .
Bibliografie
- Bronnen gebruikt voor het schrijven van de inzending
- Claudio De Sio Cesari, Objectgeoriënteerd && Java 5 . Ontvangen op 29 juni 2019 .
- " Geschiedenis " sectie: Java 2 Micro Edition basis ( PDF ), op oracle.com . Ontvangen op 5 mei 2011 .
- De Java-taalspecificatie, Java SE 7-editie (zie hieronder)
- Fabrizia Scorzoni, Computer Science Programmeren in Java , Turijn, Loescher, 2009, ISBN 978-88-8433-030-7 .
- Taalspecificaties
De verschillende edities van de specificaties zijn toegankelijk op de Oracle-website . De laatste editie is als volgt:
- ( NL ) James Gosling, Bill Joy, Guy Steele, Gilad Bracha, Alex Buckley, The Java Language Specification, Java SE 8 Edition ( PDF ). Ontvangen 18 maart 2014 .
- ( NL ) James Gosling, Bill Joy, Guy Steele, Gilad Bracha, Alex Buckley, The Java Language Specification, Java SE 7 Edition ( PDF ). Ontvangen op 28 augustus 2012 .
- Diepgaande teksten
- ( EN ) Ken Arnold , James Gosling , David Holmes, The Java Programming Language, vierde editie , Addison-Wesley Professional, 2005, ISBN 0-321-34980-6 .
Gerelateerde items
- Annotatie (Java)
- Applet
- Servlet
- JavaServer-pagina's (JSP)
- Java-kaart
- Java EE
- Generiek Java
- Programmeertaal
- Java virtuele machine
- Java-platform
- Java-ontwikkelkit (JDK)
- JAR (bestandsformaat)
- JavaScript
- Java-native interface
- Polymorfisme (informatica)
- Inkapseling (informatica)
Andere projecten
Wikibooks bevat teksten of handleidingen over Java
Wikiversity bevat bronnen op Java
Wikimedia Commons bevat afbeeldingen of andere bestanden over Java
Externe links
- ( NL ) Officiële site , op oracle.com .
- Java , op Treccani.it - Online Encyclopedias , Instituut van de Italiaanse Encyclopedie .
- ( EN ) Java , in Encyclopedia Britannica , Encyclopædia Britannica, Inc.
- Java op de Oracle-website , op oracle.com .
- ( NL ) De Java OpenSource-portal , op home.java.net . Ontvangen 19 maart 2014 (gearchiveerd van het origineel op 3 november 2015) .
- ( EN ) Java en zijn technologieën (Opensource) , op java-source.net .
- Java open source: geen hoax , op today.java.net . Ontvangen 13 november 2006 (gearchiveerd van het origineel op 15 november 2006) .
- ( EN ) OpenJDK , op openjdk.java.net .