Java (programmeringsspråk)

Java
Utvikler(e)
James Gosling og Sun Microsystems
https://www.oracle.com/java/ og https://www.java.com/
Generell informasjon
Vanlige utvidelser java, klasse, jar, jad og jmod
Paradigme Objektorientert , imperativ
Dukket opp i nitten nittiseks
Designet av Sun Microsystems ( Oracle Corporation )
Siste stabile versjon Java Standard Edition 18.0.1.1 [ 1 ] ​( 2. mai 2022 (5 måneder og 13 dager))
type system sterk , statisk
implementeringer OpenJDK , HotSpot og mange andre
dialekter Generisk Java, Pizza
påvirket av Pascal , C++ , Objective-C
har påvirket C# , J# , JavaScript , PHP , Python
Operativsystem Multiplattform
Tillatelse GNU GPL / Java Community Process

Java er et programmeringsspråk og en dataplattform som først ble kommersialisert i 1995 av Sun Microsystems . Det er mange applikasjoner og nettsteder som sannsynligvis ikke vil fungere med mindre de har Java installert, og flere blir opprettet hver dag. Java er raskt, sikkert og pålitelig. Fra bærbare datamaskiner til datasentre, fra spillkonsoller til avanserte datamaskiner, fra mobiltelefoner til Internett , Java er overalt. Hvis den kjører på en plattform, trenger den ikke å rekompileres for å kjøre på en annen. Java er fra og med 2012 et av de mest populære programmeringsspråkene som er i bruk, spesielt for nettklient-serverapplikasjoner , med rapporterte ti millioner brukere. [ 2 ]​ [ 3 ]

Java-programmeringsspråket ble opprinnelig utviklet av James Gosling fra Sun Microsystems (inkorporert i 1983 og senere kjøpt opp 27. januar 2010 av Oracle -selskapet ), [ 4 ] og publisert i 1995 som en grunnleggende komponent i Java-plattformen fra Sun Microsystems . Syntaksen er i stor grad avledet fra C og C ++ , men den har færre lavnivåverktøy enn begge. Java-applikasjoner kompileres til bytekode (Java-klasse), som kan kjøres på hvilken som helst Java Virtual Machine (JVM) uavhengig av den underliggende datamaskinarkitekturen .

The Sun Company utviklet den originale referanseimplementeringen for Java- kompilatorer , virtuelle maskiner og klassebiblioteker i 1991, og publiserte dem først i 1995. Fra mai 2007, i samsvar med Community Process-spesifikasjonene Java, relisensierte Sun de fleste av Java-teknologiene sine under GNU General Public License . Andre har også utviklet alternative implementeringer av disse Sun-teknologiene, for eksempel GNU Java Compiler og GNU Classpath .

Historikk

Java ble opprettet som et programmeringsverktøy for bruk i et set-top-boks- prosjekt i en liten operasjon kalt Green Project hos Sun Microsystems i 1991. The Green Team , bestående av tretten personer og ledet av James Gosling , jobbet i 18 måneder på Sand Hill Road i Menlo Park for å utvikle den.

Språket ble opprinnelig kalt Oak (etter et eiketre utenfor Goslings kontor), deretter omdøpt til Green etter at det ble oppdaget at Oak allerede var et registrert varemerke for grafikkortadaptere, og til slutt omdøpt til Java .

Det besøkes av noen av teammedlemmene. Men det er ikke klart om det er et akronym eller ikke, selv om noen kilder indikerer at det kan være initialene til designerne: James Gosling , Arthur Van Hoff og Andy Bechtolsheim . Andre tar til orde for følgende akronym, Just Another Vague Acronym ( " bare enda et tvetydigt akronym") . Den sterkeste hypotesen er at Java skylder navnet sitt til en type kaffe som er tilgjengelig i den nærliggende kafeteriaen; derfor er Java-ikonet en kopp varm kaffe. Et lite tegn som gir styrke til denne teorien er at de første fire bytene (det magiske tallet ) av .class-filene som kompilatoren genererer, er i heksadesimal, 0xCAFEBABE. Til tross for alle disse teoriene, ble navnet tilsynelatende hentet fra en tilfeldig liste med ord. [ 5 ]

Goslings mål var å implementere en virtuell maskin og språk med en struktur og syntaks som ligner på C++ . Mellom juni og juli 1994, etter en tre-dagers maratonøkt mellom John Gage, James Gosling, Patrick Naughton, Wayne Rosing og Eric Schmidt, refokuserte teamet plattformen på nettet. De følte at ankomsten av nettleseren Mosaic ville gjøre det mulig for Internett å bli et interaktivt medium, omtrent som det de trodde kabel-TV var. Naughton opprettet deretter en prototype-nettleser, WebRunner, senere kjent som HotJava .

I 1994 ble HotJava og Java-plattformen demonstrert for Sun -ledere . Java 1.0a kunne lastes ned for første gang i 1994, men det var ikke før 23. mai 1995, under SunWorld-konferansene, at Java og HotJava, nettleseren, ble utgitt. Arrangementet ble annonsert av John Gage, den vitenskapelige direktøren for Sun Microsystems. Handlingen ble ledsaget av en liten ekstra overraskelse, kunngjøringen fra Marc Andreessen, konserndirektør for Netscape, om at Java ville bli støttet i nettleserne. 9. januar året etter, 1996, grunnla Sun forretningsgruppen JavaSoft for å håndtere teknologiutvikling. [2] To uker senere ble den første versjonen av Java utgitt.

Goslings første løfte var Write Once, Run Anywhere , som ga et gratis, lett plattformuavhengig språk og kjøretidsmiljø ( JVM ) for de mest populære plattformene, slik at binærfiler (bytekode) av Java-applikasjoner kunne kjøres på hvilken som helst plattform.

Runtime-miljøet var relativt sikkert, og store nettlesere la snart til muligheten til å kjøre innebygde Java- appleter på nettsider.

Java har sett en rekke endringer siden den opprinnelige utgivelsen, JDK 1.0, samt en enorm økning i antall klasser og pakker som utgjør standardbiblioteket. [ 6 ]

Versjoner

Siden J2SE 1.4 har utviklingen av språket blitt regulert av JCP ( Java Community Process ), som bruker Java Specification Requests (JSR) for å foreslå og spesifisere endringer i Java-plattformen. Selve språket er spesifisert i Java Language Specification (JLS), eller Java Language Specification. JLS-endringer administreres i JSR 901 .

void displayWidgets ( Iterable < Widget > widgets ) { for ( Widget w : widgets ) { w . display (); } }

