Java (programmeringsspråk)

Java
programmeringsspråk
ForfatterJames Gosling ,
Sun Microsystems
Opprinnelsesdato23. mai 1995
Siste versjon18 [1]
BrukGenerelt formål
ParadigmerObjekt orientert
SkrivingHøyt
SpråkspesifikasjonerJava-språkspesifikasjonen, Java SE 17
Vanlige utvidelser.jar, .java, .class
Påvirket avSimula , Ada 83 , C ++ , Eiffel , Generic Java , Mesa , Modula-3 , Oberon , Objective-C , UCSD Pascal , Smalltalk
Det påvirketAda 2005 , BeanShell , C # , Clojure , D , ECMAScript , Groovy , J # , JavaScript , PHP , Python , Scala , Seed7 , Vala
Referanseimplementering
Gjennomføringtolk med JITter
OperativsystemWindows , Linux , macOS
TillatelseGNU General Public License , Java Community Process
NettstedJava-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).

Historie

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]

Beskrivelse

Prinsipper

Java ble opprettet for fem hovedformål: [11]

  1. være "enkel, objektorientert og kjent";
  2. være "robust og trygg";
  3. være plattformuavhengig ;
  4. inneholde nettverksverktøy og biblioteker ;
  5. være utformet for å kjøre kode fra eksterne kilder sikkert.

Språk

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] .

Hei Verden!

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 ) .

Skriv inn system

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 typer
Fyr 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 ) .

Konstanter

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

Datastrukturer

Kontrollstrukturer

Følgende kontrollstrukturer støttes :

  • Selektive strukturer: if ... elseog switch, som i C.
  • Iterative strukturer:
    • whileog do ... whilesom i C
    • forlånt fra C
    • for hver som virker på en matrise eller samling [15]
  • Unntakshåndtering i Java håndteres av syntaks try ... catch ... finallysom ligner på C ++.

Utover konstruksjonene for objektorientert programmering, kalles resten av Java - syntaksen som C , som er avledet fra eller ligner på C-språket .

Objektorientering

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.

Arv

Nedarving 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]

Utviklingsmiljøer

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.

Java Development Kit

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

Integrerte utviklingsmiljøer

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] .

  • Et mye brukt åpen kildekode integrert utviklingsmiljø er Eclipse , donert til utviklerfellesskapet av IBM og hvis utvikling følges av et stort brukerfellesskap.
  • Et av de mest populære kommersielle integrerte utviklingsmiljøene er JBuilder produsert av Borland .
  • Et integrert utviklingsmiljø som har vunnet flere priser [23] er IntelliJ IDEA .
  • Et gratis, og fremfor alt lett, utviklingsmiljø for Java er BlueJ, med en tydelig didaktisk tilnærming.
  • Et annet integrert utviklingsmiljø for Java er JCreator , hvis fordeler fremfor alt er enkelheten til grensesnittet og lettheten.
  • Et utviklingsmiljø for Java (og andre programmeringsspråk) er Visual Studio Code : gratis og fri programvare , selv om den offisielle versjonen er under en proprietær lisens .

Utførelsesmiljø

Java-plattform

Programmer skrevet på Java-språk, etter en innledende kompileringsfase med innhenting av den såkalte bytekoden , er ment for kjøringJava-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]

Biblioteker

Plattformversjoner

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:

Tredjepartsbiblioteker

I 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:

Dokumentasjon

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.

Versjoner

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
Gammel versjon støttes ikke lenger:JDK Beta 1995 ? ?
Gammel versjon støttes ikke lenger:JDK 1.0 januar 1996 ? ?
Gammel versjon støttes ikke lenger:JDK 1.1 februar 1997 ? ?
Gammel versjon støttes ikke lenger:J2SE 1.2 Lekeplass desember 1998 ? ?
Gammel versjon støttes ikke lenger:J2SE 1.3 Tårnfalk mai 2000 ? ?
Gammel versjon støttes ikke lenger:J2SE 1.4 Merlin februar 2002 oktober 2008 Februar 2013
Gammel versjon støttes ikke lenger:J2SE 5.0 Tiger september 2004 november 2009 april 2015
Gammel versjon støttes ikke lenger:Java SE 6 Mustang desember 2006 April 2013 desember 2018
desember 2026, betalt støtte for Azul Platform Core [33]
Gammel versjon støttes ikke lenger:Java SE 7 Dolphin juli 2011 april 2015 juli 2022
Tidligere versjon støttes fortsatt: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
Gammel versjon støttes ikke lenger:Java SE 9 september 2017 mars 2018 for OpenJDK Utilgjengelig
Gammel versjon støttes ikke lenger:Java SE 10 mars 2018 september 2018 for OpenJDK Utilgjengelig
Tidligere versjon støttes fortsatt: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]
Gammel versjon støttes ikke lenger:Java SE 12 mars 2019 september 2019 for OpenJDK Utilgjengelig
Gammel versjon støttes ikke lenger:Java SE 13 september 2019 mars 2020 for OpenJDK Utilgjengelig
Gammel versjon støttes ikke lenger:Java SE 14 mars 2020 september 2020 for OpenJDK Utilgjengelig
Gammel versjon støttes ikke lenger:Java SE 15 september 2020 Mars 2021 for OpenJDK
Mars 2023 for Azul [33]
ND
Gammel versjon støttes ikke lenger:Java SE 16 mars 2021 september 2021 for OpenJDK Utilgjengelig
Nåværende stabil versjon: 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
Fremtidig versjon: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åkspesifikasjonen

Endringer 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.

  • Java-programmeringsspråket, første utgave
  • Java-programmeringsspråket, andre utgave
  • Java-programmeringsspråket, tredje utgave
  • Java-programmeringsspråket, Java SE 7 Edition
  • Java-programmeringsspråket, Java SE 8 Edition
  • Java-programmeringsspråket, Java SE 9 Edition

Kuriosa

  • Det ser ut til at navnet Oak stammer fra at Gosling og kollegene i perioden de utviklet språket hadde som eneste selskap det til en eik som sto rett utenfor vinduet på kontoret der de jobbet.
  • En urban legende - aldri bekreftet - sier at navnet på språket var ment, på et senere tidspunkt og av skaperne selv, som et akronym for " Just Another Vacuum Acronym " (" Just Another Empty Acronym "), med en ironisk referanse til svært mange forkortelser som brukes i IT-miljøet.
  • Gitt at skaperne av språket ofte var på en kafé der de diskuterte prosjektet, ser det ut til at språket har hentet navnet og symbolet fra denne vanen ( Java er en kaffekvalitet fra den homonyme øya Indonesia ), så mye at at det magiske tallet som identifiserer en bytekodefil hentet fra kompileringen av en Java-fil er , som på engelsk betyr girl (babe) of the cafe (cafe) [36] .0xCAFEBABE

Merknader

  1. ^ [1]
  2. ^ Java-språkspesifikasjonen , på java.sun.com . Hentet 5. mai 2011 .
  3. ^ JavaWorld.com, "Så hvorfor bestemte de seg for å kalle det Java?" , på javaworld.com . Hentet 5. mai 2011 (arkivert fra originalen 3. august 2009) .
  4. ^ Som nevnt i Design Goals of the Java (TM) Programming Language: Simple, Object Oriented, and Familiar , på java.sun.com . Hentet 6. mai 2011 .
  5. ^ Java-språkmiljøet
  6. ^ Java-språkmiljøet
  7. ^ Java (tm)-språket: en oversikt
  8. ^ "Spørsmål: Hvilke komponenter av JDK-programvaren henter du åpent i dag? A: Vi åpner for Java-programmeringsspråkkompilatoren (" javac "), og den virtuelle Java HotSpot-maskinen." Gratis og åpen kildekode Java FAQ Arkivert 3. mars 2012 i WebCite .; Kilden blir frigitt via OpenJDK Arkivert 11. juni 2007 på Internet Archive . prosjekt.
  9. ^ Open JDK er her! ( TXT ), på mail.openjdk.java.net , Sun Microsystems, 8. mai 2007. Hentet 9. mai 2007 .
  10. ^ a b Java-språkspesifikasjonen , på java.sun.com . Hentet 5. mai 2011 .
  11. ^ Design Goals of the Java (TM) Programming Language , på java.sun.com . Hentet 6. mai 2011 .
  12. ^ Programmeringsspråkpopularitet , på langpop.com , 2014. Hentet 7. februar 2014 (arkivert fra originalen 27. mai 2012) .
  13. ^ TIOBE Programming Community Index , på tiobe.com , 2009. Hentet 6. mai 2009 .
  14. ^ Java-veiledningene
  15. ^ spesielt er det definert til å fungere på ethvert objekt som er en forekomst av java.lang.Iterable
  16. ^ James Gosling, Bill Joy, Guy Steele, Gilad Bracha, kapittel 4. Typer, verdier og variabler , i The Java Language Specification, tredje utgave . Hentet 6. mai 2011 .
  17. ^ Språkspesifikasjonene tillater ikke spesifikasjon av mer enn én superklasse i definisjonen av en gitt klasse: se Java SE-spesifikasjoner , Java SE-spesifikasjoner .
  18. ^ Java Language Environment, "Java language Interfaces" , på java.sun.com . Hentet 6. mai 2011 .
  19. ^ James Gosling, Bill Joy, Guy Steele, Gilad Bracha, kapittel 9. Interfaces , i The Java Language Specification, tredje utgave . Hentet 7. mai 2011 .
  20. ^ Java 8 forklart: Standardmetoder , på zeroturnaround.com . Hentet 3. april 2016 .
  21. ^ Velkommen til NetBeans
  22. ^ Java SE-nedlastinger
  23. ^ Priser
  24. ^ Java Language Environment , på java.sun.com . Hentet 6. mai 2011 .
  25. ^ William Wong, Write Once, Debug Everywhere , på electronicdesign.com . Arkivert fra originalen 21. mars 2009 . Så langt har ikke "skriv-en gang, løp-overalt"-løftet om Java gått i oppfyllelse. Hoveddelen av en Java-applikasjon vil migrere mellom de fleste Java-implementeringer, men å dra nytte av en VM-spesifikk funksjon forårsaker porteringsproblemer.
  26. ^ Hvordan skrive dokumentkommentarer for Javadoc-verktøyet , på oracle.com . Hentet 16. juni 2011 .
  27. ^ Java-språkspesifikasjonen, merknader , på java.sun.com . Hentet 16. juni 2011 .
  28. ^ Typen som definerer merknaden som er i bruk, må ha blitt merket med meta-kommentaren @Retention. Se Java-språkspesifikasjonen, grensesnitt , på java.sun.com . Hentet 16. juni 2011 .
  29. ^ Oracle Java SE Support Roadmap , på oracle.com .
  30. ^ Støtte | AdoptOpenJDK , på adoptopenjdk.net .
  31. ^ Støtte for Amazon Corretto 8 og 11 utvidet , på aws.amazon.com .
  32. ^ Azul Java Support Roadmap , på kr.azul.com .
  33. ^ a b c Azul Support Roadmap , på Azul | Bedre Java-ytelse, overlegen Java-støtte . Hentet 8. juli 2021 .
  34. ^ Støtte veikart for Microsoft Build of OpenJDK , på docs.microsoft.com . Hentet 3. august 2021 .
  35. ^ Kunngjør generell tilgjengelighet av Microsoft Build of OpenJDK , på Java hos Microsoft , 25. mai 2021. Hentet 3. august 2021 .
  36. ^ James Gosling privat kommunikasjon til Bill Bumgarner , på radio.weblogs.com . Hentet 1. august 2011 (arkivert fra originalen 23. mai 2009) .

Bibliografi

Kilder brukt til å skrive innlegget Språkspesifikasjoner

De forskjellige utgavene av spesifikasjonene er tilgjengelige på Oracle-nettstedet . Den siste utgaven er som følger:

Utdypende tekster
  • ( EN ) Ken Arnold , James Gosling , David Holmes, The Java Programming Language, fjerde utgave , Addison-Wesley Professional, 2005, ISBN  0-321-34980-6 .

Relaterte elementer

Andre prosjekter

Eksterne lenker