Java | ||
Dato for første version | 1995 | |
---|---|---|
Paradigme | Objektorienteret , struktureret , bydende nødvendigt , funktionel | |
Forfatter | Sun Microsystems | |
Udviklere | Oracle Corporation | |
Sidste version | Java SE 16.0.1 (20. april 2021) | |
Indtastning | Statisk , stærk , sikker , nominativ | |
Påvirket af | Objective-C , C ++ , Smalltalk , Eiffel , Ada 83 , Mesa , Modula-3 , Oberon , UCSD Pascal | |
Påvirket | C # , J # , Ada 2005 , Gambas , BeanShell , Clojure , ECMAScript , Groovy , JavaScript , PHP , Kotlin , Python , Scala , Seed7 , Vala , Processing | |
Implementeringer | JVM-liste | |
Operativ system | Multiplatform | |
Licens | GNU GPLV2 + CPE | |
Internet side | www.oracle.com/java/technologies | |
Filudvidelse | java, klasse, krukke, jad og jmod | |
Java er et objektorienteret programmeringssprog oprettet af James Gosling og Patrick Naughton , ansatte i Sun Microsystems , med støtte fra Bill Joy (medstifter af Sun Microsystems i 1982 ), officielt præsenteret den23. maj 1995hos SunWorld .
Sun-firmaet blev derefter købt i 2009 af Oracle- firmaet, som nu ejer og vedligeholder Java .
En særegenhed ved Java er, at software skrevet på dette sprog er kompileret til en mellemliggende binær repræsentation, som kan udføres på en Java Virtual Machine (JVM) uden hensyntagen til operativsystemet .
Java-sproget overtager stort set syntaksen for C ++ - sproget . Ikke desto mindre er Java blevet frataget de mest subtile begreber i C ++ og begge de mest forvirrende, såsom pegepinde og referencer, eller flere arv omgået ved implementering af grænseflader . Siden version 8 introducerer ankomsten af funktionelle grænseflader ligeledes flere arv (uden styring af attributter) med dets fordele og ulemper såsom diamantarv . Designerne favoriserede den objektorienterede tilgang, så i Java er alt objekt undtagen primitive typer ( heltal , flydende nummer osv.), Som dog har deres varianter, som arver fra objekt-objektet. (Heltal, flyde, ...).
Java giver dig mulighed for at udvikle klient-server applikationer . På klientsiden er applets oprindelsen til sprogets berygtelse. Det er især på serversiden, at Java har påtvunget sig i erhvervslivet takket være servlets , serversiden af applets og for nylig JSP ( JavaServer Pages ), der kan erstatte PHP , ASP og ASP.NET .
Java fødte et operativsystem ( JavaOS ), udviklingsmiljøer ( eclipse / JDK ), virtuelle maskiner ( MSJVM (en) , JRE ) cross-platform-applikation ( JVM ), en variation for mobile enheder / indlejret ( J2ME ), en grafisk interface designbibliotek ( AWT / Swing ), tunge applikationer (Jude, Oracle SQL-regneark osv.), webteknologier (servlets, applets) og en variation for virksomheden ( J2EE ). Den bærbarhed af Java bytekode sikres ved Java virtuel maskine, og muligvis ved standard biblioteker indgår i et JRE. Denne virtuelle maskine kan fortolke bytekoden eller kompilere den i farten til maskinsprog. Bærbarhed afhænger af bærbarheden af JVM'erne på hvert operativsystem.
Java-sproget kommer fra et Sun Microsystems-projekt fra 1990: ingeniøren Patrick Naughton var ikke tilfreds med C ++ -sproget, der blev brugt på Sun, dets programmeringsgrænseflader på C-sprog samt de tilknyttede værktøjer. Mens han overvejede en migration til NeXT, blev han tilbudt at arbejde på en ny teknologi, og sådan blev Project Stealth ( stealth ) født.
Den Stealth -projektet blev hurtigt omdøbt til grønnere projekter med ankomsten af James Gosling og Mike Sheridan. Sammen med hjælp fra andre ingeniører begyndte de at arbejde på et kontor på Sand Hill Street i Menlo Park , Californien . De forsøgte at udvikle teknologi til udvikling af næste generations applikationer, hvilket gav Sun udsigten til unikke muligheder.
Holdet planlagde oprindeligt at bruge C ++ - sproget, men opgav det af forskellige grunde. Først og fremmest udviklede de sig på et indlejret system med begrænsede ressourcer og mente, at brug af C ++ krævede for meget investering, og at denne kompleksitet var en kilde til fejl for udviklere. Manglen på affaldsindsamling betød, at hukommelsesadministration skulle programmeres manuelt, en udfordring, men også en kilde til fejl.
Holdet var også utilfreds med manglerne ved C ++ - sproget med hensyn til sikkerhed, distribueret programmering og multi-threading . Derudover ønskede de en platform, der kunne overføres til enhver type enhed eller platform.
Bill Joy havde forestillet sig et nyt sprog, der kombinerede det bedste programmeringssprog Mesa (in) og C-sproget . I en artikel kaldet Further ( Further ) foreslog han til Sun, at dets ingeniører udvikler et objektorienteret miljø baseret på C ++. Oprindeligt planlagde Gosling at ændre og forbedre C ++ - sproget, som han kaldte C ++ ++ - men ideen blev hurtigt opgivet til fordel for udviklingen af et nyt programmeringssprog, som de kaldte Oak. (Eg) som reference, ifølge legenden til et træ plantet foran deres kontorvindue .
Holdet arbejdede hårdt og sommeren 1992 var de i stand til at demonstrere en platform med det grønne operativsystem , Oak-sproget (1992), biblioteker og hardware. Deres første præstation, præsenteret den3. september 1992, var opførelsen af en PDA kaldet Star7 med en grafisk grænseflade og en intelligent agent kaldet Duke til at hjælpe brugeren.
I november samme år blev Green Project ophørt med at blive FirstPerson, Inc. , 100% ejet af Sun Microsystems, og holdet flyttede tilbage til Palo Alto. FirstPerson- teamet var interesseret i at opbygge meget interaktive værktøjer, og da Time Warner udstedte et bud på en multifunktionsdekoder, ændrede FirstPerson deres fokus for at tilbyde en sådan platform.
Kabelfjernsynsindustrien fandt imidlertid, at det tilbød for mange muligheder for brugeren, og FirstPerson mistede markedet til Silicon Graphics . Da den audiovisuelle industri ikke kunne interessere sig, blev virksomheden genoprettet i Sun.
Juni til Juli 1994Efter tre dages brainstorming med John Gage, James Gosling, Joy, Naughton, Wayne Rosing og Eric Schmidt fokuserede holdet platformen igen på nettet . De troede, at med fremkomsten af Mosaic- browseren var Internettet stedet at udvikle den samme slags interaktive værktøj, som de havde forestillet sig for kabelindustrien. Naughton udviklede som en prototype en lille webbrowser, WebRunner, som senere blev HotJava .
Samme år blev sproget omdøbt til Java, efter at det blev opdaget, at navnet Oak allerede var i brug af en videokortproducent.
Oprindelsen af navnet JavaNavnet "Java" er ikke et akronym , det blev valgt under brainstorming til at erstatte det oprindelige navn "Oak" på grund af en konflikt med et eksisterende brand, fordi kaffe ( "java" i amerikansk slang) er favoritdrinken hos mange programmører . Logoet valgt af Sun er også en dampende kop kaffe.
Java offentlig lanceringI Oktober 1994, HotJava og Java-platformen blev præsenteret for Sun Executives . Java 1.0a var tilgængelig til download i 1994, men den første offentlige version af HotJava-browseren ankom23. maj 1995på SunWorld- konferencen .
Meddelelsen blev foretaget af John Gage, videnskabelig direktør for Sun Microsystems. Hans meddelelse blev ledsaget af overraskelsesmeddelelsen fra Marc Andressen, vicepræsident for Netscape-direktøren, om at Netscape ville medtage støtte til Java i sine browsere. Det9. januar 1996blev Javasoft-gruppen dannet af Sun Microsystems for at udvikle denne teknologi. To uger senere var den første version af Java tilgængelig.
Udseendet af version 1.2 af sproget markerer et betydeligt vendepunkt: det var i 2000, at versionen samtidig blev vist på to Java-platforme:
Sun kvalificerer dem derefter som en Java 2-platform i modsætning til de første generationer 1.0 og 1.1. Alle efterfølgende versioner, fra J2EE 1.2 til Java SE eller Java EE 7, betegnes fortsat som Java 2-platforme, selvom '2' siden er officielt afbrudt.
Applets
Historisk set var webbrowsers evne til at starte Java-applets den eneste løsning til at vise rige klientapplikationer (RIA til rig internetapplikation ). Derefter opstod konkurrerende teknologier, herunder Macromedia Flash , DHTML JavaScript , Silverlight baseret på XAML eller Xul .
Appleterne på klientarbejdsstationen kan kommunikere med servlets på serveren, ligesom Javascript kan kommunikere med serveren ved hjælp af AJAX . Flex bruger Flash-teknologi gennem Adobe Flash Player .
I en æra, hvor JavaScript led af kompatibilitetsproblemer på tværs af browsere, havde Java-applets fordelen ved bærbarhed, fordi det var svært at porte komplekse grænseflader for alle browsere på markedet.
Ud over nedfaldet fra Java "mode" har de fremskridt, der er gjort inden for teknologier, der konkurrerer med Java, ført til, at de fleste udviklere har vendt sig væk fra Java-applets og de problemer, der er forbundet med denne teknologi (inkompatibilitet mellem JVM'er, dårlig ydeevne, dårlige biblioteker. Grafik, kompleksitet ). Endelig inkluderer moderne browsere ikke længere systematisk Java-miljøet på grund af dets store størrelse, og antallet af maskiner, der er i stand til at vise applets, var kun 70% i 2010, meget lavere end for eksempel Flash. I 2010 brugte næsten alle rige klientapplikationer alternative teknologier; Flash for det meste, men også GWT .
Endelig gør ankomsten af HTML5 , der er beregnet til at integrere mange RIA- og multimediefunktioner , også applets forældede.
JavaFX
Med udseendet af Java 8 i Marts 2014, JavaFX bliver det officielle Java GUI værktøjssætningsværktøj til alle slags applikationer (mobilapplikationer, desktopapplikationer, webapplikationer osv.), Hvor udviklingen af sin forgænger Swing ophører (undtagen fejlrettelser). JavaFX er en ren Java API (det specifikke script-sprog, der var forbundet med det i en periode, er nu opgivet). JavaFX indeholder en bred vifte af værktøjer, herunder lyd- og videomedier, 2D- og 3D-grafik, webprogrammering , parallel programmering og mere.
Server sideMed applikationsservere bruges EJB'er til at indkapsle de tidligere definerede klasser. Disse elementer bruges i J2EE- arkitekturer til flerlagsapplikationer. Fordelen ved dette arbejde er, at vi kan skjule implementeringen af koden på serversiden fra klienten.
Brug af arbejdsstationDen oprindelige brug af Java-sproget til applikationer på en arbejdsstation forblev indtil nu relativt sjælden på grund af deres manglende hastighed. Men med den hurtige forøgelse af computerkraften, forbedringerne i 2000'erne af den virtuelle Java-maskine og kvaliteten af kompilatorerne, har flere teknologier vundet terræn som NetBeans og Eclipse- miljøet , teknologierne til delte filer LimeWire , Vuze (ex Azureus) og I2P . Java bruges også i MATLAB- matematikprogrammet , på grænsefladeniveau for menneskelig maskine og til computeralgebra. Swing- applikationer dukker også op som et alternativ til .NET-teknologi.
Brug med mobiltelefonerOracle annoncerer startoktober 2012på JavaOne-konferencen sit ønske om at tilbyde Java-løsninger til indbygget software til processorer, der er mindre magtfulde end dem, der normalt findes på pc'er. Oracle samler et helt økosystem af virksomheder, der specialiserer sig i disse markedssegmenter, såsom MicroEJ- udgiveren eller endda STMicroelectronics, der tilbyder Java på sine STM32'er, hvis kerne er en CortexM3 / M4.
Java, især gennem Eclipse og NetBeans , tilbyder allerede integrerede udviklingsmiljøer til mobile enheder. Java er det vigtigste sprog, der bruges til at udvikle applikationer til Googles gratis operativsystem til mobil : Android .
JavaFX kan også muliggøre brugen af Java på mobiltelefoner, selvom dette ikke er dets primære formål.
Windows OS, Mac OS X og GNU / LinuxMicrosoft leverede i 2001 et Java-arbejdsmiljø, kaldet J ++ , med sine operativsystemer inden udgivelsen af Windows XP . Efter en retsafgørelse og i betragtning af manglende overholdelse af specifikationerne for dette sprog måtte Microsoft opgive dette og oprette et nyt sprog, kaldet C # (se kapitlet " Uafhængighed over for platformen " mere lavt)
Mange computerproducenter inkluderer fortsat et JRE-miljø på deres Windows-systemer.
Java vises også som en standard i Mac OS X fra Apple såvel som til distributioner Linux . Så i dag kan de fleste af brugerne starte Java-applikationer uden problemer. På Apple-computere blev distributionen af Java 5 til Java 6 imidlertid håndteret direkte af Apple og ikke af Oracle. Denne politik forårsagede forsinkelser og versionsbegrænsninger:
J2SE 1.4 var således ikke tilgængelig før Mac OS X v10.2 (kodenavn Jaguar ), J2SE 5.0 fra Mac OS X v10.4 ( Tiger ), Java SE 6 fungerer kun under Mac OS X v10.5 ( Leopard ) udstyret med en Intel- processor og Java 7 kræver en Mac Intel-computer, der kører Mac OS X v10.7 .3 ( Lion ).Open source-licensDet 11. november 2006, er kildekoden til javac-kompilatoren og den virtuelle HotSpot- maskine frigivet som Open Source under GNU General Public License .
Det 13. november 2006, Sun Microsystems annoncerer passage af Java, det vil sige JDK (JRE og udviklingsværktøjer) og miljøerne Java EE (allerede under licens CDDL) og Java ME under licens GPL herfraMarts 2007, under projektnavnet OpenJDK .
I Maj 2007, Sun frigiver OpenJDK under en gratis licens. OpenJDK afhænger dog stadig af fragmenter af ikke-fri kode, som Sun ikke ejer. Dette er grunden til, at firmaet Redhat starter ijuni 2007projektet IcedTea (in), der sigter mod at erstatte fragmenter af ikke-fri kode og dermed gøre OpenJDK anvendelig uden nogen software, der er proprietær. Ijuni 2008, har IcedTea-projektet bestået streng Java-kompatibilitetstest (TCK). IcedTea er derfor en open source-implementering af Java-specifikationerne. Sun, derefter Oracle, bevarer imidlertid kontrollen over teknologien gennem et katalog over patenter, der gælder for Java, samt ved at opretholde TCK under en licens.
Erhvervelse af OracleVirksomheden Oracle købte i 2009 virksomheden Sun Microsystems . Vi kan nu se Oracle-logoet vises i Java API-dokumentationen.
Det 12. april 2010, James Gosling , skaberen af Java-programmeringssproget, trækker sig tilbage fra Oracle af grunde, som han ikke ønsker at afsløre. Han var blevet CTO for klientsoftwareafdelingen for Oracle.
I 2018 meddelte Oracle, at opdateringer til sin Java SE 8-version til professionel brug ville være underlagt en betalt licens frajanuar 2019.
Java-sproget har gennemgået flere udviklinger siden JDK 1.0 ( Java Development Kit ) med tilføjelse af mange klasser og pakker til standardbiblioteket. Siden J2SE1.4 ledes udviklingen af Java af JCP ( Java Community Process ), der bruger JSR ( Java Specifications Requests ) til at foreslå tilføjelser og ændringer på Java-platformen. Selve sproget er specificeret af Java Language Specification (JLS ), hvor ændringer til JLS håndteres under JSR-kode 901.
Det skal bemærkes, at sprogets på hinanden følgende udviklinger næppe vedrører dets syntaks - relativt stabil siden starten - men hovedsagelig på berigelsen af dets funktioner med indskibning og optimering af softwarebiblioteker ( API ) på meget områder. : databaser, XML-styring, distribueret og webcomputering, multimedie, sikkerhed osv.
Version nummereringVi skal skelne versionen af Java-sproget fra platformene og JRE:
To versioner kan undertiden tilbydes samtidigt, såsom 8u65 og 8u66: forskellen består generelt af mindre fejlrettelser (uden særlig sikkerhedspåvirkning), for hvilken opdatering til den nyeste version ikke er kritisk, og det overlades derfor til administratorens valg (JRE) eller udviklere (JDK).
Offentlige versioner af Java kan efterfølges af ikke-offentlige versioner, kaldet Advanced, forbeholdt kommerciel brug; således er Java 1.6u45 den sidste offentlige version af Java6, men 6u113 er den sidste tilgængelige versionmarts 2016.
Version | Sidste version | Navn JSE / JRE | Kodenavn | specifikationer | JDK | Status oktober 2018 | Vedligeholdelsesperiode | Udvidet support |
---|---|---|---|---|---|---|---|---|
1.0 | 1.0.2 | Java 1.0 | Egetræ | JSR 52 | JDK 1.0.2 | Ikke længere aktivt understøttet | 1996-2000 | |
1.1 | 8_16 | Java 1.1 | JSR 52 | 1.1.8_16 | Ikke længere aktivt understøttet | 1997-2000 | ||
1.2 | 2_017 | J2SE 1.2 | Legeplads | JSR 52 | 1.2.2_11 | Ikke længere aktivt understøttet | 2000-2006 | |
1.3 | 1_29 | J2SE 1.3 | Tårnfalk | JSR 58 | 1.3.1_29 | Forældet | 2000-2001 | |
1.4 | 2_30 | J2SE 1.4 | Merlin | JSR 59 | 1.4.2_30 | Forældet | 2000-2008 | |
1.5 | 0_22 til 0_85 | J2SE 5.0 | Tiger | JSR 176 | 1.5.0_22 | Forældet, 5u51 til 5u85 kun tilgængelig med specifik Oracle-support | 2002-2009 | Maj 2015 |
1.6 | 0_45 til 0_111 | Java SE 6 | Mustang | JSR 270 | 6u113 | Forældet, 6u51 til 6u111 kun tilgængelig med specifik Oracle-support | 2005-2013 | December 2018 |
1.7 | 0_79 til 0_80 | Java SE 7 | Delfin | JSR 336 | 1.7.0_79 | Stabil, version 1.7.0_79 | 2011-2015 | Juli 2022 |
1.8 | 0_171 | Java SE 8 | Kenai derefter Spider | JSR 337 | 1.8.0_171 | Stabil, version 1.8.0_171, der tilbydes brugerne | 2014-september 2018 | Juli 2019 |
9 | 9.0.4 | Java SE 9 | Paraply | JSR 379 | 9.0.4 | Stabil | 2018-? | |
10 | 10.0.1 | Java SE 10 | JSR 383 | 10.0.1 | understøttet 6 måneder før næste udgivelse af JDK Java11-LTS | 2018, ikke en LTS-version (langsigtet support) | ||
11 | 11.0.1 | Java SE 11 | JSR 384 | 11.0.1 | LTS-version | 2023 | 2026 | |
12 | 12.0.2 | Java SE 12 | JSR 386 | 12.0.2 | ||||
13 | Java SE 13 | JSR 388 | 13.0 | |||||
14 | Java SE 14 | JSR 389 | 14.0.1 |
Her vises kun de nyeste versionsnumre for hver udgivelse. Detaljerne om de successive ændringer efter version og opdatering kan findes på wikipedia.da/java_history .
Indhold og udvikling Fra JDK 1.0 til J2SE 1.4Udgivet den 30. september 2004(3.270 klasser og grænseflader), dets kodenavn er Tiger . Det er oprindeligt nummereret 1.5, som altid bruges som det interne versionsnummer. Udviklet af (i) JSR 176 , Tiger tilføjede et betydeligt antal nye funktioner til sprog:
Dette eksempel gennemgår indholdet af widgetobjektet i Iterable-klassen og indeholder kun referencer til objekter i Widget-klassen, tildeler hvert af disse elementer til variablen w og kalder derefter metoden display () på elementet w (specificeret i JSR 201). En lignende syntaks vil blive introduceret i 2011 i C ++ 11 .
Ud over sprogændringer har der gennem årene fundet sted mere markante ændringer, der har ført fra nogle få hundrede klasser i JDK 1.0 til over 3.000 i J2SE 5.0. Hele API'er, som Swing eller Java2D, er blevet tilføjet, og mange metoder fra den oprindelige JDK 1.0 er blevet erklæret forældet (dvs. forældet, de kunne fjernes i en senere version af Java).
Java SE 6Udgivet den 11. december 2006(3.777 klasser og grænseflader i over 20 pakker), dets kodenavn er Mustang . En betaversion blev frigivet den15. februar 2006, en anden beta i juni 2006, en " frigivelseskandidat " version iNovember 2006og den endelige version til 12. december 2006. Med denne udgivelse ændrer Sun navnet J2SE permanent til Java SE og fjerner .0 fra versionsnummeret.
Denne version har været genstand for adskillige sikkerhedssårbarheder og deres korrigerende opdateringer, hvilket førte til version 1.6.0_45 af Oracle og endda 1.6.0_51 til sin Mac OS-version. Dette er også den sidste version af Java, der kører til Mac OS X 10.6 og tidligere.
Java SE 7Udgivet den 7. juli 2011(8000 klasser og grænseflader), dets kodenavn er Dolphin . Dette er den første version under GNU GPL- licensen .
Fra opdatering 6 (7u6) understøtter Oracle standardudgave af Java igen Mac OS X fuldt ud, opdateringer til dette operativsystem understøttes ikke længere af Apple, men af Oracle. Denne version af Java understøttes dog ikke af Mac OS X v10.6 : Faktisk er nogle API'er, der kræves af Java 7, inkluderet af Apple i Mac OS X 10.7.3, men det forventes ikke, at de implementeres i tidligere versioner af Mac OS. 7u90-versionen afapril 2015 er den sidste offentligt tilgængelige opdatering til Java 7.
Java 7 tilbyder blandt andet følgende nye funktioner:
Kodenavn Kenai. Forskellige udgivelser under udvikling af JDK er tilgængelige for download fra efteråret 2013, og Java 8 frigives midt iMarts 2014i overensstemmelse med en køreplan præsenteret af Oracle framaj 2013.
En af de vigtigste nye funktioner i denne version er tilføjelsen af lambdas , hvilket fører til et redesign af en del af API'et, især samlingerne og begrebet stream . Andre bemærkelsesværdige tilføjelser inkluderer indstillinger, standardimplementeringer inden for en grænseflade, et redesign af dato-API'en med mere. På den anden side forventes Enterprise Edition-versionen (Java 8 EE) ikke før 2017.
Modulariseringen af JVM med Jigsaw- projektet , der oprindeligt var planlagt til denne version, udsættes for sin del til version 9, især på grund af Java 6's sikkerhedssårbarheder, hvis korrektion Oracle foretrak i 2013 i forhold til udviklingen af Java .
Java SE 9Oprindeligt planlagt til 2015, men delvist udsat på grund af Jigsaw-projektet, blev denne version endelig frigivet den 21. september 2017.
Java 9 integrerer:
Denne version blev frigivet den 20. marts 2018.
Denne nye version inkluderer især:
Denne version blev frigivet den 25. september 2018.
Ud over ændringen i den langsigtede version understøttelsesmodel inkluderer denne version især:
Denne version blev frigivet den 19. marts 2019.
Denne version integrerer 8 udviklinger:
Denne version blev frigivet den 17. september 2019.
Denne version blev udgivet den 17. marts 2020
Denne version blev udgivet den 15. september 2020.
Java SE 16Denne version blev frigivet den 16. marts 2021.
Da Java-sproget blev oprettet, blev det besluttet, at dette sprog skulle opfylde fem mål:
Den første egenskab, den objektorienterede ("OO") og dagligdagse karakter, henviser til en metode til programmering og design af sproget og det faktum, at et program skrevet i Java er meget lig et program skrevet i C ++ .
Selvom der er flere fortolkninger af udtrykets objektorienterede , er en nøgleide i denne type udvikling, at de forskellige typer data skal være direkte forbundet med de forskellige operationer, der kan udføres på disse data. Som et resultat, dataene (kaldet Egenskaber ) og koden manipulere det (kaldet Methods er) kombineres i en enkelt enhed kaldet Object Class . Koden bliver logisk opdelt i små sammenhængende enheder og bliver således enklere at vedligeholde og lettere genanvendelig, idet den iboende er modulær.
Andre mekanismer som arv gør det muligt at udnytte alle karakteristika for en klasse, der tidligere er skrevet i sine egne programmer uden engang at skulle kende dens interne funktion - man ser kun grænsefladen (grænsefladen beskrevet her). Egenskaber og metoder uden at give den tilknyttede kode). Java forbyder begrebet arv fra flere overordnede klasser, medmindre de er grænseflader.
I version 1.5 af sproget blev tilsat de generiske , en polymorfi mekanisme lignende (men anderledes) til den C ++ sprog skabeloner eller de OCaml functors . Generics gør det muligt at udtrykke på en enklere og mere sikker måde (set fra synspunktet med at skrive) egenskaberne af objekter såsom containere (lister, træer osv.): Listetypen betragtes derefter generisk sammenlignet med typen d 'objekt indeholdt i listen.
Dette element bidrager til programmets robusthed og ydeevne, Garbage Collector kaldes regelmæssigt og automatisk under udførelsen af programmet. På multi-processor og / eller multi-core systemer anvender dette endda flere tråde med lav prioritet for at forstyrre programudførelsen så lidt som muligt. Derudover kan programmøren foreslå at køre affaldssamleren ved hjælp af System.gc () -metoden, hvis det er nødvendigt .
En tilbagevendende klage over sprog som C ++ er den byrdefulde opgave at skulle manuelt programmere hukommelsesadministration. I C ++ fordeles den hukommelse, der er tildelt af programmet til at oprette et objekt, når det destrueres (for eksempel ved et eksplicit opkald til sletoperatøren ). Hvis programmøren glemmer at kode deallocation, resulterer dette i en " hukommelseslækage ", og programmet bruger mere og mere. Værre, hvis et program ved en fejltagelse anmoder om deallocation flere gange eller bruger et hukommelsesområde efter at have anmodet om dets deallocation, vil det højst sandsynligt blive ustabilt og forårsage en fatal fejl.
I Java undgås mange af disse problemer ved affaldsindsamling . Den krævede hukommelsesplads til hvert oprettet objekt styres i en hukommelsesbunke (på engelsk : memory heap ), der er reserveret til dette formål. Programmet får adgang til hvert objekt gennem en reference i bunken. Når der ikke længere er nogen henvisning til at nå et objekt, ødelægger affaldssamleren det automatisk - da det er blevet utilgængeligt - frigør hukommelse og forhindrer dermed enhver hukommelseslækage.
Affaldssamleren bruger en tagging- og frigørelsesalgoritme (på engelsk : mark and sweep ) til håndtering af komplekse tilfælde af objekter, der henviser til hinanden eller referencestropper (for et eksempel på dobbeltkædekæde ). I praksis er der stadig tilfælde af programmeringsfejl, hvor affaldssamleren finder, at et objekt stadig er nyttigt, mens programmet ikke længere har adgang til det funktionelt (men holder en henvisning til objektet), hvilket udgør et særligt tilfælde af " hukommelseslækage ".
Affaldssamling gør hukommelsesstyring mærkbart nemmere og mere sikker. Designere og brugere af programmer eller biblioteker behøver ikke bekymre sig om deallocation af objekter ( slet operator i C ++), undtagen muligvis af ydeevneårsager.
Platformuafhængighed betyder, at programmer skrevet i Java fungerer meget ens på forskellige hardwarearkitekturer. Suns licens til Java insisterer således på, at alle implementeringer skal være kompatible. I teorien kan vi således udføre udvikling på en given arkitektur og køre den endelige anvendelse på alle de andre.
Dette resultat opnås ved:
Bemærk, at selvom der eksplicit er en første fase af kompilering, fortolkes Java bytecode enten eller konverteres i farten til oprindelig kode af en kompilator i farten ( just in time , JIT).
Typer af kompileringerTidlige implementeringer af sproget brugte en fortolket virtuel maskine til at opnå bærbarhed. Disse implementeringer producerede programmer, der blev udført langsommere end dem, der er skrevet på et kompileret sprog (C, C ++ osv.), Så sproget led af et ry for dårlig præstation.
Nyere implementeringer af Java Virtual Machine (JVM) producerer programmer meget hurtigere end før ved hjælp af forskellige teknikker:
Efter at Sun fandt ud af, at Microsofts implementering ikke understøttede RMI- og JNI- grænseflader og havde platformsspecifikke elementer i forhold til den oprindelige platform, indgav Sun en sag mod Microsoft og opnåede erstatning ($ 20 millioner). Denne retfærdige handling strammede yderligere vilkårene for Suns licens. Som svar ophørte Microsoft med understøttelse af Java på sine platforme, og i nyere versioner af Windows Internet Explorer understøtter ikke Java-applets uden tilføjelse af plug-ins. Sun stiller dog Java-runtime-miljøer gratis til rådighed for de forskellige Microsoft-platforme.
Bærbarhed er teknisk set et vanskeligt mål, og Java's succes på dette område er blandet. Selvom det faktisk er muligt at skrive programmer til Java-platformen, der fungerer godt på mange målmaskiner, har det store antal platforme med små fejl og uoverensstemmelser resulteret i misbrug af Suns slogan " Skriv en gang, kør hvor som helst " ( "Skriv en gang, kør hvor som helst " ) til " skriv en gang, fejlret overalt " ( " Skriv en gang, fejlret overalt " )!
Java's platformuafhængighed er dog vellykket med server-applikationer som webservices, servlets og Java Beans samt indlejrede systemer på OSGi ved hjælp af det Embedded Java- miljø .
Java-platformen var et af de første systemer til at tilbyde support til udførelse af kode fra eksterne kilder. En applet kan køre i en brugers webbrowser og udføre kode, der er downloadet fra en HTTP- server . Koden til en applet fungerer i et meget restriktivt rum, der beskytter brugeren mod forkerte eller ondsindede koder. Dette rum afgrænses af et objekt kaldet sikkerhedsadministratoren . Et sådant objekt findes også for lokal kode, men som standard er det inaktivt.
Sikkerhedsadministratoren (klassen SecurityManager ) giver dig mulighed for at definere et bestemt antal autorisationer til brug af ressourcerne i det lokale system (filsystem, netværk, systemegenskaber osv.). En autorisation definerer:
Applet-redaktører kan anmode om et certifikat, der giver dem mulighed for digitalt at underskrive en applet som sikker, hvilket potentielt giver dem (med korrekt autorisation) tilladelse til at forlade det restriktive rum og få adgang til lokale systemressourcer.
Her er et eksempel på et typisk Hello-verdensprogram skrevet i Java:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } }Kildefilen bærer næsten altid navnet på klassen med udvidelsen ".java" (her "HelloWorld.java", det ville endda være obligatorisk, fordi klassen har den offentlige attribut i sin erklæring - hvilket gør den tilgængelig for alle andres program) . Vi kan kompilere og derefter køre dette eksempel på terminalen med følgende kommandoer (under Linux ):
javac HelloWorld.java export CLASSPATH=. java HelloWorldLinjen “ eksport CLASSPATH =. Bruges til at fortælle Java, at det også skal se efter klasseprogrammer i den aktuelle mappe. Denne sti kan også specificeres, når programmet startes ved hjælp af -classpath- indstillingen (eller kort -cp ):
java -cp. HelloWorldBemærkninger:
( kilde )
En klasse er beskrivelsen af data kaldet attributter og af operationer kaldet metoder. Dette er en definitionsskabelon til objekter med det samme sæt attributter og det samme sæt operationer. Fra en klasse kan vi oprette et eller flere objekter ved instantiering; hvert objekt er en forekomst af en enkelt klasse.
Sigtbarhed:
En attribut defineres ved at give sin type, derefter dens navn og muligvis en initialiseringsdel.
Sigtbarhed:
En metode defineres ved:
Sigtbarhed:
Efternavn | Størrelse i byte under beregningerne | Standard værdi | Mulige værdier |
---|---|---|---|
boolsk | En enkelt bit er nok, men vi reserverer ofte en byte til at gemme dem. | false | true, false |
byte | 1 | 0 | heltal mellem -128 og +127 (-2 7 og 2 7 -1) |
shorts | 2 | 0 | heltal mellem −32 768 og 32 767 (-2 15 og 2 15 -1) |
int | 4 | 0 | heltal mellem −2 147 483 648 og + 2147 483 647 (-2 31 og 2 31 -1) |
lang | 8 | 0 | heltal mellem -9 223 372 036 854 775 808 og 223 372 9 036 854 775 807 (-2 63 og 2 63 -1) |
tank | 2 | '\u0000' | Alle værdier Unicode (U-værdier + U + 0000 til FFFF, 4 cifre som kræves efter '\u') De første 128 tegn er ASCII-koder og note apostroffer: 'a', '1', '\'', '\n'. |
flyde | 4 | 0.0 | Sæt med tal [−3.402 823 47 × 10 38 .. −1.402 398 46 × 10 −45 ], 0, [1.402 398 46 × 10 −45 .. 3.402 823 47 × 10 38 ] |
dobbelt | 8 | 0.0 | Sæt med tal [−1.797 693 134 862315 70 × 10 308 .. −4.940 656 458 412 465 44 × 10 −324 ], 0, [4.940 656 458 412 465 44 × 10 −324 .. 1.797 693 134 862 315 70 × 10.308 ] |
Objekt | Afhængig af virtuel maskine | null |
Tabellen ovenfor viser de grundlæggende typer, men der er andre typer i Java, som er objekter og skal bruges som sådan. For eksempel til at definere et heltal kan vi bruge typen 'Heltal', hvis initialiseringsværdi som standard vil værenull
For at instantiere en variabel er syntaksen (her den samme som i C) som følger:
NomDuType maVariable;myVariable allokeres derefter på stakken.
Det er ofte nødvendigt at gemme en masse data i samlinger: indkøbsliste, studiekort osv. Samlingerne kan konsulteres, ændres, vi kan sortere dem, kopiere dem, slette dem osv. De kan have en fast eller variabel størrelse.
Samlinger i fast størrelse er lettere end samlinger i variabel størrelse.
Samlinger i fast størrelseDen abstrakte klasse AbstractListleveres til at implementere samlinger i variabel størrelse.
For at initialisere en ArrayList skal du importere klassen java.util.ArrayListog skrive liste = new ArrayList<T>();eller liste = new ArrayList<>(); fra JDK 7.0.
Siden JDK 1.5 har vi muligheden for at angive typen af elementer indeholdt i en ArrayList: Heltal, tegnstrenge eller andre objekter.
For at tilføje et element skriver vi liste.add(Objet);
Sådan får du adgang til et element i ArrayList: liste.get(index);
For at finde ud af antallet af elementer, en liste indeholder: liste.size();
For at slette et element: liste.remove(index);elementerne efter det slettede element flyttes til venstre.
Selvom de alle har en lignende rolle, er hver løkke ikke desto mindre tilpasset en situation:
Bemærk : det er muligt at kombinere betingelser (boolske udtryk) ved hjælp af yderligere operatorer: den logiske "AND" && (sætning udført, hvis alle betingelser er sande):
Der er også det logiske ”ELLER” || (instruktion udført, hvis mindst en af betingelserne er opfyldt):
if (<condition 1> || <condition 2>) { instruction(s) si au moins une des deux est vraie }Endelig er der det logiske ”NEJ” ! som giver dig mulighed for at vende resultatet af en tilstand.
Det er muligt at kombinere disse operationer for at opnå komplekse betingede strukturer. Du kan tilføje parenteser for at definere betingelserne (som i en beregning). I andre tilfælde udfører JVM de forskellige kontroller fra venstre mod højre.
Valget af udførelse af instruktionerne bestemmes af det følgende udtryks switch, hvis type kan være heltal ( int , char , byte eller korte eller tilsvarende konvolutklasser), optalt ( enum ) eller String (tegnstreng, da kun Java 7).
Bemærk: ' Den betingede operatør eller ternære operatør ? : kan bruges til at undgå brugen af en betinget erklæring. Et betinget udtryk har begge værdier efter test af den boolske tilstand:
<expression booléenne> ? <valeur si vrai> : <valeur si faux> Ubetingede forbindelserDen endelige kodeblok udføres uanset resultatet, når programmet afslutter prøvefangstblokken .
Her er et eksempel på at fange en undtagelse:
FileOutputStream fos = null; try { //Chacune de ces deux instructions peut générer une exception // création d'un flux pour écrire dans un fichier fos = new FileOutputStream(...); // écriture de données dans ce flux fos.write(...); } catch (IOException e) { //Gestion de l'erreur de création ou d'écriture dans le flux e.printStackTrace(); } finally{ //Cette section de code est toujours exécutée, qu’il y ait une exception ou pas // fermeture du flux s'il a été ouvert if(fos != null) fos.close(); }Dette eksempel illustrerer undtagelsesmekanismen i Java. I tilfælde af en input / output fejl i try blok , udførelse genoptages i catch blok svarer til denne situation (undtagelse af typen IOException ).
I denne fangstblok henviser variablen e til den undtagelse, der opstod. Her påkalder vi metoden printStackTrace () , der viser i konsollen oplysninger om den undtagelse, der opstod: navn, årsag, tilstand for opkaldsstakken, da undtagelsen blev kastet, og eventuelt linjenummer, hvor fejlen opstod.
Den endelige blok udføres derefter (her for at lukke de anvendte ressourcer). Dette er kun et eksempel. Den handling, der skal udføres, når en undtagelse opstår, afhænger af applikationens generelle funktion og undtagelsens art.
Generiske typerEn generisk type kaldes ellers en skabelon, den tager en eller flere andre typer som argumenter. Den type, der sendes som parameter, bestemmes under instantiering.
Dette gør det især muligt i forbindelse med ArrayLists at undgå rollebesætninger.
public class ArrayList<E> { ArrayList<String> al = new ArrayList<String>(); }Disse generiske typer bruges kun ved kompilering, ikke direkte i bytekode.
Forskel med C ++: Skabeloner i C ++ duplikerer en klasse for hver type. På den anden side fungerer Java på kompileringstidspunktet, som om vi havde duplikeret klasser af disse iboende typer, men handler faktisk kun om en klasse.
KildekodekodningJava-sprogspecifikationerne specificerer, at det er dannet af tegn i UTF-16- format , som tillader brug i kildekoden af alle de tegn, der findes i verden:
public class HelloWorld { private String text = "hello world"; }For at sikre bærbarhed mellem platforme bør klassenavne dog kun bestå af ASCII- tegn .
Operatør | Betyder |
---|---|
== | Lige (ikke at forveksle med = som er tildelingsoperatøren) |
! = | Forskellige |
< | Underlegen |
> | Overlegen |
<= | Mindre eller lige |
> = | Større end eller lig med |
JavaStyle er Java-sprogprogrammeringskonventioner defineret af Sun. Respekten for strenge konventioner sikrer homogenitet i kildekoden til en applikation, der er udviklet af et helt team, og fremmer distributionen af kildekoden til et samfund, der deler de samme kodningskonventioner.
Det nederste kamelhus bruges til navnene på metoder og variabler.
Sun leverer et stort antal rammer og API'er, der muliggør brug af Java til en lang række anvendelser.
Der er grundlæggende fire vigtigste rammer :
Persistens er baseret på standarder:
Der er dog mange andre teknologier, API'er og valgfrie udvidelser til Java:
Programmering kan udføres fra en kommandoprompt ved at starte en Java-kompilator (ofte kaldet javac ), men for mere bekvemmelighed er det bedre at bruge et integreret udviklingsmiljø eller IDE (som gør det muligt at kompilere automatisk), nogle er gratis. For eksempel :
Et Java-program kan produceres med værktøjer, der automatiserer byggeprocessen (dvs. automatisering af visse opgaver, der involverer et potentielt stort antal afhængigheder såsom biblioteksbrug, kompilering, genereringsarkiver, dokumentation, implementering osv.). De mest anvendte er:
Resultater:
% scons -Q javac -d classes -sourcepath src src/Exemple1.java src/Exemple2.java src/Exemple3.java jar cf test.jar classes