Dette eksemplet itererer over objektet Iterable widgets, tilordner, i rekkefølge, hvert av elementene til variabelen w, og kaller metoden display()for hver av dem. (Spesifisert av JSR 201.)

  • Java SE 6 ( 11. desember 2006 ) — Kodenavnet Mustang . Den var under utvikling under JSR 270 . I denne utgivelsen ga Sun nytt navn til "J2SE" til Java SE og droppet ".0" fra versjonsnummeret. [4] Den er tilgjengelig på http://java.sun.com/javase/6/ . De viktigste endringene som er introdusert i denne versjonen er:
    • Den inkluderer et nytt rammeverk og APIer som gjør det mulig å kombinere Java med dynamiske språk som PHP, Python, Ruby og JavaScript.
    • Den inkluderer Mozillas Rhino-motor, en implementering av Javascript i Java.
    • Den inkluderer en komplett Web Services-klient og støtter de nyeste Web Services-spesifikasjonene som JAX-WS 2.0, JAXB 2.0, STAX og JAXP.
    • Forbedringer i det grafiske grensesnittet og ytelsen.
  • Java SE 7 — Kodenavn Dolphin . I 2006 var det fortsatt i de tidlige planleggingsstadiene. Lanseringen var i juli 2011.
    • Støtte for XML i selve språket.
    • Et nytt konsept med superpakke.
    • Støtte for stenginger .
    • Introduksjon av standardmerknader for å oppdage feil i programvaren.
  • Uoffisiell:
    • OLJE2.
    • Java-modulsystem.
    • Java kjerne.
    • Ny API for håndtering av dager og datoer, som vil erstatte de gamle dato- og kalenderklassene.
    • Evne til å operere med BigDecimal-klasser ved å bruke operander.
  • Java SE 8 – Utgitt mars 2014. Bemerkelsesverdig:
    • Den inneholder fullt ut JavaFX-biblioteket.
    • Ulike sikkerhetsforbedringer.
    • Ulike forbedringer i samtidighet.
    • Legger til funksjonalitet for funksjonell programmering ved hjelp av Lambda-uttrykk.
    • Forbedrer JavaScript-integrasjon.
    • Nye APIer for å administrere datoer og klokkeslett (dato - klokkeslett).
  • Java SE 9 — Utgitt 21. september 2017.
  • Java SE 10 – Utgitt 20. mars 2018.
  • Java SE 11 — Utgitt 25. september 2018.
  • Java SE 12 – Utgitt 19. mars 2019.
  • Java SE 15 — Utgitt 15. september 2020.
  • Java SE 16 – utgitt 18. mars 2021. [ 7 ]
  • Java SE 17 — utgitt 14. september 2021. Den vil bli støttet minst frem til september 2024, da det er en LTS-versjon (Long Term Support).
  • Java SE 18 – utgitt 22. mars 2022. [ 8 ]


I 2005 ble antallet utviklere og 2,5 milliarder enheter aktivert med Java-teknologi estimert til 4,5 millioner.

Filosofi

Java-språket ble opprettet med fem hovedmål:

  1. Den bør bruke det objektorienterte programmeringsparadigmet.
  2. Det bør tillate kjøring av det samme programmet på flere operativsystemer.
  3. Det bør inkludere nettverksstøtte som standard.
  4. Den bør være utformet for å kjøre kode trygt på eksterne systemer.
  5. Det skal være enkelt å bruke og ta det beste fra andre objektorienterte språk, som C++.

For å oppnå ekstern kjøring av kode og nettverksstøtte, tyr Java-programmerere noen ganger til utvidelser som henholdsvis CORBA (Common Object Request Broker Architecture), Internet Communications Engine eller OSGi .

Objektorientert

Se også: Objektorientert språk og Objekt (programmering) .

Den første funksjonen, objektorientert ("OO"), refererer til en programmeringsmetode og språkdesign. Selv om det er mange tolkninger for OO, er en første idé å designe programvaren på en slik måte at de forskjellige datatypene den bruker er knyttet til driften. Dermed blir data og kode (funksjoner eller metoder) kombinert til enheter kalt objekter . Et objekt kan sees på som en pakke som inneholder "atferd" (kode) og "tilstand" (data). Prinsippet er å skille det som endrer seg fra det som forblir uendret. Ofte innebærer endring av en datastruktur en endring i koden som opererer på den, eller omvendt. Denne separasjonen i sammenhengende og uavhengige objekter gir et mer stabilt grunnlag for utformingen av et programvaresystem. Målet er å gjøre store prosjekter enkle å administrere og administrere, og dermed forbedre kvaliteten og redusere antallet mislykkede prosjekter.

Et annet av de store løftene med objektorientert programmering er opprettelsen av mer generiske enheter (objekter) som tillater gjenbruk av programvare mellom prosjekter, en av de grunnleggende premissene til Software Engineering. Et generisk «kunde»-objekt, for eksempel, bør i teorien ha samme sett av atferd på tvers av ulike prosjekter, spesielt når de overlapper hverandre til en viss grad, noe som ofte er tilfelle i store organisasjoner. I denne forstand kan objekter sees på som gjenbrukbare deler som kan brukes i flere forskjellige prosjekter, og dermed gjøre det mulig for programvareindustrien å bygge store prosjekter ved å bruke eksisterende komponenter av dokumentert kvalitet, noe som til slutt fører til en drastisk reduksjon i utviklingstiden. Vi kan bruke aluminium som eksempel på en gjenstand. Når definerte data (tetthet, formbarhet, etc.), og dens "atferd" (sveising av to deler, etc.), kan "aluminium"-objektet gjenbrukes innen konstruksjon, bil, luftfart, etc. .

Gjenbruk av programvare har opplevd blandede resultater, og har møtt to hovedvansker: utformingen av virkelig generiske objekter er dårlig forstått, og en metodikk for bred kommunikasjon av gjenbruksmuligheter mangler. Noen "open source"-samfunn ønsker å hjelpe med dette problemet ved å gi utviklere et middel til å spre informasjon om bruken og allsidigheten til gjenbrukbare objekter og objektbiblioteker.

Plattformuavhengighet

Den andre funksjonen, plattformuavhengighet, betyr at programmer skrevet på Java-språket kan kjøre like godt på alle typer maskinvare. Dette er meningen med å kunne skrive et program én gang og få det til å kjøre på hvilken som helst enhet, som Java-aksiomet sier, "skriv en gang, kjør hvor som helst" .

For å gjøre dette, kompileres kildekoden skrevet på Java-språket for å generere en kode kjent som "bytecode" (spesielt Java-bytecode), forenklede maskininstruksjoner som er spesifikke for Java-plattformen. Dette stykket er "halvveis" mellom kildekoden og maskinkoden som målenheten forstår. Bytekoden kjøres deretter i den virtuelle maskinen (JVM), et program skrevet i kode som er native til målplattformen (som er det maskinvaren din forstår), som tolker og kjører koden. I tillegg er det gitt ekstra biblioteker for å få tilgang til funksjonene til hver enhet (som grafikk, tråding, nettverksgrensesnitt) på en enhetlig måte. Det bør huskes at selv om det er et eksplisitt kompileringsstadium, blir den genererte bytekoden tolket eller konvertert til maskininstruksjoner for den opprinnelige koden av JIT (Just In Time) kompilatoren.

Det finnes Java-kompilatorimplementeringer som konverterer kildekoden direkte til innfødt objektkode, for eksempel GCJ . Dette eliminerer midtstadiet der bytekoden genereres, men utdataene fra disse kompilatortypene kan bare kjøres på én type arkitektur.

