Java programmeringsspråk | |
---|---|
Forfatter | James Gosling , Sun Microsystems |
Opprinnelsesdato | 23. mai 1995 |
Siste versjon | 18 [1] |
Bruk | Generelt formål |
Paradigmer | Objekt orientert |
Skriving | Høyt |
Språkspesifikasjoner | Java-språkspesifikasjonen, Java SE 17 |
Vanlige utvidelser | .jar, .java, .class |
Påvirket av | Simula , Ada 83 , C ++ , Eiffel , Generic Java , Mesa , Modula-3 , Oberon , Objective-C , UCSD Pascal , Smalltalk |
Det påvirket | Ada 2005 , BeanShell , C # , Clojure , D , ECMAScript , Groovy , J # , JavaScript , PHP , Python , Scala , Seed7 , Vala |
Referanseimplementering | |
Gjennomføring | tolk med JITter |
Operativsystem | Windows , Linux , macOS |
Tillatelse | GNU General Public License , Java Community Process |
Nettsted | Java-teknologi Oracle-utviklere |
Innen datavitenskap er Java et programmeringsspråk på høyt nivå , objektorientert og statisk skriving , som er avhengig av den homonyme kjøringsprogramvareplattformen , spesielt designet for å være så uavhengig som mulig fra kjøringsmaskinvareplattformen ( ved å kompilere i bytekode før og tolkning deretter av en JVM ) (selv om denne funksjonen innebærer ytelse når det gjelder beregning lavere enn de for direkte kompilerte språk som C og C ++ eller derfor perfekt tilpasset maskinvareplattformen).
Java ble opprettet fra forskning utført ved Stanford University på begynnelsen av 1990- tallet . I 1992 ble Oak-språket (på italiensk "eik") født, produsert av Sun Microsystems og skapt av en gruppe ekspertutviklere ledet av James Gosling . [2] Dette navnet ble senere endret til Java (en indonesisk kaffevariant ; den vedtatte logoen er en kopp for denne drinken) på grunn av opphavsrettsproblemer : Oak-programmeringsspråket eksisterte allerede. [3]
For å lette overgangen til Java for gammeldagse programmerere , spesielt de som er knyttet til språk som C++ , har den grunnleggende syntaksen ( kontrollstrukturer , operatorer , etc.) blitt holdt nesten identisk med den for C++ [4 ] [5] ; på språknivå har det imidlertid ikke blitt introdusert funksjoner som anses som en kilde til unødvendig kompleksitet og som favoriserer introduksjonen av visse feil under programmering, slik som pekeraritmetikk og arv av flere klasser. [6] For de objektorienterte egenskapene til språket ble vi inspirert av C++ og fremfor alt av Objective C. [7]
Til å begynne med bestemte Sun seg for å bruke dette nye produktet til å lage komplekse applikasjoner for små elektroniske enheter; det var først i 1993 med eksplosjonen av internett at Java begynte å bli lagt merke til som et verktøy for å starte programmering for internett. Samtidig annonserte Netscape Corporation valget om å utstyre sin daværende navnebror og berømte nettleser med Java Virtual Machine (JVM). Dette markerer en revolusjon i internettverdenen: takket være appleter ble nettsider interaktive på klientnivå, det vil si at applikasjoner kjøres direkte på internettbrukerens maskin og ikke på en ekstern server. For eksempel kan brukere spille spill direkte på nettsidene og dra nytte av dynamiske og interaktive chatter.
Java ble offisielt annonsert 23. mai 1995 på SunWorld. Den 13. november 2006 lanserte Sun Microsystems sin implementering av Java-kompilatoren og den virtuelle maskinen under GPL -lisensen . Ikke alle Java-plattformer er gratis. Det gratis Java-miljøet heter IcedTea. [8] Den 8. mai 2007 ga Sun også ut bibliotekene, bortsett fra enkelte komponenter som ikke eies av det, under GPL-lisensen, noe som gjør Java til et programmeringsspråk hvis referanseimplementering er gratis. [9] Språket er definert av et dokument kalt The Java Language Specification, ofte forkortet JLS . Den første utgaven av dokumentet ble publisert i 1996. [10] Siden den gang har språket gjennomgått en rekke endringer og tillegg, lagt til fra tid til annen i påfølgende utgaver. På slutten av 2018 er den nyeste versjonen av spesifikasjonen Java SE 11 Edition . [10]
Java ble opprettet for fem hovedformål: [11]
Et av språkets grunnleggende prinsipper er uttrykt av mottoet WORA ( skriv én gang, kjør hvor som helst , dvs. "skriv en gang, kjør hvor som helst"): kompilert kode som kjører på én plattform trenger ikke å rekompileres for å kjøre på en annen plattform ; faktisk er produktet av kompileringen i et format kalt bytecode som kan utføres av enhver implementering av en virtuell prosessor kalt Java Virtual Machine ; fra 2014 er Java et av de mest brukte programmeringsspråkene i verden, spesielt for klient-serverapplikasjoner , med en rekke utviklere anslått til rundt 9 millioner. [12] [13] ; et godt utgangspunkt for å lære Java er den offisielle opplæringen [14] .
Nedenfor er kildekoden til et enkelt program som skriver ut teksten " Hello world " til konsollen .
klasse HelloWorld { public static void main ( String [] args ) { System . ut . println ( "Hei verden" ); } }Et minimalt program i Java må nødvendigvis inneholde klassedefinisjonen gjennom nøkkelordklassen etterfulgt av klassenavnet og hovedmetoden eller hovedmetoden samt inngangspunktet til programmet der variabler , objekter og statiske metoder kalles på variabler og/eller dynamisk på objekter.
I eksemplet ovenfor inneholder main instruksjonen for å skrive ut Hello World- strengen på skjermen ; Selv om den er fullt funksjonell og lett å forstå, utnyttes ikke den objektorienterte filosofien som vanligvis brukes på ethvert program skrevet i Java. Nedenfor er kildekoden til et program som utfører samme oppgave som det forrige ved hjelp av objektorientert programmering .
offentlig klasse Melding { privat String toPrint ; offentlig melding ( strengutskrift ) { _ dette . toPrint = print ; } public void print () { System . ut . println ( dette . toPrint ); } public static void main ( String args [] ) { Message Hello World = ny melding ( "Hello World!" ); hei verden . print (); } }Hovedmetoden overlater utskriften av meldingen til et objekt som er opprettet spesifikt for denne oppgaven, hvor den dynamiske utskriftsmetoden definert før hoveden påkalles sammen med konstruktøren av klassen eller den bestemte metoden (med samme navn på klassen) som brukes til å initialisere ' toPrint -klasseattributtet til objektet som er opprettet / instansiert i main. Definerbare metoder kan erklæres private (merket med det private nøkkelordet ) hvis de bare kan kalles innenfor samme klasse eller offentlige (markeres med det offentlige nøkkelordet ) hvis de også kan kalles av andre klasser, av en statisk type (merket med statisk nøkkelord ) hvis det kan anropes fritt i klassen (f.eks. på globale variabler), dynamisk hvis det kan påkalles på objekter.
Ved å skrive nye klasser som støtter utskriftsoperasjonen , kan man tilpasse programmet til å vise meldinger av radikalt forskjellige typer, og la hoveddelen være nesten uendret, og endre bare halvlinjen etter den nye . Du kan for eksempel vurdere en melding skrevet i et vindu som vises på skjermen til datamaskinen som er i bruk, eller en streng sendt over en nettverkstilkobling for å vises i vinduet til en klientdatamaskin . Eller programmet kan snakke med brukeren på kommandolinjen eller i et vindu (betrakter dialogen som en "interaktiv melding").
Det er mulig å radikalt endre oppførselen til programmet med begrensede endringer og i punkter predisponert a priori ( polymorfisme ): programmet tåler uventede oppdateringer og behov. Nedenfor er kildekoden til to programmer som viser den samme teksten i et vindu . Det første oppretter et standardvindu der strengen som er lagt inn som parameter skrives, mens det andre programmet lager et vindu som respekterer parameterne (for eksempel størrelsen på vinduet) som er satt inn i koden.
import javax.swing.JOptionPane ; offentlig klasse HelloWorld { public static void main ( String [] args ) { JOptionPane . showMessageDialog ( null , "Hello World!" ); } } //HelloWorld.java pakke helloworld ; import javafx.application.Application ; import javafx.event.ActionEvent ; import javafx.event.EventHandler ; import javafx.scene.Scene ; import javafx.scene.control.Button ; import javafx.scene.layout.StackPane ; import javafx.stage.Stage ; offentlig klasse HelloWorld utvider Application { @Overstyring offentlig ugyldig start ( Stage primaryStage ) { Knapp btn = ny knapp (); btn . setText ( "Si 'Hei verden'" ); btn . setOnAction ( ny EventHandler < ActionEvent > () { @Overstyring offentlig ugyldig håndtak ( ActionEvent event ) { System . ut . println ( "Hei verden!" ); } }); StackPane root = ny StackPane (); rot . getChildren (). legg til ( btn ); Scene scene = ny Scene ( root , 300 , 250 ); primærtrinn . setTitle ( "Hei verden!" ); primærtrinn . setScene ( scener ); primærtrinn . vis (); } public static void main ( String [] args ) { lansering ( args ); } }Den foreslåtte koden lager objekter som brukes til å administrere det grafiske grensesnittet. Et vindu opprettes først med tittelen Hello World! ; inne i dette vinduet er det satt inn en etikett som inneholder ordet Hello World! . Til slutt fastsettes størrelsen på vinduet som til slutt synliggjøres sammen med etiketten som bærer skriften som skal vises. Også i denne koden brukes objektprogrammering, men på en annen måte: hovedpersonen kjenner ikke mekanismene som er nødvendige for å lage et grafisk grensesnitt på skjermen, og disse bestemmes av JFrame- og JLabel-klassene som er forberedt på forhånd ( innkapsling ) .
Java er et typesikkert , statisk skrevet , nominativ typesystem og manifest skrivespråk . I kraft av disse egenskapene regnes det generelt som et sterkt skrevet språk . Språket skiller klart primitive typer som definerer atomverdier fra strukturerte typer som definerer sammensatte datastrukturer.
Primitive typer kalles også atomtyper og grunnleggende typer og er definert i språkspesifikasjonene: det nøyaktige settet med tillatte verdier og støttede operatører er kjent for hver.
Strukturerte typer er også referansetyper , det vil si at de definerer objekter og er klasser eller grensesnitt. Blant disse er arrayklassene definert i språkspesifikasjonen; alle andre strukturerte typer er " brukerdefinerte ", dvs. av programmereren. Brukerdefinerte typer som er bundet til språket av en eller annen grunn, er samlet i pakken java.langog dens underpakker; språket etablerer for noen av dem (,,, Objectog Stringandre Iterable) ytterligere syntaktiske eller semantiske regler.
Referansetyper inkluderer klasser for strengbehandling, matriser og samlinger (lister, kart osv.).
Grunnleggende typerFyr | Beskrivelse | Container klasse |
---|---|---|
byte | 8-bits signert heltall | Byte |
kort | 16-bits signert heltall | Kort |
int | 32-bits signert heltall | Heltall |
lang | 64-bits signert heltall | Lang |
flyte | 32-bit enkelt presisjon flytepunkt ( IEEE 754 standard ) | Flyte |
dobbelt | 64-bits flytende punkt med dobbel presisjon ( IEEE 754 standard ) | Dobbelt |
røye | Unicode enkelttegn (16-bits usignert heltall) | Karakter |
boolsk | trueellerfalse | boolsk |
Av alt dette følger det at verdiene til de grunnleggende typene ikke er objekter. For hver basistype er det imidlertid en tilsvarende klasse, definert på sjargong som en innpakningstype eller beholdertype , i pakken java.lang, en klasse som lar deg kapsle inn en primitiv typeverdi inne i et objekt. Passende metoder for wrapper-klassen gjør det mulig å oppnå objektet som innkapsler en viss verdi, og verdien innkapslet av et bestemt objekt.
Fra versjon 5.0 og utover støttes autoboxing og unboxing som lar deg konvertere fra primitiv type til tilsvarende wrapper -klasse og omvendt. Kompilatoren, "behind the scenes", oversetter konverteringen til en passende metodeanrop på containerklassen; derfor er det ikke en ekte konvertering, men en praktisk syntaks som "skjuler" opprettelsen av et objekt av wrapper-klassen. Som mange andre programmeringsspråk har Java også arrays blant datastrukturene ( se arrays i Java ) .
Konstante verdier i Java identifiseres med nøkkelordet: final etterfulgt av typen, navnet på konstanten og den tildelte verdien:
final constant_type <konstant_navn> = verdi;eksempel:
endelig dobbel PRIS = 15,99 ;Etter konvensjon er alle navnene på konstantene store.
Videre er det også mulig å erklære endelig en metode eller en klasse når du vil forhindre at metoden blir overstyrt i en underklasse i det første tilfellet eller for å forhindre at en underordnet klasse opprettes fra den aktuelle klassen i det andre tilfellet
Følgende kontrollstrukturer støttes :
Utover konstruksjonene for objektorientert programmering, kalles resten av Java - syntaksen som C , som er avledet fra eller ligner på C-språket .
Java er et objektorientert språk . Ideen bak OOP er å representere de virkelige eller abstrakte enhetene som bestemmer dynamikken til problemet løst av programvaren i form av enhetlige enheter, med spesifikk bruk og operasjon definert på forhånd. Disse enhetene kalles objekter . Spesifikasjonene som definerer egenskapene til disse enhetene og under hvilke de er opprettet eller instansiert i sjargong kalles klasser .
Java er imidlertid ikke et rent objektspråk, men bare objektorientert : for eksempel er verdiene til primitive typer ikke objekter.
I Java-språket har objekter felt (også kalt forekomst- eller eksempelattributter eller variabler ) og metoder . Metoder brukes vanligvis for enkelt å implementere mange andre konstruksjoner som noen andre språk gir, for eksempel hendelseshåndtering (implementert gjennom lyttere ) eller egenskaper, implementert gjennom tilgangsmetoder og mer generelt med JavaBeans- objekter .
I Java er det ingen funksjoner: kodeblokkene som "ikke tilhører noe objekt" er implementert som statiske metoder for en bestemt klasse og er derfor alltid metoder. I Java er det en sterk vekt på skillet mellom grensesnitt og implementering av en klasse eller et objekt: det første er settet med offentlige spesifikasjoner som brukerne av et bestemt objekt kan bruke, mens det andre er settet med interne strukturer og kjørbare instruksjoner som i det hele tatt oppfyller disse spesifikasjonene. Begrepet grensesnitt brukes også i en annen betydning, forklart nedenfor.
ArvNedarving mellom typer støttes . Dette lar deg etablere hierarkiet til klassene som utgjør et program. Språket tilsier at den velkjente klassen er i spissen for hierarkiet java.lang.Object. [16]
I Java er det ingen multippel arv mellom klasser. [17] På den ene siden tillater denne begrensningen et lineært klassehierarki og forhindrer ulempene introdusert av multippel arv. På den annen side er det lett å overvinne ved å bruke grensesnitt , det vil si typer som ligner på klasser, men spesielt designet for å utvides og underlagt visse begrensninger pålagt av språket. [18] [19] Følgelig gir de noen fordeler med multippel arv, for eksempel muligheten for at det samme objektet tilhører forskjellige typer, uten ulempene som tvetydigheten introdusert av det faktum at en klasse kan arve forskjellige implementeringer av en samme metode .
Siden bruken av Java har enkeltarv gradvis etablert seg som standardmodellen for arv i objektorienterte teknologier og har også blitt omfavnet av språkene i Microsoft .NET -rammeverket . Fra Java 8 er det mulig å utnytte standardmetodene til grensesnittene for å bygge en begrenset multippel arv. Dette påvirker ikke hovedarven som forblir singel, men gjør at metoder kan arves fra flere grensesnitt samtidig. [20]
For å utvikle programmer i Java, er ethvert tekstredigeringsprogram teoretisk tilstrekkelig ; i praksis, hvis du vil skrive noe mer enn den klassiske hei-verden , trenger du et integrert utviklingsmiljø (IDE): det er flere IDE-er ( Integrated Development Environment ), noen gratis og andre mot en avgift.
Sun (nå Oracle ) tilbyr et spesifikt programvareutviklingssett , kalt Java Development Kit (eller JDK ), som inkluderer en rekke ofte brukte verktøy, inkludert,,, og javacandre , designet for å behandle ( kompilere ) filer, kilder og/eller allerede kompilert, og inkluderer dermed Java Runtime Environment (JRE). De jobber med koden som allerede er skrevet og lagret på systemet: ingen av dem gir et visuelt skrivemiljø med de funksjonene som er nyttige for å lage komplekse programmer som syntaksutheving gjennom forskjellige farger, autofullføring eller muligheten til å navigere mellom kilder ved å klikke på musen . javadocjar
Oracle har selv fremmet utviklingen av et gratis og åpen kildekode-utviklingsmiljø kalt NetBeans , som kan lastes ned på egen hånd [21] , eller (valgfritt) med JDK [22] .
Programmer skrevet på Java-språk, etter en innledende kompileringsfase med innhenting av den såkalte bytekoden , er ment for kjøring på Java-plattformen gjennom en tolkningsfase (av denne grunn kalles Java-språket også semi-tolket) av en Java Virtual Machine og kjører har tilgang til standard bibliotek - APIer . Disse to trinnene gir et abstraksjonsnivå som gjør at applikasjoner kan være helt uavhengige av maskinvaresystemet de skal kjøres på. En implementering av java-plattformen er Java Runtime Environment (JRE), nødvendig for utførelse av det kompilerte programmet, mens for utvikling av programmer i Java med utgangspunkt i kildekoden, Java Development Kit (JDK) som også inkluderer JRE .
PortabilitetÅ kjøre programmer skrevet i Java må ha lignende oppførsel i forskjellige utførelseskontekster. For å få til dette jobber vi på ulike nivåer og det første av dem er selvsagt språket som er spesialdesignet for dette formålet. For eksempel gir det en enhetlig syntaks for å definere kritiske seksjoner , en oppgave som på andre språk vanligvis foregår ved hjelp av tredjepartsbiblioteker eller systemprimitiver. [24] Videre gir det praktisk talt ikke rom for udefinert oppførsel eller implementeringsavhengig oppførsel av utførelsesmiljøet.
Språkspesifikasjonen krever et utførelsesmiljø som overvåker programkjøringen og forbyr visse operasjoner som ellers ville vært usikre. De refererer eksplisitt til Java Virtual Machine , og indikerer den som den typiske mottakeren av bytekoden produsert av den første kompileringen av et Java-program, og faktisk kompilerer kompilatoren javacsom er inkludert i JDK nøyaktig i bytekode. Det er imidlertid mulig å kompilere mot forskjellige arkitekturer, faktisk er det mulig å produsere spesifikk objektkode for et bestemt operativsystem ved å bruke en spesiell kompilator, for eksempel GNU Compiler Collection .
I prinsippet skal du kunne skrive programmet bare én gang og få det kjørt overalt, derav det kjente Sun-slagordet: "skriv en gang, løp overalt". Portabilitet er et teknisk vanskelig mål å oppnå, og Javas suksess på dette området er et spørsmål om kontrovers. Selv om det faktisk er mulig å skrive programmer i Java som oppfører seg konsekvent på tvers av mange forskjellige maskinvareplattformer , er disse avhengige av virtuelle maskiner som er programmer i seg selv og som uunngåelig har sine egne feil , forskjellige fra hverandre: for dette er det en parodi på Suns slagordet "Skriv en gang, løp overalt" ble født, som ble "Skriv en gang, feilsøk hvor som helst " . [25]
Språket i seg selv definerer kun en liten del av bibliotekene som kan brukes i kombinasjon med selve språket. Resten er definert av plattformen programmet kjøres på. Oracle tilbyr tre offisielle plattformer, hver ment for forskjellige områder:
TredjepartsbibliotekerI tillegg kan programmereren bruke et vilkårlig antall tredjepartsbiblioteker. Disse bibliotekene, inneholdt i forskjellige pakker , brukes av programmereren til å bruke visse vanlige metoder eller attributter for å forenkle og standardisere programmer og gjøre dem mer lesbare for programmerere. Det er mange pakker som kan brukes av programmerere på Java-språket . For eksempel er det pakker:
Språkspesifikasjonene pålegger ikke en viss syntaks for dokumentasjonen av kildene, men over tid har den som gjenkjennes av Javadoc -verktøyet og regulert av veldefinerte offisielle spesifikasjoner (om enn eksternt til språket) blitt standardformatet [26] . Denne standarden sørger for at dokumentasjonen er gitt i kommentarer satt direkte inn i kildene og utstyrt med en spesiell formatering, som ignoreres av kompilatoren, men gjenkjennes av spesialiserte verktøy. Dette gjør det enkelt å oppdatere dokumentasjonen, da den følger direkte med det syntaktiske elementet som er merket av den; Når du leser kildene til et program, lar dette deg dessuten ha en oversikt over spesifikasjonene og implementeringen av programelementet som vurderes.
Et annet nyttig verktøy for dokumentasjon er merknader , introdusert i den tredje versjonen av språkspesifikasjonen [27] . Mens de har en formelt forskjellig syntaks fra Javadoc-kommentarer, brukes de til samme formål, nemlig å gi metadata som beskriver de merkede programenhetene. Men mens kommentarer rapporterer spesifikasjoner på en diskursiv (om enn strukturert) måte, er merknader i sin natur ideelle for behandling med verktøy, snarere enn for menneskelig lesing. Videre, under passende forhold [28] , blir informasjonen de gir kompilert sammen med koden og kan til og med leses under kjøring , noe kommentarer ikke kan gjøre.
I september 2017 foreslo Mark Reinhold, sjefsarkitekt for Java-plattformen, å endre utgivelsesplanen fra én utgivelse hvert annet år til nåværende seks måneder. Imidlertid har ikke alle versjoner utvidet støtte (LTS - Long Term Support), sistnevnte utgis hvert 3. år, for tiden er versjon 17, 11 og 8 LTS.
Versjon | Utgivelsesdato | Slutt på gratis offentlige oppdateringer [29] [30] [31] [32] |
Utvidet støtte til |
---|---|---|---|
JDK Beta | 1995 | ? | ? |
JDK 1.0 | januar 1996 | ? | ? |
JDK 1.1 | februar 1997 | ? | ? |
J2SE 1.2 Lekeplass | desember 1998 | ? | ? |
J2SE 1.3 Tårnfalk | mai 2000 | ? | ? |
J2SE 1.4 Merlin | februar 2002 | oktober 2008 | Februar 2013 |
J2SE 5.0 Tiger | september 2004 | november 2009 | april 2015 |
Java SE 6 Mustang | desember 2006 | April 2013 | desember 2018 desember 2026, betalt støtte for Azul Platform Core [33] |
Java SE 7 Dolphin | juli 2011 | april 2015 | juli 2022 |
Java SE 8 (LTS) | mars 2014 | Januar 2019 for Oracle kommersiell bruk Desember 2030 for Oracle ikke-kommersiell bruk Desember 2030 for Azul Minst mai 2026 for AdoptOpenJDK Minst mai 2026 for Amazon Correct |
desember 2030 |
Java SE 9 | september 2017 | mars 2018 for OpenJDK | Utilgjengelig |
Java SE 10 | mars 2018 | september 2018 for OpenJDK | Utilgjengelig |
Java SE 11 (LTS) | september 2018 | September 2026 for Azul Minst oktober 2024 for AdoptOpenJDK Minst september 2027 for Amazon Correct Minst oktober 2024 for Microsoft [34] [35] |
september 2026 september 2028 for Azul [33] |
Java SE 12 | mars 2019 | september 2019 for OpenJDK | Utilgjengelig |
Java SE 13 | september 2019 | mars 2020 for OpenJDK | Utilgjengelig |
Java SE 14 | mars 2020 | september 2020 for OpenJDK | Utilgjengelig |
Java SE 15 | september 2020 | Mars 2021 for OpenJDK Mars 2023 for Azul [33] |
ND |
Java SE 16 | mars 2021 | september 2021 for OpenJDK | Utilgjengelig |
Java SE 17 (LTS) | september 2021 | September 2029 for Azul Minst september 2027 for Microsoft |
september 2029 eller senere september 2031 for Azul Platform Prime |
Java SE 18 | mars 2022 | september 2022 for OpenJDK | Utilgjengelig |
Legende:Gammel versjonTidligere versjon støttes fortsattGjeldende versjonSiste forhåndsversjonFremtidig versjon |
Java ble opprinnelig distribuert som Java Development Kit 1.0 (JDK 1.0). Dette inkluderer Java-runtime (den virtuelle maskinen og klassebibliotekene), og utviklingsverktøyene (Java-kompilatoren og andre verktøy). Senere ga Sun en pakke som bare inkluderte kjøretiden, kalt Java Runtime Environment (JRE). Normalt refererer folk til en bestemt versjon av Java gjennom versjonen av JDK (f.eks. JDK 1.4). JDK versjoner 1.2 og nyere blir ofte referert til som Java 2. For eksempel er det offisielle navnet på JDK 1.4 Java (TM) 2 Plattform , Standard Edition 1.4.
Språket forble stabilt fra JDK 1.0 til JDK 1.4.x, med J2SE 5.0 nye funksjoner ble introdusert i språket. Klassebiblioteket som følger med JDK har blitt gradvis utvidet og modifisert i noen deler.
I september 2017 foreslo Mark Reinhold, sjef for Java-plattformen å gi ut en ny versjon av Java hver 6. måned, i stedet for hvert 2. år som tidligere.
Versjoner av språkspesifikasjonenEndringer i språk er formalisert i språkspesifikasjonen. Hver nye utgave av spesifikasjonene integrerer endringene som ble bedt om frem til det øyeblikket gjennom Java-spesifikasjonsforespørsler og følgelig implementert i kompilatoren javac.
De forskjellige utgavene av spesifikasjonene er tilgjengelige på Oracle-nettstedet . Den siste utgaven er som følger: