Java | ||
Ensimmäisen version päivämäärä | 1995 | |
---|---|---|
Paradigma | Kohdekeskeinen , jäsennelty , välttämätön , toimiva | |
Kirjoittaja | Sun Microsystems | |
Kehittäjät | Oracle Corporation | |
Viimeinen versio | Java SE 16.0.1 (20. huhtikuuta 2021) | |
Kirjoittaminen | Staattinen , vahva , turvallinen , nimellinen | |
Vaikuttanut | Objektiivi-C , C ++ , Smalltalk , Eiffel , Ada 83 , Mesa , Modula-3 , Oberon , UCSD Pascal | |
Vaikuttanut | C # , J # , Ada 2005 , Gambas , BeanShell , Clojure , ECMAScript , Groovy , JavaScript , PHP , Kotlin , Python , Scala , Seed7 , Vala , Käsittely | |
Toteutukset | JVM-luettelo | |
Käyttöjärjestelmä | Monialustainen | |
Lisenssi | GNU GPLV2 + CPE | |
Verkkosivusto | www.oracle.com/java/technologies | |
Tiedostopääte | java, luokka, purkki, jad ja jmod | |
Java on objektisuuntautunut ohjelmointikieli, jonka ovat luoneet Sun Microsystemsin työntekijät James Gosling ja Patrick Naughton Bill Billin ( Sun Microsystemsin perustajajäsen vuonna 1982 ) tuella.23. toukokuuta 1995klo Sunworld .
Sitten Sun-yrityksen osti vuonna 2009 Oracle- yritys, joka nyt omistaa ja ylläpitää Java-palvelua .
Erikoisuus Java on, että ohjelmisto kirjoitettu tällä kielellä on koottu erään väli- binääriesityksen jota voidaan suoritettuna Java Virtual Machine (JVM) ottamatta huomioon käyttöjärjestelmään .
Java-kieli ottaa suurelta osin C ++ -kielen syntaksin . Kuitenkin, Java on poistettu hienoimman käsitteet C ++ ja sekä kaikkein sekava, kuten osoittimia ja viitteet, tai moniperintä ohittaa jonka toteuttamiseen on rajapinnat . Samoin versiosta 8 lähtien toiminnallisten rajapintojen saapuminen tuo mukanaan useita perintöominaisuuksia (ilman attribuuttien hallintaa) ja sen etuja ja haittoja, kuten timanttiperinnön . Suunnittelijat suosivat olio-suuntautunutta lähestymistapaa niin, että Java-ohjelmassa kaikki on esine, paitsi primitiiviset tyypit ( kokonaisluvut , liukuluvut jne.), Joilla on kuitenkin muunnelmansa, jotka perivät Object-objektista (kokonaisluku, Float, ...).
Java antaa sinun kehittää asiakas-palvelinsovelluksia . Asiakkaan puolella sovelmat ovat kielen tunnetuksi saamiseksi. Erityisesti palvelinpuolella Java on asettanut itsensä liike-elämälle servletien , sovelmien palvelinpuolen ja viime aikoina JSP: n ( JavaServer Pages ) ansiosta, jotka voivat korvata PHP: n , ASP: n ja ASP.NET: n .
Java synnytti käyttöjärjestelmän ( JavaOS ), kehitysympäristöt ( eclipse / JDK ), virtuaalikoneet ( MSJVM (en) , JRE ) cross-platform -sovelluksen ( JVM ), muunnelman mobiililaitteille / sulautetut ( J2ME ), graafisen käyttöliittymäsuunnittelukirjasto ( AWT / Swing ), raskaat sovellukset (Jude, Oracle SQL Worksheet jne.), verkkotekniikat (servletit, sovelmat) ja muunnelma yritykselle ( J2EE ). Siirrettävyys Java bytecode on varmistettu Java-virtuaalikone kone, ja mahdollisesti tavanomaisilla kirjastojen sisältyy JRE. Tämä virtuaalikone voi tulkita tavukoodin tai koota sen lennossa konekieleksi. Siirrettävyys riippuu kunkin käyttöjärjestelmän JVM: ien siirrettävyydestä.
Java-kieli on peräisin Sun Microsystems -projektista vuodelta 1990: insinööri Patrick Naughton ei ollut tyytyväinen Sunin käyttämään C ++ -kieleen, sen ohjelmointirajapintoihin C-kielellä sekä niihin liittyviin työkaluihin. Harkitessaan siirtymistä NeXT: lle, hänelle tarjottiin mahdollisuus työskennellä uuden tekniikan parissa, ja näin syntyi Stealth Project ( varkain ).
Stealth projekti oli nopeasti nimeksi Ympäristöystävällisiä hanke saapumista James Gosling ja Mike Sheridan. Yhdessä avulla muiden insinöörien, he alkoivat työskentelee toimistossa Sand Hill Street Menlo Park , Kalifornia . He yrittivät kehittää tekniikkaa seuraavan sukupolven sovellusten kehittämiseksi tarjoten Sunille ainutlaatuisen mahdollisuuden.
Tiimi aikoi alun perin käyttää C ++ - kieltä, mutta hylkäsi sen eri syistä. Ensinnäkin he kehittyivät sulautettuun järjestelmään, jolla oli rajalliset resurssit, ja kokivat, että C ++: n käyttö vaati liikaa investointeja ja että tämä monimutkaisuus oli virhelähde kehittäjille. Puute roskienkeräyksen vuoksi muistin jouduttiin ohjelmoida manuaalisesti, haaste, vaan myös virhelähde.
Tiimi oli myös tyytymätön C ++ -kielen puutteisiin turvallisuuden, hajautetun ohjelmoinnin ja monisäikeisyyden suhteen . Lisäksi he halusivat alustan, joka voitaisiin siirtää mihin tahansa laitteeseen tai alustaan.
Bill Joy oli suunnitellut uuden kielen, jossa yhdistyvät paras Mesa (in) ja C-kieli . Artikkelissa nimeltä Lisää ( edelleen ) hän ehdotti Sunille, että sen insinöörit kehittävät C ++: een perustuvaa olio-ympäristöä. Alunperin Gosling tarkoitus muuttaa ja parantaa C ++ kieltä, jota hän kutsui C ++ ++ - mutta ajatus oli pian luovuttu kehittämään uutta ohjelmointikieltä jota he kutsuivat Oak. (Tammi) viitaten, legendan mukaan puuhun, joka on istutettu heidän toimistoikkunansa eteen .
Joukkue työskenteli ahkerasti ja kesällä 1992 he pystyivät esittelemään alustan, joka sisälsi Green-käyttöjärjestelmän , tammen kieli (1992), kirjastot ja laitteistot. Heidän ensimmäinen saavutus esitettiin3. syyskuuta 1992Oli rakentaminen PDA kutsutaan Star7 , jossa on graafinen käyttöliittymä ja älykäs agentti, nimeltään Duke käyttäjän avustamiseksi.
Saman vuoden marraskuussa Green Project lopetettiin ja siitä tuli FirstPerson, Inc. , jonka kokonaan omistaa Sun Microsystems, ja joukkue muutti Palo Altoon. FirstPerson- tiimi oli kiinnostunut rakentamaan erittäin interaktiivisia työkaluja, ja kun Time Warner julkaisi tarjouspyynnön monitoimidekooderille, FirstPerson muutti keskittymistään tarjotakseen tällaisen alustan.
Kaapelitelevisioteollisuuden mielestä se tarjosi kuitenkin liikaa vaihtoehtoja käyttäjälle, ja FirstPerson menetti markkinat Silicon Graphicsille . Koska yritys ei voinut kiinnostaa audiovisuaaliteollisuutta, yhtiö palautettiin Suniin.
Kesäkuu - Heinäkuu 1994, kolmen päivän aivoriihin jälkeen John Gage, James Gosling, Joy, Naughton, Wayne Rosing ja Eric Schmidt , tiimi suunnitteli alustan verkossa . He uskoivat, että Mosaic- selaimen myötä Internet oli oikea paikka kehittää samanlainen vuorovaikutteinen työkalu, jonka he kuvittelivat kaapeliteollisuudelle. Naughton kehitti prototyyppinä pienen WebRunner-selaimen, josta myöhemmin tuli HotJava .
Samana vuonna kieli nimettiin uudelleen Java: ksi, kun havaittiin, että näytönohjaimen valmistaja oli jo käyttänyt nimeä Oak .
Nimen Java alkuperäNimi "Java" ei ole lyhenne , se valittiin aivoriihien aikana korvaamaan alkuperäinen nimi "Oak" johtuen ristiriidasta olemassa olevan tuotemerkin kanssa, koska kahvi ( amerikkalaisessa slangissa "java" ) on monien ohjelmoijien suosikkijuoma . Sunin valitsema logo on myös höyryvä kuppi kahvia.
Java julkinen käynnistysSisään Lokakuu 1994, HotJava ja Java -alusta esiteltiin Sun Executivesille . Java 1.0a oli ladattavissa vuonna 1994, mutta HotJava-selaimen ensimmäinen julkinen versio saapui23. toukokuuta 1995SunWorld- konferenssissa .
Ilmoituksen teki Sun Microsystemsin tieteellinen johtaja John Gage. Hänen ilmoituksensa mukana oli Netscape-johtajan varapuheenjohtajan Marc Andressenin yllätysilmoitus siitä, että Netscape aikoo sisällyttää Java-tuen selaimiinsa. 9. tammikuuta 1996, Sun Microsystems perusti Javasoft-ryhmän tämän tekniikan kehittämiseksi. Kaksi viikkoa myöhemmin ensimmäinen Java-versio oli saatavilla.
Kielen version 1.2 ulkonäkö on merkittävä käännekohta: vuonna 2000 versio esiintyi samanaikaisesti kahdella Java-alustalla:
Sun luokittelee ne sitten Java 2 -alustaksi toisin kuin ensimmäiset sukupolvet 1.0 ja 1.1. Kaikkia seuraavia versioita, J2EE 1.2: sta Java SE: hen tai Java EE 7: ään, kutsutaan edelleen Java 2 -alustoiksi, vaikka '2' on sittemmin virallisesti lopetettu.
Appletit
Historiallisesti verkkoselainten kyky käynnistää Java-sovelmia oli ainoa ratkaisu rikkaiden asiakassovellusten näyttämiseen (RIA rikkaille Internet-sovelluksille ). Sitten syntyi kilpailevia tekniikoita, kuten Macromedia Flash , DHTML JavaScript , Silverlight, joka perustuu XAML: ään tai Xuliin .
Sovelmat on työaseman voi kommunikoida servletit palvelimella, aivan kuten JavaScript voi kommunikoida palvelimen avulla AJAX . Flex käyttää Flash-tekniikkaa Adobe Flash Playerin kautta .
Aikana, jolloin JavaScript kärsi selainten välisestä yhteensopivuudesta, Java-sovelmilla oli etuna siirrettävyys, koska monimutkaisten rajapintojen siirtäminen oli vaikeaa kaikille markkinoiden selaimille.
Java-muodin laskeutumisen lisäksi Java-kilpailevien tekniikoiden edistyminen on saanut useimmat kehittäjät kääntymään pois Java-sovelmista ja tähän tekniikkaan liittyvistä ongelmista (JVM: ien yhteensopimattomuudet, huono suorituskyky, heikot kirjastot. Grafiikka, monimutkaisuus ). Lopuksi, nykyiset selaimet eivät enää järjestelmällisesti sisälly Java-ympäristöön sen suuren koon vuoksi, ja sovelmia näyttävien koneiden osuus oli vuonna 2010 vain 70%, paljon pienempi kuin Flashin esimerkki. Vuonna 2010 lähes kaikki rikkaat asiakassovellukset käyttivät vaihtoehtoista tekniikkaa; Salama suurimmaksi osaksi mutta myös GWT .
Lopuksi, HTML5: n saapuminen , joka on tarkoitettu upottamaan monia RIA- ja multimediaominaisuuksia , tekee myös sovelmista vanhentuneita.
JavaFX
Java 8: n ilmestyessä sisään Maaliskuu 2014, JavaFX: stä tulee virallinen Java GUI -työkalupakettityökalu kaikenlaisille sovelluksille (mobiilisovellukset, työpöytäsovellukset, verkkosovellukset jne.), Edeltäjänsä Swingin kehitys keskeytetään (paitsi virhekorjauksia). JavaFX on puhdas Java-sovellusliittymä (tietty ohjelmaan ajoittain liitetty komentokieli on nyt hylätty). JavaFX sisältää laajan valikoiman työkaluja, kuten ääni- ja videovälineitä, 2D- ja 3D-grafiikkaa, web- ohjelmointia, rinnakkaisohjelmointia ja paljon muuta.
Palvelimen puolellaKanssa sovelluspalvelimet , EJBs ovat käytetty kapselointiin aikaisemmin määritelty luokkiin. Näitä elementtejä käytetään J2EE- arkkitehtuureissa monikerroksisissa sovelluksissa. Tämän työn etuna on, että pystymme piilottamaan palvelinpuolen koodin toteutuksen asiakkaalta.
Työaseman käyttöJava-kielen alkuperäinen käyttö työasemien sovelluksissa oli toistaiseksi suhteellisen harvinaista niiden nopeuden puutteen vuoksi. Tietokoneiden tehon nopean kasvun, 2000-luvun aikana Java-virtuaalikoneen ja kääntäjien laadun parantamisen myötä useat tekniikat ovat kuitenkin saaneet jalansijaa, kuten NetBeans ja Eclipse- ympäristö , jaettujen tiedostojen LimeWire- tekniikat , Vuze (entinen Azureus) ja I2P . Javaa käytetään myös MATLAB- matematiikkaohjelmassa , ihmisen ja koneen rajapintatasolla sekä tietokonealgebraan. Swing- sovellukset ovat myös nousemassa vaihtoehtona .NET-tekniikalle.
Käytä matkapuhelimien kanssaOracle ilmoittaa aloittamisestalokakuu 2012JavaOne-konferenssissa halunsa tarjota Java-ratkaisuja sulautettujen ohjelmistojen alalle, prosessoreille, jotka ovat vähemmän tehokkaita kuin yleensä tietokoneilla. Oracle yhdistää kokonaisen ekosysteemin yrityksiä, jotka ovat erikoistuneet näihin markkinasegmentteihin, kuten MicroEJ- kustantaja tai jopa STMicroelectronics, joka tarjoaa Java-palvelua STM32-koneilleen, joiden ydin on CortexM3 / M4.
Java, erityisesti Eclipse ja NetBeans , tarjoaa jo integroituja kehitysympäristöjä mobiililaitteille. Java on tärkein kieli, jota käytetään sovellusten kehittämiseen Googlen ilmaiselle mobiilikäyttöjärjestelmälle : Android .
JavaFX voi myös sallia Java-käytön matkapuhelimissa, vaikka se ei olekaan sen ensisijainen tarkoitus.
Windows OS, Mac OS X ja GNU / LinuxMicrosoft toimitti vuonna 2001 Java-tyyppisen työympäristön, nimeltään J ++ , käyttöjärjestelmineen ennen Windows XP: n julkaisua . Tuomioistuimen päätöksen jälkeen , ja koska tämän kielen spesifikaatioita ei noudatettu, Microsoftin oli hylättävä tämä kieli ja luotava uusi kieli, nimeltään C # (katso alhaisempi luku " Itsenäisyys alustalle ")
Monet tietokoneiden valmistajat sisällyttävät JRE-ympäristön edelleen Windows-järjestelmiinsä.
Java näkyy myös vakiona Mac OS X : ssä Applelta sekä Linux- jakeluilta . Joten nykyään suurin osa käyttäjistä voi käynnistää Java-sovellukset ilman mitään ongelmia. Apple-tietokoneissa Java 5: n jakelusta Java 6: een huolehti kuitenkin suoraan Apple, ei Oracle. Tämä käytäntö johti viiveisiin ja versiorajoituksiin:
Siksi J2SE 1.4 ei ollut käytettävissä ennen kuin Mac OS X v10.2 (koodinimi Jaguar ), J2SE 5.0 Mac OS X v10.4: stä ( Tiger ), Java SE 6 toimii vain Mac OS X v10.5: ssä ( Leopard ), joka on varustettu Intel- prosessori ja Java 7 vaatii Mac Intel -tietokoneen, jossa on Mac OS X v10.7 .3 ( Lion ).Avoimen lähdekoodin lisensointi11. marraskuuta 2006, javac-kääntäjän ja HotSpot- virtuaalikoneen lähdekoodi on julkaistu avoimena lähdekoodina GNU General Public License -lisenssillä .
13. marraskuuta 2006Sun Microsystems ilmoittaa kulkua Java, toisin sanoen JDK (JRE ja kehitystyökaluja) ja ympäristöissä Java EE (jo lisenssillä CDDL) ja Java ME lisenssillä GPL täältäMaaliskuu 2007, projektinimellä OpenJDK .
Sisään Toukokuu 2007, Sun julkaisee OpenJDK: n ilmaisella lisenssillä. OpenJDK riippuu kuitenkin edelleen ei-vapaan koodin fragmenteista, joita Sun ei omista. Siksi Redhat-yritys käynnistää toimintansa vuonnakesäkuu 2007projekti IcedTea (in), jonka tarkoituksena on korvata ei-vapaan koodin fragmentit ja tehdä OpenJDK: sta käyttökelpoinen ilman omaa ohjelmistoa. Sisäänkesäkuu 2008, IcedTea-projekti on läpäissyt tiukan Java-yhteensopivuustestauksen (TCK). IcedTea on siis avoimen lähdekoodin Java-määritysten toteutus. Sun, sitten Oracle, säilyttää kuitenkin tekniikan hallinnan Java-sovellusten patenttiluettelon avulla sekä ylläpitämällä TCK: ta omalla lisenssillä.
Hankkinut OracleYhtiö Oracle osti vuonna 2009 yhtiön Sun Microsystems . Oracle-logo näkyy nyt Java-sovellusliittymän dokumentaatiossa.
12. huhtikuuta 2010, Java-ohjelmointikielen luoja James Gosling eroaa Oraclesta syistä, joita hän ei halua paljastaa. Hänestä oli tullut Oraclen asiakasohjelmisto-divisioonan johtaja.
Vuonna 2018 Oracle ilmoitti, että ammattikäyttöön tarkoitettujen Java SE 8 -versioiden päivitykset edellyttävät maksettua lisenssiätammikuu 2019.
Java-kielelle on tehty useita muutoksia JDK 1.0: sta ( Java Development Kit ) lähtien, ja vakiokirjastoon on lisätty monia luokkia ja paketteja. J2SE1.4: n jälkeen Java-kehitystä johtaa JCP ( Java Community Process ), joka käyttää JSR: ää ( Java Specifications Requests ) ehdottaakseen lisäyksiä ja muutoksia Java-alustalle. Kielen itse määrittelee Java Language Specification (JLS ), ja muutokset JLS: ään hoidetaan JSR-koodilla 901.
On huomattava, että kielen peräkkäiset evoluutiot eivät tuskin liity sen syntaksiin - suhteellisen vakaana alusta lähtien -, vaan lähinnä sen toimintojen rikastamiseen, ohjelmistokirjastojen ( API ) aloittamiseen ja optimointiin hyvin aloilla. : tietokannat, XML-hallinta, hajautettu ja verkkolaskenta, multimedia, tietoturva jne.
Versioiden numerointiMeidän on erotettava Java-kieliversio alustojen ja JRE-versioista:
Kahta versiota voidaan joskus tarjota samanaikaisesti, kuten 8u65 ja 8u66: ero koostuu yleensä pienistä virhekorjauksista (ilman erityisiä turvallisuusvaikutuksia), joiden päivittäminen uusimpaan versioon ei ole kriittistä ja jätetään sen vuoksi järjestelmänvalvojien valittavaksi. (JRE) tai kehittäjät (JDK).
Javan julkisten versioiden jälkeen voi seurata ei-julkisia versioita, nimeltään Advanced, varattu kaupalliseen käyttöön; siis Java 1.6u45 on viimeinen Java6: n julkinen versio, mutta 6u113: n viimeisin käytettävissä oleva versiomaaliskuu 2016.
Versio | Viimeinen versio | Nimi JSE / JRE | Koodinimi | Erittely | JDK | Tila lokakuu 2018 | Huoltoaika | Laajennettu tuki |
---|---|---|---|---|---|---|---|---|
1.0 | 1.0.2 | Java 1.0 | Tammi | JSR 52 | JDK 1.0.2 | Ei enää aktiivisesti tuettu | 1996-2000 | |
1.1 | 8_16 | Java 1.1 | JSR 52 | 1.1.8_16 | Ei enää aktiivisesti tuettu | 1997-2000 | ||
1.2 | 2_017 | J2SE 1.2 | Leikkikenttä | JSR 52 | 1.2.2_11 | Ei enää aktiivisesti tuettu | 2000-2006 | |
1.3 | 1_29 | J2SE 1.3 | Kestrel | JSR 58 | 1.3.1_29 | Vanhentunut | 2000-2001 | |
1.4 | 2_30 | J2SE 1.4 | Merlin | JSR 59 | 1.4.2_30 | Vanhentunut | 2000-2008 | |
1.5 | 0_22 - 0_85 | J2SE 5.0 | Tiikeri | JSR 176 | 1.5.0_22 | Vanhentunut, 5u51 - 5u85 saatavana vain tietyllä Oracle-tuella | 2002-2009 | Toukokuu 2015 |
1.6 | 0_45 - 0_111 | Java SE 6 | Mustang | JSR 270 | 6u113 | Vanhentunut, 6u51 - 6u111 on saatavana vain tietyllä Oracle-tuella | 2005-2013 | Joulukuu 2018 |
1.7 | 0_79 - 0_80 | Java SE 7 | Delfiini | JSR 336 | 1.7.0_79 | Vakaa, versio 1.7.0_79 | 2011-2015 | Heinäkuu 2022 |
1.8 | 0_171 | Java SE 8 | Kenai sitten Hämähäkki | JSR 337 | 1.8.0_171 | Vakaa, versio 1.8.0_171 tarjotaan käyttäjille | 2014 - syyskuu 2018 | Heinäkuu 2019 |
9 | 9.0.4 | Java SE 9 | Sateenvarjo | JSR 379 | 9.0.4 | Vakaa | 2018-? | |
10 | 10.0.1 | Java SE 10 | JSR 383 | 10.0.1 | tuettu 6 kuukautta ennen seuraavaa JDK Java11-LTS -julkaisua | 2018, ei LTS-versio (pitkäaikainen tuki) | ||
11 | 11.0.1 | Java SE 11 | JSR 384 | 11.0.1 | LTS-versio | 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 |
Tässä luetellaan vain kunkin julkaisun uusimmat versionumerot. Yksityiskohdat peräkkäisistä muutoksista version ja päivityksen mukaan löytyvät osoitteesta wikipedia.en / java_history .
Sisältö ja kehitys JDK 1.0: sta J2SE 1.4: eenJulkaistu 30. syyskuuta 2004(3270 luokkaa ja rajapintaa), sen koodinimi on Tiger . Se on alun perin numeroitu 1,5, jota käytetään aina sisäisenä versionumerona. Kehittämä (in) JSR 176 , Tiger lisäsi huomattavan määrän uusia ominaisuuksia kieli:
Tämä esimerkki toistaa Iterable-luokan widget-objektin sisällön ja sisältää vain viittauksia Widget-luokan objekteihin, liittämällä nämä elementit muuttujaan w ja kutsuen sitten display () -menetelmää elementillä w (määritelty JSR: ssä 201). Vastaava syntaksi otetaan käyttöön vuonna 2011 versiossa C ++ 11 .
Kielimuutosten lisäksi vuosien varrella on tapahtunut merkittävämpiä muutoksia, jotka ovat johtaneet muutamasta sadasta luokasta JDK 1.0: ssa yli 3000: een J2SE 5.0: ssa. Kokonaisia sovellusliittymiä, kuten Swing tai Java2D, on lisätty, ja monet alkuperäisen JDK 1.0: n menetelmät on julistettu vanhentuneiksi (ts. Vanhentuneiksi, ne voidaan poistaa uudemmassa Java-versiossa).
Java SE 6Julkaistu 11. joulukuuta 2006(3777 luokkaa ja rajapintoja yli 20 paketissa), sen koodinimi on Mustang . Beetaversio julkaistiin15. helmikuuta 2006, toinen beta-versio kesäkuu 2006, " julkaisuehdokas " -versioMarraskuu 2006, ja lopullinen versio 12. joulukuuta 2006. Tällä julkaisulla Sun muuttaa nimen J2SE pysyvästi Java SE: ksi ja poistaa .0: n versionumerosta.
Tähän versioon on tehty lukuisia tietoturva-aukkoja ja niiden korjaavia päivityksiä, mikä on johtanut Oraclen versioon 1.6.0_45 ja Mac OS -versioon jopa 1.6.0_51. Tämä on myös viimeinen Java-versio, joka toimii Mac OS X 10.6 -käyttöjärjestelmässä ja sitä vanhemmissa versioissa.
Java SE 7Julkaistu 7. heinäkuuta 2011(8000 luokkaa ja rajapintaa), sen koodinimi on Dolphin . Tämä on ensimmäinen versio GNU GPL -lisenssillä .
Päivityksestä 6 (7u6) Oravan vakioversio Java tukee jälleen täysin Mac OS X: tä, Apple ei enää tue tämän käyttöjärjestelmän päivityksiä. Mac OS X v10.6 ei kuitenkaan tue tätä Java-versiota : Jotkut Java 7: n edellyttämät sovellusliittymät on todellakin sisällyttänyt Apple Mac OS X 10.7.3 -käyttöjärjestelmään, mutta niiden ei odoteta toteutuvan aiemmissa versioissa. Mac OS -käyttöjärjestelmästä. 7u90-versiohuhtikuu 2015 on viimeinen julkisesti saatavilla oleva päivitys Java 7: een.
Java 7 tarjoaa muun muassa seuraavat uudet ominaisuudet:
Koodinimi Kenai. Erilaisia JDK: n kehitteillä olevia julkaisuja on ladattavissa syksyllä 2013, ja Java 8 julkaistaan puolivälissäMaaliskuu 2014mukaisesti tiekartan esittämä OracleToukokuu 2013.
Yksi tämän version tärkeimmistä uusista ominaisuuksista on lambdojen lisääminen , mikä johtaa API: n osan, erityisesti kokoelmien ja stream- käsitteen, suunnitteluun . Muita merkittäviä lisäyksiä ovat vaihtoehdot, oletustoteutukset käyttöliittymässä, päivämäärän sovellusliittymän uudelleensuunnittelu ja paljon muuta. Toisaalta Enterprise Edition -versiota (Java 8 EE) ei odoteta ennen vuotta 2017.
Alun perin tälle versiolle suunniteltu JVM: n modifiointi Jigsaw- projektilla lykätään osaksi versiota 9, erityisesti Java 6: n kohtaamien tietoturva-aukkojen takia, jotka Oracle halusi korjata vuonna 2013 Java-kehitykseen nähden.
Java SE 9Alun perin suunniteltu vuodelle 2015, mutta sitä lykättiin osittain Jigsaw-projektin vuoksi, tämä versio julkaistiin lopulta 21. syyskuuta 2017.
Java 9 integroi:
Tämä versio julkaistiin 20. maaliskuuta 2018.
Tämä uusi versio sisältää erityisesti:
Tämä versio julkaistiin 25. syyskuuta 2018.
Pitkäaikaisen version tukimallin muutoksen lisäksi tämä versio sisältää erityisesti:
Tämä versio julkaistiin 19. maaliskuuta 2019.
Tämä versio sisältää 8 kehitystä:
Tämä versio julkaistiin 17. syyskuuta 2019.
Tämä versio julkaistiin 17. maaliskuuta 2020
Tämä versio julkaistiin 15. syyskuuta 2020.
Java SE 16Tämä versio julkaistiin 16. maaliskuuta 2021.
Kun Java-kieli luotiin, päätettiin, että kielen on täytettävä viisi tavoitetta:
Ensimmäinen ominaisuus, olio (OO) ja puhekieli, viittaa kielen ohjelmointimenetelmään ja siihen, että Java-ohjelmassa kirjoitettu ohjelma on melko samanlainen kuin C ++: lla kirjoitettu ohjelma .
Vaikka on olemassa useita tulkintoja ilmaisun olio , keskeinen ajatus tämän tyyppisessä kehitys on, että eri tyyppistä dataa on suoraan liittyvät eri toiminnot, jotka voidaan suorittaa näitä tietoja. Seurauksena, data (kutsutaan ominaisuudet ) ja koodin sen manipuloinnin (kutsutaan menetelmät ) on yhdistetty yhdeksi kokonaisuudeksi kutsutaan Object Class . Koodi jakautuu loogisesti pieniin koherentteihin entiteetteihin ja on siten helpompi ylläpitää ja helpommin uudelleenkäytettävissä, olennaisesti modulaarinen.
Muut mekanismit, kuten perintö, mahdollistavat kaikkien omien ohjelmiensa aiemmin kirjoitettujen luokan ominaisuuksien hyödyntämisen edes tuntematta sen sisäistä toimintaa - näkee vain käyttöliittymän (kuvattu käyttöliittymä. Ominaisuudet ja menetelmät antamatta siihen liittyvää koodia) . Java kieltää käsityksen perinnöstä useilta vanhemmilta luokilta, elleivät ne ole rajapintoja.
In versio 1.5 kielen oli lisätty geneerisiä , joka on polymorfismi mekanismi samanlainen (mutta eri) ja C ++ kielen malleja tai OCaml functors . Geneeristen aineiden avulla on mahdollista ilmaista yksinkertaisemmalla ja turvallisemmalla tavalla (kirjoittamisen näkökulmasta) esineiden, kuten konttien (luettelot, puut jne.), Ominaisuudet: luettelotyyppiä pidetään sitten yleisesti verrattuna tyyppiin d ' luettelossa oleva objekti.
Tämä elementti lisää ohjelmien vankkuutta ja suorituskykyä, Garbage Collector kutsutaan säännöllisesti ja automaattisesti ohjelman suorituksen aikana. On usean prosessorin ja / tai multi-core järjestelmissä , tämä myös käyttää useita alhaisen prioriteetin kierteet , jotta voidaan häiritä ohjelman toteuttamiseen mahdollisimman vähän. Lisäksi ohjelmoija voi ehdottaa roskakorin suorittamista tarvittaessa System.gc () -menetelmällä .
Toistuva valitus kieliä, kuten C ++, on raskas tehtävä, kun muistinhallinta on ohjelmoitava manuaalisesti. C ++: ssa ohjelman luomaan objektiin luomiseen varattu muisti jaetaan, kun se tuhoutuu (esimerkiksi nimenomaisella kutsulla poisto- operaattorille ). Jos ohjelmoija unohtaa koodata kaupan sijainnin, tämä johtaa " muistivuotoon " ja ohjelma kuluttaa yhä enemmän. Vielä pahempaa on, että jos ohjelma pyytää virheellistä jakamista useita kertoja tai käyttää muistialueita pyydettyään jakamista, se todennäköisesti muuttuu epävakaaksi ja aiheuttaa kohtalokkaan virheen.
Java-sovelluksessa roskien keräys välttää monia näistä ongelmista . Jokaiselle luotavalle objektille vaadittavaa muistitilaa hallitaan tähän tarkoitukseen varattuun muistikoneeseen ( englanniksi : memory heap ). Ohjelma käyttää jokaista objektia kasan viitteen kautta. Kun esineeseen ei enää ole viitteitä, roskakorin tuhoaa se automaattisesti - koska siihen ei ole enää pääsyä - vapauttaa muistia ja estää siten muistivuodot.
Jätteenkerääjä käyttää koodaus- ja vapautusalgoritmia ( englanniksi : mark and sweep ) hallitessaan monimutkaisia tapauksia, joissa objektit viittaavat toisiinsa tai viittaavat silmukoihin ( luettelon kaksoisketjuesimerkki ). Käytännössä on edelleen ohjelmointivirheitä, joissa roskien keräilijä katsoo, että esine on edelleen hyödyllinen, kun taas ohjelma ei enää pääse siihen toiminnallisesti (mutta säilyttää viittauksen esineeseen), mikä muodostaa erityisen tapauksen " muistivuodosta ".
Jätteiden keruu tekee muistinhallinnasta huomattavasti helpompaa ja turvallisempaa. Ohjelmien tai kirjastojen suunnittelijoiden ja käyttäjien ei tarvitse huolehtia esineiden jakautumisesta ( poista operaattori C ++: ssa), paitsi suorituskykysyistä.
Alustan riippumattomuus tarkoittaa, että Java-ohjelmassa kirjoitetut ohjelmat toimivat hyvin samalla tavalla erilaisilla laitteistoarkkitehtuureilla. Sunin Java-lisenssi vaatii siten, että kaikkien toteutusten on oltava yhteensopivia. Teoriassa voimme siten kehittää tietyn arkkitehtuurin ja suorittaa lopullisen sovelluksen kaikille muille.
Tämä tulos saadaan:
Huomaa, että vaikka kääntämisen ensimmäinen vaihe on nimenomaisesti, Java-tavukoodi joko tulkitsee tai muuntaa lennossa kääntäjän lennossa natiivikoodiksi ( juuri ajoissa , JIT).
Kokoelmien tyypitKielen varhaiset toteutukset käyttivät tulkittua virtuaalikonetta siirrettävyyden saavuttamiseksi. Nämä toteutukset tuottivat ohjelmia, jotka suorittivat hitaammin kuin käännetyllä kielellä (C, C ++ jne.) Kirjoitetut, joten kieli kärsi maineesta heikosta suorituskyvystä.
Java Virtual Machine (JVM) uudemmat toteutukset tuottavat ohjelmia paljon nopeammin kuin aikaisemmin käyttäen erilaisia tekniikoita:
Kun Sun havaitsi, että Microsoftin toteutus ei tue RMI- ja JNI- rajapintoja ja että sillä oli alustakohtaisia elementtejä alkuperäiseen alustaansa verrattuna, Sun nosti kanteen Microsoftia vastaan ja sai vahingonkorvauksia (20 miljoonaa dollaria). Tämä oikeudenmukainen teko tiukensi edelleen Sunin lisenssin ehtoja. Vastauksena Microsoft keskeytti Java-tuen alustoillaan, ja Windows Explorerin uusimmissa versioissa Internet Explorer ei tue Java-sovelmia lisäämättä laajennuksia. Sun kuitenkin tarjoaa Java-ajonaikaiset ympäristöt ilmaiseksi saataville Microsoftin eri alustoille.
Siirrettävyys on teknisesti vaikeasti tavoitettavissa, ja Javan menestys tällä alalla on ollut vaihtelevaa. Vaikka Java-alustalle on todellakin mahdollista kirjoittaa ohjelmia, jotka toimivat hyvin monilla kohdekoneilla, suuri määrä alustoja, joissa on pieniä virheitä ja epäjohdonmukaisuuksia, ovat johtaneet Sunin iskulauseen " Kirjoita kerran, aja mihin tahansa " ( "Kirjoita kerran, aja mihin tahansa " ) " kirjoita kerran, viritä missä tahansa " ( " Kirjoita kerran, viritä missä tahansa " )!
Java-alustan riippumattomuus on kuitenkin onnistunut palvelinpuolen sovelluksilla, kuten verkkopalvelut, servletit ja Java Beans, sekä sulautetuilla järjestelmillä OSGi: ssä Embedded Java -ympäristön avulla .
Java-alusta oli yksi ensimmäisistä järjestelmistä, joka tarjosi tukea koodin suorittamiseen etälähteistä. Sovelma voi ajaa käyttäjän verkkoselaimen , suorittaa koodia ladataan peräisin HTTP -palvelin . Appletin koodi toimii hyvin rajoittavassa tilassa, joka suojaa käyttäjää vääriltä tai haitallisilta koodeilta. Tämä tila on rajattu objektilla, jota kutsutaan suojauksenhallinnaksi . Tällainen objekti on olemassa myös paikalliskoodille, mutta oletusarvoisesti se ei ole aktiivinen.
Suojauksenhallinnan ( SecurityManager- luokan ) avulla voit määrittää tietyn määrän valtuutuksia paikallisen järjestelmän resurssien (tiedostojärjestelmä, verkko, järjestelmän ominaisuudet jne.) Käyttöä varten. Valtuutuksessa määritellään:
Applet-toimittajat voivat pyytää varmenteen , jotta he voivat allekirjoittaa appletin digitaalisesti turvallisena, mikä antaa heille (asianmukaisella valtuutuksella) luvan poistua rajoittavasta tilasta ja käyttää paikallisia järjestelmäresursseja.
Tässä on esimerkki tyypillisen Hello world ohjelma Javalla:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } }Lähdetiedostossa on melkein aina luokan nimi, jonka tunniste on ".java" (tässä "HelloWorld.java", se olisi jopa pakollista, koska luokan ilmoituksessa on julkinen attribuutti - jolloin se on kaikkien muiden käytettävissä) . Voimme kääntää ja suorittaa tämän esimerkin terminaalissa seuraavilla komennoilla ( Linuxissa ):
javac HelloWorld.java export CLASSPATH=. java HelloWorldRivi “ export CLASSPATH =. Käytetään kertomaan Java: lle, että sen pitäisi myös etsiä luokan ohjelmia nykyisestä hakemistosta. Tämä polku voidaan määrittää myös käynnistettäessä ohjelmaa käyttämällä -classpath -vaihtoehtoa (tai lyhyesti -cp ):
java -cp. HelloWorldHuomautuksia:
( lähde )
Luokka on kuvaus tietojen kutsutaan ominaisuuksia, ja toiminnan kutsutaan menetelmiä. Tämä on määritelmämalli esineille, joilla on samat määritteet ja samat operaatiot. Luokasta voimme luoda yhden tai useamman objektin instantioimalla; kukin objekti on yhden luokan esiintymä .
Näkyvyys:
Määrite määritetään antamalla sen tyyppinen, niin sen nimi, ja mahdollisesti alustuksen osa.
Näkyvyys:
Menetelmä määritellään seuraavasti:
Näkyvyys:
Sukunimi | Koko tavuina laskelmien aikana | Oletusarvo | Mahdolliset arvot |
---|---|---|---|
looginen | Yksi bitti riittää, mutta varaamme usein tavun niiden tallentamiseen. | false | true, false |
tavu | 1 | 0 | kokonaislukuja välillä -128 ja +127 (-2 7 ja 2 7 -1) |
shortsit | 2 | 0 | kokonaisluvut välillä −32 768 ja 32 767 (-2 15 ja 2 15 -1) |
int | 4 | 0 | kokonaisluvut välillä −2 147483 648 ja +2 147483 647 (-2 31 ja 2 31 -1) |
pitkä | 8 | 0 | kokonaislukuja välillä -9 223 372 036 854 775 808 ja 9 223 372 036 854 775 807 (-2 63 ja 2 63 -1) |
säiliö | 2 | '\u0000' | Kaikki arvot Unicode (U-arvot + U + 0000 FFFF, 4 numeroa jälkeen tarvitaan '\u') ensimmäistä 128 merkkiä ovat ASCII-koodit ja huomautus heittomerkkien: 'a', '1', '\'', '\n'. |
kellua | 4 | 0.0 | Numerojoukko [−3,402823 47 × 10 38 .. −1,402398 46 × 10 −45 ], 0, [ 1,402398 46 × 10 −45 .. 3,402823 47 × 10 38 ] |
kaksinkertainen | 8 | 0.0 | Numerojoukko [−1,797 693 134 862 315 70 × 10 308 .. −4 940 656 458 412 465 44 × 10 −324 ], 0, [4940 656 458 412 465 44 × 10 −324 .. 1797 693 134 862 315 70 × 10,308 ] |
Esine | Virtuaalikoneesta riippuvainen | null |
Yllä olevassa taulukossa luetellaan perustyypit, mutta Java-ohjelmassa on muita tyyppejä, jotka ovat objekteja ja joita käytetään sellaisenaan. Esimerkiksi kokonaisluvun määrittelemiseksi voimme käyttää tyyppiä 'Kokonaisluku', jonka alustusarvo oletuksena onnull
Muuttujan instantisoimiseksi syntaksin (tässä sama kuin C: ssä) on seuraava:
NomDuType maVariable;myVariable varataan sitten pinoon.
Usein on tarpeen tallentaa paljon tietoa kokoelmiin: ostoslista, opiskelijoiden muistiinpanot jne. Kokoelmia voidaan tarkastella, muokata, lajitella, kopioida, poistaa jne. Niillä voi olla kiinteä tai vaihteleva koko.
Kiinteäkokoiset kokoelmat ovat kevyempiä kuin erikokoiset kokoelmat.
Kiinteäkokoiset kokoelmatAbstrakti luokka AbstractListon tarkoitettu vaihtelevan kokoisten kokoelmien toteuttamiseen.
ArrayListin alustamiseksi sinun on tuotava luokka java.util.ArrayListja kirjoitettava liste = new ArrayList<T>();tai liste = new ArrayList<>(); JDK 7.0: sta.
JDK 1.5: sta lähtien meillä on mahdollisuus ilmoittaa ArrayList-elementin tyypit: kokonaisluvut, merkkijonot tai muut objektit.
Voit lisätä elementin, jonka kirjoitamme liste.add(Objet);
ArrayList-elementin käyttäminen: liste.get(index);
Luettelon sisältämien elementtien lukumäärän selvittäminen: liste.size();
Elementin poistaminen: liste.remove(index);Poistettua elementtiä seuraavat elementit siirtyvät vasemmalle.
Vaikka kaikilla on samanlainen rooli, jokaisella silmukalla on kuitenkin mukautettu tilanteeseen:
Huomaa : on mahdollista yhdistää ehdot (Boolen lausekkeet) käyttämällä lisäoperaattoreita: looginen "AND" && (käsky suoritetaan, jos kaikki ehdot täyttyvät):
On myös looginen "OR" || (käsky suoritetaan, jos ainakin yksi ehdoista täyttyy):
if (<condition 1> || <condition 2>) { instruction(s) si au moins une des deux est vraie }Lopuksi on looginen "EI" ! jonka avulla voit kääntää ehdon tuloksen.
Nämä toiminnot on mahdollista yhdistää monimutkaisten ehdollisten rakenteiden saamiseksi. Voit lisätä sulkeita määrittelemään ehtojen prioriteetit (kuten laskutoimituksissa). Muissa tapauksissa JVM suorittaa eri tarkistukset vasemmalta oikealle.
Kommenttien suorittamisen valinta määräytyy kytkimen seuraavasta lausekkeesta, jonka tyyppi voi olla kokonaisluku ( int , char , tavu tai lyhyt tai vastaavat kirjekuoriluokat), luetellut ( enum ) tai String (merkkijono, vain Java 7).
Huomautus: " ehdollinen operaattori tai kolmen komponentin operaattori ? : voi välttää ehdollisen lauseen käytön. Ehdollisella lausekkeella on joko arvo Boolen ehdon testaamisen jälkeen:
<expression booléenne> ? <valeur si vrai> : <valeur si faux> Ehdoton yhteysLopulta koodieston toteutetaan riippumatta tuloksen, kun ohjelma poistuu try-catch lohko .
Tässä on esimerkki poikkeuksen saamisesta:
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(); }Tämä esimerkki kuvaa Java: n poikkeusmekanismia. Siinä tapauksessa, että tulo / lähtö-virhe yrittää lohkon , suoritus jatkuu että saalis lohkossa Tätä tilannetta vastaava (lukuun ottamatta tyyppiä IOException ).
Tässä saalislohkossa muuttuja e viittaa tapahtuneeseen poikkeukseen. Tässä käytämme printStackTrace () -menetelmää, joka näyttää konsolissa tietoja tapahtuneesta poikkeuksesta: nimi, syy, puhelupinon tila, kun poikkeus heitettiin, ja valinnaisesti myös linjanumero, missä virhe tapahtui.
Lopuksi lohko on sitten suoritetaan (tässä sulkemaan käytetyt resurssit). Tämä on vain esimerkki, toimenpide, joka suoritetaan poikkeuksen tapahtuessa, riippuu sovelluksen yleisestä toiminnasta ja poikkeuksen luonteesta.
Yleiset tyypitYleistä tyyppiä kutsutaan muuten malliksi, se käyttää yhtä tai useampaa muuta tyyppiä argumentteina. Parametrina lähetetty tyyppi määritetään instantisaation aikana.
Tämä antaa mahdollisuuden välttää suoratoistoja erityisesti ArrayLists-kontekstissa.
public class ArrayList<E> { ArrayList<String> al = new ArrayList<String>(); }Näitä yleisiä tyyppejä käytetään vain kokoamisajankohtana, ei suoraan tavukoodissa.
Ero C ++: n kanssa C ++: n mallit kopioivat luokan kullekin tyypille. Java toisaalta toimii kokoamisajankohtana ikään kuin olisimme kopioineet näiden luontaisten tyyppien luokat, mutta itse asiassa käsittelemme vain yhtä luokkaa.
LähdekoodausJava-kielimäärityksissä määritetään, että se muodostuu UTF-16- muodossa olevista merkeistä , mikä sallii kaikkien maailmassa olevien merkkien käytön lähdekoodissa:
public class HelloWorld { private String text = "hello world"; }Alustojen välisen siirrettävyyden varmistamiseksi luokkien nimien tulisi kuitenkin koostua vain ASCII- merkeistä .
Operaattori | Tarkoitus |
---|---|
== | Yhtä (ei pidä sekoittaa = mikä on määritysoperaattori) |
! = | Eri |
< | Huonompi |
> | Superior |
<= | Pienempi tai yhtä suuri |
> = | Suurempi tai yhtä suuri kuin |
JavaStyle ovat Sunin määrittelemiä Java-kielen ohjelmointikäytäntöjä. Tiukkojen käytäntöjen noudattaminen varmistaa yhdenmukaisuuden koko tiimin kehittämän sovelluksen lähdekoodissa ja edistää lähdekoodin jakelua yhteisölle, jolla on samat koodauskäytännöt.
Alempi camelcase käytetään nimiä menetelmien ja muuttujia.
Sun tarjoaa suuren määrän kehyksiä ja sovellusliittymiä, joiden avulla Java voidaan käyttää monenlaisiin käyttötarkoituksiin.
Pääasiassa on neljä pääkehystä :
Pysyvyys perustuu standardeihin:
Javalle on kuitenkin olemassa monia muita tekniikoita, sovellusliittymiä ja valinnaisia laajennuksia:
Ohjelmointi voidaan tehdä komentokehotteesta käynnistämällä Java-kääntäjä (usein nimeltään javac ), mutta mukavuuden vuoksi on parempi käyttää integroitua kehitysympäristöä tai IDE: tä (joka mahdollistaa kokoamisen automaattisesti), jotkut ovat ilmaisia. Esimerkiksi :
Java-ohjelma voidaan tuottaa työkaluilla, jotka automatisoivat rakennusprosessin (ts. Joidenkin tehtävien automatisointi, johon liittyy mahdollisesti suuri määrä riippuvuuksia, kuten kirjaston käyttö, kokoaminen, arkistojen luominen, dokumentaatio, käyttöönotto jne.). Käytetyimmät ovat:
Tulokset:
% scons -Q javac -d classes -sourcepath src src/Exemple1.java src/Exemple2.java src/Exemple3.java jar cf test.jar classes