Suns Java-lisens insisterer på at alle implementeringer skal være "kompatible". Dette førte til en juridisk tvist mellom Microsoft og Sun , da sistnevnte hevdet at Microsofts implementering ikke støttet RMI- og JNI-grensesnittene og la til funksjoner som var ''plattformavhengige''. Sun saksøkte Microsoft og vant erstatning (omtrent $20 millioner), samt et påbud som håndhever Suns lisens . Som svar tilbyr Microsoft ikke Java med sin versjon av operativsystemet, og i nyere versjoner av Windows støtter ikke Internet Explorer-nettleseren å kjøre appleter uten en separat kobling (eller plugin). Sun og andre kilder tilbyr imidlertid gratisversjoner for forskjellige versjoner av Windows.

Tidlige implementeringer av språket brukte en tolket virtuell maskin for portabilitet. Resultatet var imidlertid programmer som kjørte relativt langsommere enn de som ble skrevet i C eller C++. Dette førte til at Java fikk et rykte for treg ytelse. Nylige implementeringer av JVM resulterer i programmer som kjører betydelig raskere enn eldre versjoner, ved hjelp av ulike teknikker, mens de fortsatt er mye tregere enn andre språk.

Den første av disse teknikkene er å ganske enkelt kompilere direkte til innfødt kode som tradisjonelle kompilatorer gjør, og eliminere bytekodestadiet. Dette resulterer i god ytelse under kjøring, men blokkerer veien til portabilitet. En annen teknikk, kjent som Just In Time (JIT) kompilering, konverterer bytekoden til innebygd kode når applikasjonen kjører. Andre mer sofistikerte virtuelle maskiner bruker en "dynamisk rekompilering" der VM er i stand til å analysere oppførselen til det kjørende programmet og rekompilere og optimalisere de kritiske delene. Dynamisk rekompilering kan oppnå en høyere grad av optimalisering enn tradisjonell (eller statisk) kompilering, siden den kan basere sitt arbeid på førstehåndskunnskap om utførelsesmiljøet og settet med klasser som er lastet inn i minnet. JIT-kompilering og dynamisk rekompilering lar Java-programmer dra nytte av utførelseshastigheten til innfødt kode uten å miste portabilitetsfordelen til noen av dem.

Portabilitet er teknisk vanskelig å oppnå, og Javas suksess innen portabilitet har vært blandet. Selv om det faktisk er mulig å skrive programmer for Java-plattformen som fungerer korrekt på flere plattformer med forskjellige arkitekturer, fører det store antallet av disse med mindre feil eller inkonsekvenser til Suns slagord , " Skriv én gang, kjør hvor som helst ", for eksempel "Skriv". en gang, feilsøk overalt" (eller "Skriv det én gang, kjør det hvor som helst" for "Skriv det én gang, feilsøk det overalt").

Konseptet med Java-plattformuavhengighet er imidlertid svært vellykket i applikasjoner i servermiljøet, som Web Services, Servlets, Java Beans, så vel som i innebygde systemer basert på OSGi , som bruker miljøer Java Embedded.

Søppelsamleren

Se også: Søppelsamler

I Java er problemet med minnelekkasjer stort sett unngått takket være automatisk søppelsamler . Programmereren bestemmer når objektene opprettes, og Java runtime-miljøet er ansvarlig for å administrere livssyklusen til objektene. Programmet, eller andre objekter, kan ha et objekt lokalisert ved en referanse til det. Når det ikke er noen referanser til et objekt, sletter Java-søppelsamleren objektet, og frigjør dermed minnet det okkuperte, og forhindrer mulige lekkasjer (eksempel: et objekt opprettet og kun brukt innenfor en metode har bare en enhet i seg; når du avslutter metoden objektet fjernes). Likevel er minnelekkasjer mulig hvis koden din lagrer referanser til objekter som ikke lenger er nødvendige; det vil si at de fortsatt kan forekomme, men på et høyere konseptuelt nivå. Alt i alt gir Java Garbage Collector enkel oppretting og sletting av objekter og bedre sikkerhet.

Syntaks

Java-syntaks er i stor grad avledet fra C++ . Men i motsetning til Java, som kombinerer generisk, strukturert og objektorientert programmeringssyntaks, ble Java bygget fra grunnen av for å være fullstendig objektorientert. Alt i Java er et objekt (med noen få unntak), og alt i Java ligger i en eller annen klasse (husk at en klasse er en mal som ulike objekter kan lages fra).

I motsetning til C++ har ikke Java operatøroverbelastning [ 9 ] eller multippel arv for klasser , selv om multippel arv er tilgjengelig for grensesnitt .

Frittstående applikasjoner

Dette eksemplet trenger en liten forklaring.

  • Alt i Java er i en klasse, inkludert frittstående programmer.
  • Kildekoden lagres i filer med samme navn som klassen de inneholder og med filtypen ".java". En klasse ( class) erklært offentlig ( public) må følge denne konvensjonen. Hvis vi har en klasse kalt Hola, må kildekoden lagres i filen "Hello.java".
  • Kompilatoren genererer en klassefil (med filtypen ".class") for hver av klassene som er definert i kildefilen. En anonym klasse behandles som om dens navn var sammenkoblingen av det omsluttende klassenavnet, "$"-symbolet og et heltall.
  • Programmer som kjører uavhengig og autonomt må inneholde ”main()”.
  • Det reserverte ordet ”void”indikerer at hovedmetoden ikke returnerer noe.
  • Hovedmetoden må godta en rekke objekter av typen String. Etter avtale omtales det som ”args”, selv om enhver annen identifikator kan brukes.
  • Det reserverte ordet ”static”indikerer at metoden er en klassemetode , assosiert med klassen i stedet for med en forekomst av den. Hovedmetoden må være statisk eller ''of class''.
  • Det reserverte ordet publicbetyr at en metode kan kalles fra andre klasser, eller at klassen kan brukes av klasser utenfor hierarkiet til selve klassen. Andre typer tilgang er ”private”eller ”protected”.
  • Utskriftsverktøyet (på skjermen for eksempel) er en del av Java-standardbiblioteket: '''System'''-klassen definerer et statisk offentlig felt kalt '''out'''. Objektet outer en forekomst av '''PrintStream''', som gir '''println (String)'''-metoden for å sende ut data til skjermen (standard utdata).
  • Frittstående applikasjoner kjøres ved å gi Java runtime-miljøet navnet på klassen hvis hovedmetode skal kalles. For eksempel vil en kommandolinje (på Unix eller Windows ) i skjemaet java –cp . Holakjøre eksempelprogrammet (tidligere kompilert og generert "Hello.class"). Navnet på klassen hvis hovedmetode kalles kan også spesifiseres i "MANIFEST"-filen til Java-pakkearkivet (.jar).

Applets

Java-appleter er programmer som er innebygd i andre applikasjoner, vanligvis en nettside som vises i en nettleser.

// Hello.java import javax.swing.JAApplet ; importer java.awt.Graphics ; offentlig klasse Hallo utvider JApplet { offentlig ugyldig maling ( Grafikk g ) { g . drawString ( "Hei verden!" , 65 , 95 ); } } <!-- Hello.html --> < html > < head > < title > Applet Hello Conch. </ title > </ head > < body > < applet code = "Hello.class" width = "200" height = "200" > </ applet > </ body > </ html >

For øyeblikket har HTML 5 fjernet bruken av <applet>-taggen. Men det er fortsatt en måte å bruke det på i HTML5. (Tekst på engelsk) Java-applets i HTML5.

Uttalelsen forteller Java-kompilatoren å inkludere java.applet-import klassene . Applet og java.awt. Grafikk , slik at du kan referere til dem ved navn, uten å måtte legge inn hele banen hver gang du vil bruke dem i kildekoden.

Klassen Holastrekker seg ( extends) til klassen Applet;, det vil si at den er en underklasse av den. Klassen Appletlar applikasjonen vise og kontrollere appletens tilstand. Klassen Appleter en komponent av AWT ( Abstract Window Toolkit ), som lar appleten vise et grafisk brukergrensesnitt eller GUI (Graphical User Interface), og svare på hendelser generert av brukeren.

Klassen Holaoverbelaster malingsmetoden (grafikk) som er arvet fra den inneholdende superklassen ( Appleti dette tilfellet), for å få tilgang til koden som er ansvarlig for tegningen. Metoden paint()mottar et objekt Graphicssom inneholder grafikkkonteksten for å tegne appleten. Metoden paint()kaller objektets drawString(String, int, int) metode. [5]

Servlets

Servlets er Java EE-serverkomponenter som er ansvarlige for å generere svar på forespørsler mottatt fra klienter.

// Hello.java import java.io.IOException ; import javax.servlet.* ; public class Hello utvider GenericServlet { public void service ( ServletRequest request , ServletResponse response ) kaster ServletException , IOException { response . setContentType ( "tekst/html" ); PrintWriter pw = respons . getWriter (); p w . println ( "Hei verden!" ); p w . lukk (); } }

Uttalelsene importforteller Java-kompilatoren å inkludere alle offentlige klasser og grensesnitt fra java.io- og javax.servlet -pakkene i bygget.

extend Hola( extends)-klassen er en arving av GenericServlet -klassen . Denne klassen gir grensesnittet for serveren for å sende forespørsler til servleten og mekanismen for å kontrollere livssyklusen til servleten.

Klassen Holaoverbelaster tjenesten (ServletRequest, ServletResponse) metoden , definert av servlet -grensesnittet, for å få tilgang til tjenesteforespørselsbehandleren. Metoden service()mottar et objekt av typen ServletRequest som inneholder forespørselen fra klienten og et objekt av typen ServletResponse , som brukes til å generere svaret som returneres til klienten. Metoden service()kan gi ( ) unntak av typen ServletExceptionthrows og IOException hvis en slags anomali oppstår.

Metoden setContentType (String) på responsobjektet setter MIME-innholdstypen til "text/html", for å indikere for klienten at svaret på forespørselen er en HTML-formatert side. GetWriter ()- metoden til responsobjektet returnerer et objekt av typen PrintWriter , brukt som et rør som dataene skal gå gjennom til klienten. Println (String) -metoden skriver ut strengen "Hello, world!" i svaret og til slutt kalles close()- metoden for å lukke forbindelsen, noe som fører til at data som er skrevet til røret eller strømmen returneres til klienten.

Brukte applikasjoner

Swing er det avanserte grafiske brukergrensesnittbiblioteket for Java SE-plattformen.

// Hello.java import javax.swing.* ; public class Hello utvider JFrame { Hello () { setDefaultCloseOperation ( WindowConstants . DISPOSE_ON_CLOSE ); add ( ny JLabel ( "Hei verden!" )); pakke (); } public static void main ( String [] args ) { new Hello (). setVisible ( sann ); } }

Instruksjonene importforteller Java-kompilatoren å inkludere klassene og grensesnittene i javax.swing - pakken i bygget.

Klassen Holautvider ( extends) javax.swing.JFrame -klassen , som implementerer et vindu med en tittellinje og en kontroll for å lukke den.

Konstruktøren Hola()initialiserer rammen ved å kalle setDefaultCloseOperation (int) metoden arvet fra JFrame for å sette standardoperasjonene når lukkekontrollen i tittellinjen er valgt til verdien WindowConstants.DISPOSE_ON_CLOSE. Dette fører til at ressursene som tas av vinduet frigjøres når det lukkes, og ikke bare skjules, noe som gjør at den virtuelle maskinen og programmet kan fullføre kjøringen. Et objekt av typen JLabel med teksten "Hello world!" blir deretter opprettet og lagt til rammen ved å bruke add (Component) -metoden , arvet fra Container -klassen . Pack() - metoden , arvet fra Window -klassen , kalles for å dimensjonere vinduet og legge ut innholdet.

Metoden main()kalles av JVM i begynnelsen av programmet. Lag en forekomst av klassen Holaog få vinduet til å vises ved å kalle setVisible(boolean) -metoden til superklassen (klassen den arver fra) med parameteren satt til true. Merk at når rammen er tegnet, avsluttes ikke programmet når metoden avsluttes main(), siden koden den er avhengig av er i en egen utførelsestråd som allerede er lansert, og vil forbli aktiv til alle vinduer er ødelagt. .

Driftsmiljøer

Javas design, robusthet, bransjestøtte og enkle portabilitet har gjort Java til et av de raskest voksende og mest brukte språkene i dataindustrien.

På mobile enheter og innebygde systemer

Siden opprettelsen av J2ME (Java 2 Platform, Micro Edition) spesifikasjonen, en svært optimalisert versjon av det reduserte Java runtime-miljøet spesielt utviklet for forbrukerelektronikkmarkedet, har det vært en revolusjon innen Java-utvidelse.

Mikroprosessorer designet for å kjøre Java bytecode og Java-programvare kan bli funnet for smartkort (JavaCard), mobiltelefoner, personsøkere, set-top-bokser, TV-tunere og andre små apparater.

Utviklingsmodellen for disse applikasjonene er veldig lik nettleserappleter , bortsett fra at de i dette tilfellet kalles MIDlets .

Se Sun Mobile Device Technology

I nettleseren

Siden den første versjonen av Java har det vært mulighet for å utvikle små applikasjoner ( Applets ) i Java som deretter kan bygges inn i en HTML-side for å lastes ned og kjøres av nettleseren. Disse appletene kjører på en JVM som nettleseren har konfigurert som en plug-in i en konfigurerbar begrenset sikkerhetskontekst for å forhindre lokal kjøring av potensielt skadelig kode.

Suksessen til denne typen applikasjoner (visjonen til Gosling-teamet) var egentlig ikke det som var forventet på grunn av flere faktorer, kanskje den viktigste var tregheten og den lave båndbredden til kommunikasjonen på den tiden, som begrenset størrelsen på applikasjonene .-appleter som var innebygd i nettleseren. Den påfølgende fremkomsten av andre alternativer (dynamiske server-webapplikasjoner) etterlot et redusert bruksområde for denne teknologien, og er i dag fundamentalt henvist til spesifikke komponenter for formidling fra en dynamisk server-webapplikasjon med enheter plassert på klientmaskinen der den kjøres. Navigator.

Java- appleter er ikke de eneste teknologiene (selv om de er de første) av komplekse komponenter som er innebygd i nettleseren. Andre lignende teknologier kan være: Microsoft ActiveX , Flash , Java Web Start , etc.

På serversystemer

På serversiden er Java mer populær enn noen gang siden fremkomsten av Servlets og JSP ( Java Server Pages )-spesifikasjonen.

Inntil da var eksisterende dynamiske webapplikasjoner på serversiden primært basert på CGI -komponenter og tolkede språk. Begge hadde forskjellige ulemper (fundamentalt langsom, høy beregnings- eller minnebelastning og utsatt for feil på grunn av deres dynamiske tolkning).

Servlets og JSP-er representerte et viktig fremskritt siden:

  • Programmerings - APIet er veldig enkelt, fleksibelt og utvidbart.
  • Servlets er ikke uavhengige prosesser (som CGI-er) og kjører derfor innenfor samme prosess som JVM, noe som forbedrer ytelsen betydelig og reduserer beregnings- og minnebelastningen som kreves.
  • JSP-er er sider som er dynamisk kompilert (eller forhåndskompilert før distribusjon) slik at den resulterende koden har en betydelig ytelsesfordel i forhold til mange tolkede språk.

Servlets og JSP-spesifikasjonen definerer et programmerings-API og krav til en beholder (server) der disse komponentene kan distribueres for å danne komplette dynamiske webapplikasjoner. I dag er det mange beholdere (gratis og kommersielle) som er kompatible med disse spesifikasjonene.

Fra utvidelsen blant utviklerfellesskapet har disse teknologiene gitt plass til mye mer forseggjorte utviklingsmodeller med rammeverk (f.eks . Struts , Webwork ) som er lagt over servlets og JSP-er for å oppnå et mye kraftigere og mer effektivt arbeidsmiljø. Segmentert i hvilken rollespesialisering er mulig (utviklere, grafiske designere,...) og det legges til rette for kodegjenbruk og robusthet. Til tross for alt dette er de underliggende teknologiene (Servlets og JSP) stort sett de samme.

Denne arbeidsmodellen har blitt en av de facto -standardene for utvikling av dynamiske webserverapplikasjoner.

I skrivebordsapplikasjoner

I dag finnes det mange grafiske brukerapplikasjoner basert på Java. Java Runtime Environment (JRE) har blitt en vanlig komponent på bruker-PCer for de mest brukte operativsystemene i verden. Mange Java-applikasjoner inkluderer det også i selve applikasjonspakken, slik at de kjører på hvilken som helst PC .

I tidlige versjoner av Java-plattformen var det betydelige begrensninger i de grafiske utviklings-APIene ( AWT ). Siden Swing -biblioteket dukket opp, har situasjonen forbedret seg betydelig og senere, med utseendet til biblioteker som SWT , gjør de utviklingen av komplekse skrivebordsapplikasjoner med stor dynamikk, brukervennlighet, etc. være relativt enkel.

Støttede plattformer

En versjon av Java Runtime Environment ( JRE ) er tilgjengelig på de fleste stasjonære datamaskiner. Microsoft har imidlertid ikke inkludert det som standard i sine operativsystemer. Når det gjelder Apple , inkluderer den sin egen versjon av JRE i operativsystemet, Mac OS . Det er også et standardprodukt som vises i de fleste GNU/Linux-distribusjoner . På grunn av inkompatibilitet mellom forskjellige versjoner av JRE, foretrekker mange applikasjoner å installere sin egen kopi av JRE i stedet for å stole på skjebnen til applikasjonen som er installert som standard. Java-appletutviklere bør enten insistere på at brukere oppdaterer JRE, eller utvikle under en eldre versjon av Java og bekrefte at den fungerer riktig på senere versjoner.

Programmering

Uttrykk

Uttrykk er et sett med elementer eller tokens sammen med bokstaver som blir evaluert for å returnere et resultat. Tokens er det minste elementet i et program som er betydelig, og tolket eller forstått av kompilatoren, i Java er tokens delt inn i fem kategorier som er:

Identifikatorer: De er representasjonene som er gitt til navnene som er tilordnet variabler, klasser, pakker, metoder og konstanter i Java-koden slik at kompilatoren kan identifisere dem og programmereren kan forstå dem. I Java kan identifikatorene skille mellom store og små bokstaver fordi de er store og små bokstaver , så variabelen hvis navn er "Myvariable", er ikke lik "myvariable", siden Java identifiserer disse som forskjellige variabler fordi de er store og små bokstaver sensitive . er også kan du bruke tall eller "_"-tegnet for å tilordne en identifikator.

Nøkkelord: De er identifikatorene reservert av java for å oppfylle et spesifikt mål i koden og kompilatoren, de brukes på en begrenset måte og i spesifikke tilfeller. Nøkkelordene som brukes av Java er følgende:

abstrakt boolsk gå i stykker byte sak
å fange røye klasse Fortsette misligholde
gjøre dobbelt ellers strekker falsk
endelig til slutt flyte til hvis
redskaper saken tilfelle av int grensesnitt
lang innfødt ny null pakker
privat beskyttet offentlig komme tilbake shorts
statisk super bytte om synkronisert Este
kaste kaster flyktig ekte prøve
tomrom flyktige samtidig som var hvile
etterverdi rollebesetning bygge framtid generisk
gå til innsiden operatør ytre

Ordene i fet skrift er nøkkelord for Java, selv om de for øyeblikket ikke brukes i Java-versjonen, men er ment å integreres i følgende Java-versjoner.

Bokstaver og konstanter: Bokstaver er syntaks for å tilordne verdier til en variabel, det vil si verdien som en variabel kan ta, det er også en konstant verdi som kan være av en numerisk type. Konstanter er variabler som har en fast verdi og som ikke kan endres i løpet av kodeutførelse, de er deklarert ved å bruke de endelige og statiske modifikatorene.

endelig statisk dobbel pi = 3,1416 ;

Operatører: Det er de som indikerer en evaluering som brukes på et objekt eller data, på en identifikator eller konstant. Et eksempel på operatorer kan være addisjon, subtraksjon eller multiplikasjon.

Separatorer: De brukes til å indikere for Java-kompilatoren hvor elementene i koden er plassert, skilletegnene som Java støtter er: { },:;

Java-kompilatoren identifiserer og fjerner kommentarer, vognretur og tomme mellomrom på kompileringstidspunktet, slik at de ikke anses som en del av et token.

Uttrykk kan være en sekvensert kombinasjon av variabler, operatorer og metoder. Uttrykk brukes til å utføre beregninger, tilordne verdier til variabler eller for å kontrollere utførelsen av programflyten.

Operatører

De er Java-uttrykk som returnerer et resultat etter å ha utført en operasjon. Avhengig av antall operander som en operatør håndterer, kan den være av to typer: unær eller binær.

Unære operatorer er de som bare trenger én operand for å returnere en verdi.

Operatør Beskrivelse
- skifte av skilt
! IKKE operatør
~ 1s komplement

Binære operatorer er de som krever to eller flere operander for å returnere en verdi.

operatører Beskrivelse
+ - * / % Aritmetiske operatorer
== != < > <= >= relasjonsoperatører
&& || ^boolske operatorer
^ << >> >>> Bitvise operatører
+ strengsammenkobling
Bitvise operatorer

eksisterer ikke

~ Komplement til 1 , denne operatoren inverterer sifrene, endrer 0 med 1 og 1 med 0, et eksempel kan være:

11001011 ~11001011 resultat 00110100

Som du kan se, endres verdiene fra 0 til 1 og fra 1 til 0.

& AND på bitnivået utfører denne operatoren en OG eller addisjonsoperasjon mellom to bittall, der hvis to biter er lik 1 vil resultatet være 1, ellers vil det være 0, et eksempel kan være:

situasjon 01001101 & 10011011 _______________ 00001001

| Eller på bitnivået utfører denne operatoren en ELLER-operasjon der hvis noen av de to tallene er 1 vil resultatet være 1, et eksempel kan være:

11001101 | 01011101 _______________ 11011101

^ XOR på bitnivå , denne operatoren utfører XOR-operasjonen der hvis de to tallene er like vil resultatet være 0 ellers blir det 1, et eksempel kan være:

00101001 ^01101101 _______________ 01000100

<< Skift til venstre , denne operatoren flytter n antall mellomrom en bit til venstre, et eksempel kan være;

01101110 01101110 << 1 = 11011100

Som du kan se når du utfører skiftet, settes inn et siffer 0 til høyre

Operatørprioritet

Operatører er en hoveddel av uttrykk, type og bruksform er essensielt ved programmering, men for deres bruk må det tas hensyn til en rekke regler, for eksempel operatørers forrang.

Operatørene henrettes i henhold til deres prioritet: hvis de har en høyere prioritet vil de bli evaluert før de med lavere prioritet; hvis det ved en tilfeldighet er operatører med samme prioritetsnivå, vil de bli evaluert fra høyre til venstre; og hvis de er binære operatorer (minus tilordningsoperatorer) vil de bli evaluert fra venstre til høyre. Java kan bli fortalt hvilke operatører som skal evalueres først uavhengig av deres forrang ved hjelp av parenteser "( )", på denne måten tolker Java-kompilatoren at den først må utføre operasjonene inne i parentesene, og deretter fortsette med de andre operatørene.

Følgende tabell klassifiserer operatørene som brukes i Java i henhold til deres prioritetsnivå, med topp som det høyeste nivået:

Type operatører operatører
Postfix-operatører [ ] . ( parametere) expr++ expr--
unære operatører ++expr --expr +expr -expr ~ !
Oppretting eller konvertering Ny (type) uttr
Multiplikasjon *
Inndeling/
resten av divisjonen%
Addisjon +
Subtraksjon-
Forskyvning << >> >>>
Sammenligning < > <= >= forekomst av
Likestilling == !=
Bitvis OG &
bitvis ELLER |
Bitvis XOR ^
logisk OG &&
logisk ELLER ||
Betinget ? :
Oppdrag = += -= *= /= %= &= ^= |= <<= >>= >>>=

Et eksempel på forrangen til operatører i Java kan være følgende, der vi har en kode som vil være ansvarlig for å utføre en rekke aritmetiske operasjoner :

int tall1 = 3 ; int tall2 = 4 ; int resultat ; resultat = tall1 + tall2 * 3 ; System . ut . println ( resultat ); //dette skriver ut verdien på 15

Avhengig av forrangen til operatorene, har multiplikasjonen "*" høyere prioritet enn addisjonen "+", så multiplikasjonen utføres først og deretter blir addisjonen utført.

int tall1 = 3 ; int tall2 = 4 ; int resultat ; resultat = ( tall1 + tall2 ) * 3 ; System . ut . println ( resultat ); //dette skriver ut verdien av 21

I dette tilfellet endres resultatet siden parametrene i parentesen evalueres først og deretter resten av parameterne evalueres. En av anbefalingene Java gir for utvikling er bruk av parenteser i operasjoner med mer enn 3 operander, på denne måten blir koden mer lesbar og man unngår feil ved kompilering.

Setninger

Utsagn er en representasjon av en sekvens av handlinger som utføres i Java. Den grunnleggende nøkkelen til setningene er deres siste punkt som indikerer at setningen er ferdig og kan fortsette med den neste, indikatoren som brukes er semikolon (;). I Java har vi utsagn som kan være tilordning, loop, hopp og betinget. Utsagn består vanligvis av en instans og en operatør; Et eksempel er tilordningssetningen som består av en forekomst av en variabel, tilordningstegnet og et uttrykk; et eksempel er:

int variabel = 12 + 2 ;

Tilordningssetninger er de der en verdi er tilordnet en variabel eller konstant. Betingede utsagn er de som uttrykker en betingelse for å definere utførelsesflyten til programmet; blant dem har vi hvis, annet og bytte. Loop-utsagn er ansvarlig for å utføre en handling i en gitt tidsperiode, eller til en betingelse er oppfylt; blant dem har vi mens, gjøre-mens og for. Jump-setninger tar kompilatoren til et bestemt punkt i programmet eller til neste utførelsessetning; blant dem har vi pause, fortsetter og kommer tilbake.

Typekonvertering

I noen tilfeller er det ofte nødvendig å konvertere en datatype til en annen, dette er kjent som typekonvertering, modellering eller typing, og dermed kunne utføre de nødvendige operasjonene på verdien som skal konverteres. Typen data som skal konverteres må tas i betraktning, siden hvis en data konverteres som har et mindre antall biter enn den forrige, vil den ha tap av informasjon, et eksempel på skriving kan være et langt tall som du ønsker for å konvertere til int, vil kompilatoren fjerne de første 32 bitene av longen for å passe den til int siden int er 32bit og long er 64. Hvis konverteringen er fra en datatype med lavere bit til en høyere bit datatype, er konverteringen gjøres automatisk kalt implisitt konvertering, men hvis det gjøres fra en datatype med en høyere bit til en lavere bit, må en eksplisitt konvertering gjøres, som gjøres med en casting, når denne metoden brukes, blir den tvunget til å utføre konverteringen Derfor kan det være tap av data i konverteringen. For å foreta en eksplisitt konvertering, må du sette typen data du vil foreta konverteringen mellom parentes, deretter verdien eller variabelen du vil konvertere. Et eksempel på eksplisitt typekonvertering kan være:

int tall1 = 32 ; byte nummer2 ; tall2 = ( byte ) tall1 ;

Et eksempel på en implisitt typekonvertering kan være:

int tall1 = 32 ; langt nummer2 ; tall2 = tall1 ;

Tabellen nedenfor viser datatypene som implisitt kan konverteres fra kildedataene til destinasjonsdataene, som er dataene som skal konverteres.

Opprinnelsestype destinasjonstype
byte dobbel, flyte, lang, int, røye, kort
shorts dobbel, flyte, lang, int
røye dobbel, flyte, lang, int
int dobbel, flyte, lang
lang dobbel, flyte
flyte dobbelt

Boolske datatyper kan ikke konverteres til en annen datatype, med noen metode nevnt ovenfor. Enhver annen type konvertering som ikke finnes i denne tabellen fra kilde til destinasjon må gjøres ved hjelp av en eksplisitt casting-konvertering. Når du vil konvertere fra en strengtype som kilde til en annen type, må du bruke en funksjon som er ansvarlig for å konvertere datatypen, den nødvendige funksjonen består av variabelen som skal lagre resultatet, og avhengig av variabelen parameteren brukes som starter med datatypen som skal konverteres, heltall, byte, kort eller lang, etterfulgt av et punktum ". ", som indikerer at attributtene til parameteren vil bli lastet, hvor vi vil laste inn parseInt hvis vi ønsker å konvertere til interger eller parseByte hvis vi ønsker å konvertere til byte, eller avhengig av datatypen, etterfulgt av parenteser hvor strengen verdi vil bli lagt til for å konvertere. Noen eksempler kan være:

int nummer1 ; langt nummer2 ; byte nummer3 ; Strengtekst = 2013 ; _ tall1 = Heltall . parseInt ( tekst ); nummer2 = lang . parseLong ( tekst ); nummer3 = Byte . parseByte ( tekst );

dette brukes ofte til å utføre en tekstkonvertering når numeriske verdier legges inn av en input til java, som oppdager dem som en streng, slik at du kan konvertere teksten du skriver inn til et tall for å utføre operasjoner, som en kalkulator.

Relatert industri

Sun Microsystem, som skaper av programmeringsspråket Java og JDK-plattformen, opprettholder sterke retningslinjer for å opprettholde en spesifikasjon av språket [ 10 ] så vel som den virtuelle maskinen [ 11 ] gjennom JCP. Det er på grunn av denne innsatsen at en de facto-standard opprettholdes.

Det er utallige selskaper som utvikler applikasjoner for Java og/eller er dedikert til denne teknologien: [ 12 ]

Kritikk

I 1995 sa noen [ hvem? ] at Java ble opprettet for å åpne en ny vei i administrasjonen av kompleks programvare, og det er generelt akseptert at det har oppført seg bra i denne forbindelse. Det kan imidlertid ikke sies at Java er feilfri og fullstendig tilpasningsdyktig til alle programmeringsstiler, alle miljøer eller alle behov.

Generelt

  • Java har ikke gitt standardfunksjoner for aritmetikk med flyttall. IEEE 754- standarden for " Standard for Binary Floating Point Arithmetic" dukket opp i 1985, og har vært industristandarden siden den gang. Og selv om Javas flytende aritmetikk (som endret seg siden 13. november 2006, da kildekoden ble åpnet og GPL -lisensen ble tatt i bruk , bortsett fra den allerede eksisterende) er [ referanse nødvendig ] [ 13 ] i stor grad basert på målt i IEEE-standarden , den støtter ikke enkelte funksjoner ennå. Mer informasjon om dette finner du i den siste delen om eksterne lenker.

Språket

  • I streng forstand er ikke Java et absolutt objektorientert språk, i motsetning til for eksempel Ruby eller Smalltalk . Av effektivitetsgrunner har Java noe avslappet det objektorienterte paradigmet, og for eksempel er ikke alle verdier objekter.
  • Java-kode kan noen ganger være overflødig sammenlignet med andre språk. Dette skyldes blant annet hyppige typedeklarasjoner og manuelle typekonverteringer (støping). Det er også fordi det ikke er noen overbelastede operatører tilgjengelig, og en relativt enkel syntaks. Imidlertid introduserer J2SE 5.0 ting for å prøve å redusere redundans, for eksempel en ny konstruksjon for '''foreach'''-løkker.
  • I motsetning til C++ har ikke Java brukerdefinerte overbelastningsoperatører. Designerne av Java tok denne avgjørelsen fordi de mente at denne funksjonen under visse omstendigheter kunne gjøre programmer vanskelige å lese og vedlikeholde.

Utseende

Det ytre utseendet ('''utseendet og følelsen''') til GUI (Graphical User Interface)-applikasjoner skrevet i Java ved bruk av Swing-plattformen, er ofte forskjellig fra det som vises av native applikasjoner. Selv om programmereren kan bruke AWT-verktøysettet (Abstract Windowing Toolkit) som genererer opprinnelige plattformgrafikkobjekter, er ikke AWT i stand til avanserte grafikkfunksjoner uten å ofre portabilitet på tvers av plattformer; siden hver har et annet sett med APIer, spesielt for grafiske objekter på høyt nivå. Swing-verktøy, skrevet utelukkende i Java, unngår dette problemet ved å bygge grafikkobjektene fra grunnleggende tegnemekanismer som bør være tilgjengelige på alle plattformer. Ulempen er det ekstra arbeidet som kreves for å få samme utseende og følelse på målplattformen. Selv om dette er mulig (ved å bruke GTK+ og Windows Look-and-Feel), vet de fleste brukere ikke hvordan de skal endre utseendet som leveres som standard til et som passer plattformen.

Ytelse

Java-bytekode kan tolkes ved kjøretid av den virtuelle maskinen, eller kompileres når programmet lastes, eller under selve kjøringen, for å generere innfødt kode som kjøres direkte på maskinvaren. Hvis det tolkes, vil det være tregere enn å bruke den iboende maskinkoden til målplattformen. Hvis den er kompilert, under innledende lasting eller utførelse, er straffen i tiden det tar å gjennomføre kompileringen.

Noen funksjoner i selve språket har en tidsstraff, selv om de ikke er unike for Java. Noen av dem er kontroll av matrisegrenser, kontroll av kjøretidstype og indirektion av virtuelle funksjoner .

Å bruke en søppeloppsamler for å automatisk fjerne unødvendige gjenstander legger til overhead som kan påvirke ytelsen, eller være ubetydelig, avhengig av teknologien til oppsamleren og den spesielle applikasjonen. Moderne JVM-er bruker søppelsamlere som, takket være raske minnebehandlingsalgoritmer, får noen applikasjoner til å kjøre mer effektivt.

Ytelsen mellom en JIT-kompilator og native kompilatorer kan være lik, selv om skillet ikke er klart på dette tidspunktet. Kompilering ved hjelp av JIT kan være tidkrevende, en ulempe hovedsakelig for kortvarige applikasjoner eller applikasjoner med store mengder kode. Men når det først er kompilert, kan ytelsen til programmet være sammenlignbar med den som oppnås av native kompilatorer av målplattformen, selv i numeriske oppgaver. Selv om Java ikke tillater manuell utvidelse av metodekall, utfører mange JIT-kompilatorer denne optimaliseringen under applikasjonsbelastning og kan utnytte informasjon fra kjøretidsmiljøet for å utføre effektive transformasjoner under selve applikasjonskjøringen. Denne dynamiske rekompileringen, slik som den som leveres av Suns virtuelle HotSpot-maskin, kan potensielt utkonkurrere tradisjonelle statiske kompilatorer, takket være data som kun er tilgjengelig under kjøring.

Java ble designet for sikkerhet og portabilitet, og gir ikke direkte tilgang til arkitekturmaskinvare eller adresserom. Java støtter ikke utvidelse av monteringskode , selv om applikasjoner kan få tilgang til funksjoner på lavt nivå ved å bruke native biblioteker (JNI, Java Native Interfaces).

Java-funksjoner:

1. Enkelt språk: «Det er kjent som et enkelt språk fordi det kommer fra samme struktur som c og c++; siden c++ var en referanse for opprettelsen av java, er det derfor den bruker visse egenskaper til c++ og andre har blitt eliminert.»

2. Objektorientert.

3. Multithreading: Java har en mulighet til å oppfylle flere funksjoner samtidig, takket være sin multithreading-funksjon, siden for hver tråd som programmet har, vil mange funksjoner bli utført i sanntid samtidig.

Høy ytelse: Java regnes som høy ytelse fordi det er så raskt når du kjører programmer og fordi det sparer mange linjer med kode.

Ressurser

JRE

JRE ( Java Runtime Environment, eller Java Runtime Environment) er programvaren som trengs for å kjøre ethvert program utviklet for Java-plattformen. Sluttbrukeren bruker JRE som en del av programvarepakker eller plugins (eller plugins) i en nettleser. Sun tilbyr også Java 2 SDK, eller JDK (Java Development Kit) som JRE ligger i, og inkluderer verktøy som Java-kompilatoren, Javadoc for å generere dokumentasjon eller debuggeren . Den kan også fås som en frittstående pakke, og kan betraktes som det nødvendige miljøet for å kjøre en Java-applikasjon, mens en utvikler også må ha andre fasiliteter som tilbys av JDK.

Komponenter

  • Java-biblioteker, som er et resultat av kompilering av kildekoden utviklet av JRE-implementatoren, og som gir støtte for Java-utvikling. Noen eksempler på disse bibliotekene er:
    • Sentralbibliotekene, som inkluderer:
    • Integrasjonsbiblioteker, som tillater kommunikasjon med eksterne systemer. Disse bibliotekene inkluderer:
      • API for tilgang til JDBC- databaser (Java DataBase Connectivity).
      • Java Naming and Directory Interface (JNDI) for katalogtjenester.
      • RMI (Remote Method Invocation) og CORBA for utvikling av distribuerte applikasjoner.
    • Biblioteker for brukergrensesnittet, inkludert:
      • AWT (Abstract Window Toolkit) native toolkit , som tilbyr GUI (Graphical User Interface) komponenter, mekanismer for å bruke dem og håndtering av tilhørende hendelser.
      • Swing Libraries , bygget på toppen av AWT, men tilbyr ikke-innfødte implementeringer av AWT-komponenter.
      • API for å fange, behandle og spille av lyd.
  • En plattformavhengig implementering av Java Virtual Machine (JVM), som er ansvarlig for å utføre koden til eksterne applikasjoner og biblioteker.
  • Plugins eller koblinger som lar deg kjøre appleter i nettlesere.
  • Java Web Start, for distribusjon av Java-applikasjoner over Internett.
  • Dokumentasjon og lisens.

API

Sun definerer tre plattformer i et forsøk på å dekke ulike applikasjonsmiljøer. Dermed har den distribuert mange av sine APIer (Application Program Interface) slik at de tilhører hver av plattformene:

  • Java ME (Java Platform, Micro Edition) eller J2ME – rettet mot miljøer med begrensede ressurser, som mobiltelefoner, PDAer (Personal Digital Assistant), etc.
  • Java SE (Java Platform, Standard Edition) eller J2SE – for mellomtonemiljøer og arbeidsstasjoner. Her er den gjennomsnittlige brukeren plassert på en stasjonær PC.
  • Java Platform, Enterprise Edition (Java EE) eller J2EE – rettet mot distribuerte bedrifts- eller Internett-miljøer.

Klassene i Java API-ene er organisert i usammenhengende grupper kalt pakker . Hver pakke inneholder et sett med relaterte grensesnitt, klasser og unntak. Informasjon om pakkene som tilbys av hver plattform finner du i dokumentasjonen.

Settet med APIer kontrolleres av Sun Microsystems sammen med andre enheter eller personer gjennom JCP-programmet (Java Community Process). Bedrifter eller enkeltpersoner som deltar i JCP kan aktivt påvirke utformingen og utviklingen av APIer, noe som har vært en kilde til kontrovers.

Utvidelser og relaterte arkitekturer

Java -utvidelser [ 14 ]​ er i pakker som henger fra roten javax: javax.*. De er ikke inkludert i JDK eller JRE. Noen av utvidelsene og arkitekturene som er nært knyttet til Java-språket er:

  • Java EE (Java Platform, Enterprise Edition; tidligere J2EE) – for bedriftsorienterte distribuerte applikasjoner

Åpen kildekode Java

Utvalgsbasert utvikling som involverer alle interessenter er ikke nok, og fellesskapet har lenge krevd utgivelsen av kjernen JDK APIer og biblioteker.

I desember 2006 begynte Sun Microsystems re-utgivelsen av sin Java-plattform [ 15 ] under GNU GPL -lisensen .

I april 2009 kjøpte Oracle Sun Microsystems , noe som vekket frykt i samfunnet for mulig kommodifisering av dagens mest populære objektorienterte programmeringsspråk. Foreløpig har Oracle fortsatt å vedlikeholde Java, med versjoner etter 6 under sin kontroll.

En hjemmebrygget versjon av PSPKVM (0.5.5) er installert for å emulere Java-plattformen på PSP . Dette lar deg bruke JAVA-programmer på denne spillkonsollen.

Gratis alternativer

Det finnes alternativer til Java-utviklings- og kjøretidsmiljøet med bred dekning av funksjonalitet sammenlignet med kommersielle implementeringer fra Sun, IBM, Bea, etc.

Kritikk angående Java og fri programvare

Merk at denne artikkelen ble skrevet før Java-kildekodeutgivelsen. For øyeblikket har posisjonen til Free Software Foundation og Richard Stallman endret seg , begge er for bruk i fri programvare.

Se også

Referanser

Notater

  1. https://www.oracle.com/java/technologies/javase/18-0-1-relnotes.html
  2. ^ "Programmeringsspråkpopularitet" . 2009. Arkivert fra originalen 2009-01-16 . Hentet 16. januar 2009 . 
  3. ^ "TIOBE Programming Community Index" . 2009 . Hentet 6. mai 2009 . 
  4. Sun and Oracle (Oracle.com)
  5. "Jonathan Schwartz sin blogg: Annerledes er ikke alltid bedre, men bedre er alltid annerledes" . Blogs.sun.com. Arkivert fra originalen 5. september 2009 . Hentet 24. september 2010 . 
  6. M. Domínguez-Dorado,. All programmering. nr. 8. Sider. 39-42. Redaksjonell Iberprensa (Madrid). DL M-13679-2004. februar 2005. Tegning på lerret i Java. . 
  7. Oracle Staff, Oracle kunngjør Java 16 18. mars 2021.
  8. Versjonsmerknader [1]
  9. Microsoft (red.). "Operatoroverbelastning (C# og Java)" . C# for Java-utviklere . Hentet 21. juni 2018 . 
  10. Java-språkspesifikasjon
  11. Java Virtual Machine Specification
  12. madridiario.es. "Trening i Java-programmering fortsetter å lede når det gjelder studentenes etterspørsel" . Hentet 29. januar 2019 . 
  13. "En analyse av Java - Notes on Computer Engineering - Docsity" . www.docsity.com . Hentet 14. november 2018 . 
  14. M. Domínguez-Dorado, Guillermo Som. All programmering. nr. 11. Sider. 10-20. Redaksjonell Iberprensa (Madrid). DL M-13679-2004. August, 2005. Utskrift fra Java og .NET . 
  15. Sun begynner å gi ut Java under GPL - Free Software Foundation

Eksterne lenker

Oracle-Sun

Veiledninger

Kritikk