close

Java (programmeringssprog)

Gå til navigation Gå til søg
Java
Duke (Java-maskot) waving.svg
Udvikler(e)
James Gosling og Sun Microsystems
https://www.oracle.com/java/ og https://www.java.com/
Generel information
Almindelige udvidelser java, klasse, jar, jad og jmod
Paradigme Objektorienteret , bydende nødvendigt
Dukkede op i nitten seksoghalvfems
Designet af Sun Microsystems ( Oracle Corporation )
Seneste stabile version Java Standard Edition 18.0.1.1 [ 1 ] ​( 2. maj 2022 (5 måneder og 13 dage))
type system stærk , statisk
implementeringer OpenJDK , HotSpot og mange andre
dialekter Generisk Java, Pizza
påvirket af Pascal , C++ , Objective-C
har påvirket C# , J# , JavaScript , PHP , Python
Operativ system Multi platform
Licens GNU GPL / Java Community Process

Java er et programmeringssprog og computerplatform, der først blev kommercialiseret i 1995 af Sun Microsystems . Der er mange applikationer og websteder , der sandsynligvis ikke vil fungere, medmindre de har Java installeret, og flere bliver oprettet hver dag. Java er hurtigt, sikkert og pålideligt. Fra bærbare computere til datacentre, fra spilkonsoller til avancerede computere, fra mobiltelefoner til internettet , Java er overalt. Hvis det kører på én platform, behøver det ikke at blive kompileret igen for at køre på en anden. Java er fra 2012 et af de mest populære programmeringssprog i brug, især til webklient-server- applikationer , med rapporterede ti millioner brugere. [ 2 ]​ [ 3 ]

Java-programmeringssproget blev oprindeligt udviklet af James Gosling fra Sun Microsystems (indarbejdet i 1983 og senere erhvervet den 27. januar 2010 af Oracle- firmaet ), [ 4 ] og udgivet i 1995 som en grundlæggende komponent i Java-platformen fra Sun Microsystems . Dens syntaks er i vid udstrækning afledt af C og C++ , men den har færre hjælpeprogrammer på lavt niveau end begge. Java-applikationer er kompileret til bytekode (Java-klasse), som kan køre på enhver virtuel Java-maskine (JVM) uanset den underliggende computerarkitektur .

The Sun Company udviklede den originale referenceimplementering til Java- kompilere , virtuelle maskiner og klassebiblioteker i 1991 og udgav dem først i 1995. Fra maj 2007, i overensstemmelse med Community Process-specifikationerne Java, genlicenserede Sun de fleste af sine Java-teknologier under GNU General Public License . Andre har også udviklet alternative implementeringer af disse Sun-teknologier, såsom GNU Java Compiler og GNU Classpath .

Historie

Image
Duke, Javas maskot, vinker

Java blev skabt som et programmeringsværktøj til brug i et set-top-boks projekt i en lille operation kaldet Green Project hos Sun Microsystems i 1991. Det grønne team , bestående af tretten personer og ledet af James Gosling , arbejdede i 18 måneder på Sand Hill Road i Menlo Park for at udvikle den.

Sproget blev oprindeligt navngivet Oak (efter et egetræ uden for Goslings kontor), derefter omdøbt til Green efter det blev opdaget, at Oak allerede var et registreret varemærke for grafikkortadaptere, og til sidst omdøbt til Java .

Det er frekventeret af nogle af teammedlemmerne. Men det er ikke klart, om det er et akronym eller ej, selvom nogle kilder indikerer, at det kunne være initialerne på dets designere: James Gosling , Arthur Van Hoff og Andy Bechtolsheim . Andre går ind for følgende akronym, Just Another Vague Acronym ( " bare endnu et tvetydigt akronym") . Den stærkeste hypotese er, at Java skylder sit navn til en type kaffe, der er tilgængelig i det nærliggende cafeteria; derfor er Java-ikonet en kop varm kaffe. Et lille tegn, der giver styrke til denne teori, er, at de første fire bytes (det magiske tal ) af de .class-filer, som compileren genererer, er i hexadecimal, 0xCAFEBABE. På trods af alle disse teorier blev navnet tilsyneladende trukket fra en tilfældig liste af ord. [ 5 ]

Goslings mål var at implementere en virtuel maskine og et sprog med en struktur og syntaks svarende til C++ . Mellem juni og juli 1994, efter en tre-dages maraton-session mellem John Gage, James Gosling, Patrick Naughton, Wayne Rosing og Eric Schmidt, omfokuserede holdet platformen på nettet. De følte, at ankomsten af ​​Mosaic -webbrowseren ville gøre det muligt for internettet at blive et interaktivt medie, ligesom det, de troede, kabel-tv var. Naughton skabte derefter en prototypebrowser, WebRunner, senere kendt som HotJava .

I 1994 blev HotJava og Java-platformen demonstreret for Sun -ledere . Java 1.0a kunne downloades for første gang i 1994, men det var først den 23. maj 1995, under SunWorld-konferencerne, at Java og HotJava, webbrowseren, blev frigivet. Begivenheden blev annonceret af John Gage, den videnskabelige direktør for Sun Microsystems. Handlingen blev ledsaget af en lille ekstra overraskelse, meddelelsen fra Marc Andreessen, executive vice president for Netscape, om at Java ville blive understøttet i dets browsere. Den 9. januar det følgende år, 1996, grundlagde Sun forretningsgruppen JavaSoft til at håndtere teknologiudvikling. [2] To uger senere blev den første version af Java frigivet.

Goslings oprindelige løfte var Write Once, Run Anywhere , der leverede et gratis, let platformsuafhængigt sprog og runtime-miljø ( JVM ) til de mest populære platforme, så binære filer (bytekode) af Java-applikationer kunne køre på enhver platform.

Runtime-miljøet var relativt sikkert, og store webbrowsere tilføjede snart muligheden for at køre indlejrede Java- applets på websider.

Java har set adskillige ændringer siden dens oprindelige udgivelse, JDK 1.0, samt en enorm stigning i antallet af klasser og pakker, der udgør standardbiblioteket. [ 6 ]

Versioner

Siden J2SE 1.4 er udviklingen af ​​sproget blevet reguleret af JCP ( Java Community Process ), som bruger Java Specification Requests (JSR'er) til at foreslå og specificere ændringer til Java-platformen. Selve sproget er angivet i Java Language Specification (JLS) eller Java Language Specification. JLS-ændringer administreres i JSR 901 .

  • JDK 1.1 ( 19. februar 1997 ) — Større tilføjelser inkluderet: pressemeddelelse
    • en intensiv omstrukturering af AWT (Abstract Windowing Toolkit) begivenhedsmodellen
    • indre klasser
    • JavaBeans
    • JDBC (Java Database Connectivity), til databaseintegration
    • RMI (Remote Method Invocation)
  • J2SE 5.0 ( 30. september 2004 ) — Kodenavn: Tiger . (Oprindeligt nummereret 1.5, denne notation bruges stadig internt. [3] ) Udviklet under JSR 176 tilføjede Tiger et betydeligt antal nye funktioner pressemeddelelse
    • Skabeloner (generiske) — giver sikkerhed for kompileringstid til samlinger og eliminerer behovet for de fleste typer støbning . (Specificeret af JSR 14. )
    • Metadata — også kaldet annoteringer , tillader sprogstrukturer såsom klasser eller metoder at blive tagget med yderligere data, som kan behandles yderligere af metadatabehandlingsværktøjer. (Specificeret af JSR 175. )
    • Autoboxing /unboxing — Automatiske konverteringer mellem primitive typer (såsom int) og primitive wrapper-klasser (såsom heltal ). (Specificeret af JSR 201. )
    • Optællinger - nøgleordet enumopretter en typesikker , ordnet liste over værdier (såsom Dia.LUNES, Dia.MARTES, osv.). Tidligere kunne dette kun gøres ved hjælp af heltalskonstanter eller manuelt konstruerede klasser (enum-mønster). (Specificeret af JSR 201. )
    • Varargs (variabelt antal argumenter) — Den sidste parameter i en metode kan erklæres med typenavnet efterfulgt af et kolon (f.eks void drawtext(String... lines). ). I metodekaldet kan et hvilket som helst antal parametre af den type bruges, som vil blive lagret i et array, der skal videregives til metoden.
    • Forbedret looping for — Syntaksen for looping forer blevet udvidet med speciel syntaks til iteration over hvert medlem af et array eller over enhver klasse, der implementerer Iterable , såsom standard Collection -klassen , som følger:
 void  displayWidgets  ( Iterable < Widget >  widgets )  { 
     for  ( Widget  w  :  widgets )  { 
         w . display (); 
     } 
 }

Dette eksempel itererer over objektet Iterable widgetsog tildeler i rækkefølge hvert af elementerne til variablen wog kalder metoden display()for hver af dem. (Specificeret af JSR 201.)

  • Java SE 6 ( 11. december 2006 ) - Kodenavnet Mustang . Det var under udvikling under JSR 270 . I denne udgivelse omdøbte Sun "J2SE" til Java SE og droppede ".0" fra versionsnummeret. [4] Den er tilgængelig på http://java.sun.com/javase/6/ . De vigtigste ændringer introduceret i denne version er:
    • Det inkluderer et nyt framework og API'er, der gør det muligt at kombinere Java med dynamiske sprog som PHP, Python, Ruby og JavaScript.
    • Det inkluderer Mozillas Rhino-motor, en implementering af Javascript i Java.
    • Den inkluderer en komplet Web Services-klient og understøtter de nyeste Web Services-specifikationer såsom JAX-WS 2.0, JAXB 2.0, STAX og JAXP.
    • Forbedringer i den grafiske grænseflade og ydeevne.
  • Java SE 7 — Kodenavn Dolphin . I 2006 var det stadig i de tidlige planlægningsfaser. Den blev lanceret i juli 2011.
    • Understøttelse af XML i selve sproget.
    • Et nyt koncept af super pakke.
    • Støtte til lukninger .
    • Introduktion af standardannoteringer til at opdage fejl i softwaren.
  • Uofficiel:
    • OLIE2.
    • Java modul system.
    • Java-kerne.
    • Ny API til håndtering af dage og datoer, som erstatter de gamle dato- og kalenderklasser.
    • Evne til at operere med BigDecimal-klasser ved hjælp af operander.
  • Java SE 8 — Udgivet marts 2014. Bemærkelsesværdigt:
    • Det inkorporerer fuldt ud JavaFX-biblioteket.
    • Forskellige sikkerhedsforbedringer.
    • Forskellige forbedringer i samtidighed.
    • Tilføjer funktionalitet til funktionel programmering ved hjælp af Lambda-udtryk.
    • Forbedrer JavaScript-integration.
    • Nye API'er til styring af datoer og klokkeslæt (dato - tid).
  • Java SE 9 — Udgivet den 21. september 2017.
  • Java SE 10 — Udgivet 20. marts 2018.
  • Java SE 11 — Udgivet den 25. september 2018.
  • Java SE 12 — Udgivet 19. marts 2019.
  • Java SE 15 — Udgivet den 15. september 2020.
  • Java SE 16 — udgivet 18. marts 2021. [ 7 ]
  • Java SE 17 — udgivet den 14. september 2021. Det vil blive understøttet i det mindste indtil september 2024, da det er en LTS-version (Long Term Support).
  • Java SE 18 - udgivet 22. marts 2022. [ 8 ]


I 2005 blev antallet af udviklere og 2,5 milliarder enheder aktiveret med Java-teknologi anslået til 4,5 millioner.

Filosofi

Java-sproget blev skabt med fem hovedmål:

  1. Det bør bruge det objektorienterede programmeringsparadigme.
  2. Det bør tillade udførelse af det samme program på flere operativsystemer.
  3. Det bør inkludere netværksunderstøttelse som standard.
  4. Det skal være designet til at udføre kode sikkert på fjernsystemer.
  5. Det skal være nemt at bruge og tage det bedste fra andre objektorienterede sprog, såsom C++.

For at opnå fjernudførelse af kode og netværksunderstøttelse tyr Java-programmører nogle gange til udvidelser som henholdsvis CORBA (Common Object Request Broker Architecture), Internet Communications Engine eller OSGi .

Objektorienteret

Den første funktion, objektorienteret ("OO"), refererer til en programmeringsmetode og sprogdesign. Selvom der er mange fortolkninger for OO, er en første idé at designe softwaren på en sådan måde, at de forskellige typer data, den bruger, er knyttet til dens operationer. Således kombineres data og kode (funktioner eller metoder) til enheder kaldet objekter . Et objekt kan ses som en pakke, der indeholder "adfærd" (kode) og "tilstand" (data). Princippet er at adskille det, der ændrer sig, fra det, der forbliver uændret. Ændring af en datastruktur indebærer ofte en ændring i den kode, der opererer på den, eller omvendt. Denne adskillelse i sammenhængende og uafhængige objekter giver et mere stabilt grundlag for design af et softwaresystem. Målet er at gøre store projekter nemme at styre og administrere, og derved forbedre deres kvalitet og reducere antallet af fejlslagne projekter.

Et andet af de store løfter ved objektorienteret programmering er skabelsen af ​​mere generiske enheder (objekter), der tillader genbrug af software mellem projekter, en af ​​de grundlæggende forudsætninger for Software Engineering. Et generisk "kunde"-objekt bør for eksempel i teorien have det samme sæt adfærd på tværs af forskellige projekter, især når de overlapper hinanden til en vis grad, hvilket ofte er tilfældet i store organisationer. I denne forstand kan objekter ses som genanvendelige stykker, der kan bruges i flere forskellige projekter, hvilket gør det muligt for softwareindustrien at bygge store projekter ved hjælp af eksisterende komponenter af dokumenteret kvalitet, hvilket i sidste ende fører til en drastisk reduktion i udviklingstid. . Vi kan bruge aluminium som et eksempel på en genstand. Når først defineret data (densitet, formbarhed osv.) og dets "adfærd" (svejsning af to stykker osv.), kan "aluminium"-objektet genbruges inden for byggeri, biler, luftfart osv. .

Softwaregenbrug har oplevet blandede resultater og stødt på to hovedproblemer: Designet af virkelig generiske objekter er dårligt forstået, og en metodologi til bred kommunikation af genbrugsmuligheder mangler. Nogle "open source"-fællesskaber ønsker at hjælpe med dette problem ved at give udviklere et middel til at formidle information om brugen og alsidigheden af ​​genbrugelige objekter og objektbiblioteker.

Platformuafhængighed

Den anden funktion, platformsuafhængighed, betyder, at programmer skrevet på Java-sproget kan køre lige godt på enhver type hardware. Dette er meningen med at være i stand til at skrive et program én gang og få det til at køre på en hvilken som helst enhed, som Java-aksiomet lyder: "skriv én gang, kør hvor som helst" .

For at gøre dette kompileres kildekoden skrevet i Java-sproget for at generere en kode kendt som "bytecode" (specifikt Java-bytecode), forenklede maskininstruktioner, der er specifikke for Java-platformen. Dette stykke er "halvvejs" mellem kildekoden og maskinkoden, som målenheden forstår. Bytekoden udføres derefter i den virtuelle maskine (JVM), et program skrevet i kode, der er native til målplatformen (hvilket er, hvad din hardware forstår), som fortolker og eksekverer koden. Derudover leveres yderligere biblioteker for at få adgang til funktionerne på hver enhed (såsom grafik, trådføring, netværksgrænseflade) på en samlet måde. Det skal huskes, at selvom der er et eksplicit kompileringstrin, fortolkes eller konverteres den genererede bytekode til maskininstruktioner af den oprindelige kode af JIT (Just In Time) compileren.

Der er Java-compileringsimplementeringer, der konverterer kildekode direkte til indbygget objektkode, såsom GCJ . Dette eliminerer det midterste trin, hvor bytekoden genereres, men outputtet af disse typer af compilere kan kun køre på én type arkitektur.

Suns Java-licens insisterer på, at alle implementeringer er "kompatible". Dette førte til en juridisk tvist mellem Microsoft og Sun , da sidstnævnte hævdede, at Microsofts implementering ikke understøttede RMI- og JNI-grænsefladerne og tilføjede funktioner, der var ''platformafhængige''. Sun sagsøgte Microsoft og vandt erstatning (ca. $20 millioner) samt et påbud, der håndhævede Suns licens . Som svar tilbyder Microsoft ikke Java med sin version af operativsystemet, og i nyere versioner af Windows understøtter dens Internet Explorer-browser ikke at køre applets uden et separat stik (eller plugin). Sun og andre kilder tilbyder dog gratis versioner til forskellige versioner af Windows.

Tidlige implementeringer af sproget brugte en fortolket virtuel maskine til portabilitet. Resultatet var imidlertid programmer, der kørte forholdsvis langsommere end dem, der var skrevet i C eller C++. Dette fik Java til at få et ry for langsom ydeevne. Nylige implementeringer af JVM resulterer i programmer, der kører betydeligt hurtigere end ældre versioner, ved hjælp af forskellige teknikker, mens de stadig er meget langsommere end andre sprog.

Den første af disse teknikker er simpelthen at kompilere direkte i native kode, som traditionelle compilere gør, hvilket eliminerer bytecode-stadiet. Dette resulterer i stor ydeevne under kørsel, men blokerer vejen til portabilitet. En anden teknik, kendt som Just In Time (JIT) kompilering, konverterer bytekoden til indbygget kode, når applikationen kører. Andre mere sofistikerede virtuelle maskiner bruger en "dynamisk rekompilering", hvor VM'en er i stand til at analysere det kørende programs adfærd og genkompilere og optimere de kritiske dele. Dynamisk rekompilering kan opnå en højere grad af optimering end traditionel (eller statisk) kompilering, da den kan basere sit arbejde på førstehåndskendskab til eksekveringsmiljøet og det sæt af klasser, der er indlæst i hukommelsen. JIT-kompilering og dynamisk genkompilering gør det muligt for Java-programmer at drage fordel af eksekveringshastigheden af ​​indbygget kode uden at miste portabilitetsfordele ved nogen af ​​dem.

Portabilitet er teknisk vanskeligt at opnå, og Javas succes inden for portabilitet har været blandet. Selvom det faktisk er muligt at skrive programmer til Java-platformen, der fungerer korrekt på flere platforme med forskellige arkitekturer, fører det store antal af disse med mindre fejl eller uoverensstemmelser til Suns slagord , " Skriv én gang, kør hvor som helst ", såsom "Skriv". once, debug everywhere" (eller "Skriv det én gang, kør det hvor som helst" for "Skriv det én gang, fejlret det overalt").

Konceptet med Java-platformsuafhængighed er dog meget vellykket i applikationer i servermiljøet, såsom Web Services, Servlets, Java Beans, såvel som i indlejrede systemer baseret på OSGi , der bruger miljøer Java Embedded.

Skraldesamleren

I Java er problemet med hukommelseslækager stort set undgået takket være den automatiske skraldopsamler . Programmøren bestemmer, hvornår objekterne oprettes, og Java-runtime-miljøet er ansvarligt for at styre objekternes livscyklus. Programmet eller andre objekter kan have et objekt placeret ved en reference til det. Når der ikke er nogen referencer til et objekt, sletter Java garbage collector objektet, og frigør dermed den hukommelse, det optog, hvilket forhindrer mulige lækager (eksempel: et objekt, der er oprettet og kun brugt inden for en metode, har kun en entitet i sig; når metoden afsluttes objektet fjernes). Alligevel er hukommelseslækager mulige, hvis din kode gemmer referencer til objekter, der ikke længere er nødvendige; det vil sige, at de stadig kan forekomme, men på et højere begrebsmæssigt niveau. Alt i alt giver Java Garbage Collector mulighed for nem oprettelse og sletning af objekter og bedre sikkerhed.

Syntaks

Java-syntaks er stort set afledt af C++ . Men i modsætning til Java, der kombinerer generisk, struktureret og objektorienteret programmeringssyntaks, blev Java bygget fra bunden til at være fuldstændig objektorienteret. Alt i Java er et objekt (med få undtagelser), og alt i Java ligger i en eller anden klasse (husk at en klasse er en skabelon, hvorfra forskellige objekter kan oprettes).

I modsætning til C++ har Java ikke operatøroverbelastning [ 9 ] eller multipel nedarvning for klasser , selvom multipel nedarvning er tilgængelig for grænseflader .

Standalone applikationer

Dette eksempel har brug for en lille forklaring.

  • Alt i Java er inde i en klasse, inklusive selvstændige programmer.
  • Kildekoden gemmes i filer med samme navn som den klasse, de indeholder og med filtypenavnet ".java". En klasse ( class) erklæret offentlig ( public) skal følge denne konvention. Hvis vi har en klasse kaldet Hola, skal dens kildekode gemmes i filen "Hello.java".
  • Compileren genererer en klassefil (med endelsen ".class") for hver af klasserne defineret i kildefilen. En anonym klasse behandles, som om dens navn var sammenkædningen af ​​det omsluttende klassenavn, "$"-symbolet og et heltal.
  • Programmer, der kører uafhængigt og selvstændigt, skal indeholde ”main()”.
  • Det reserverede ord ”void”angiver, at hovedmetoden ikke returnerer noget.
  • Hovedmetoden skal acceptere en række objekter af typen String. Efter aftale omtales det som ”args”, selvom enhver anden identifikator kan bruges.
  • Det reserverede ord ”static”angiver, at metoden er en klassemetode , der er forbundet med klassen i stedet for med en forekomst af den. Hovedmetoden skal være statisk eller ''af klasse''.
  • Det reserverede ord publicbetyder, at en metode kan kaldes fra andre klasser, eller at klassen kan bruges af klasser uden for klassens hierarki. Andre former for adgang er ”private”eller ”protected”.
  • Udskrivningsværktøjet (på skærmen for eksempel) er en del af Java-standardbiblioteket: '''System'''-klassen definerer et statisk offentligt felt kaldet '''out'''. Objektet outer en forekomst af '''PrintStream''', som giver '''println (String)'''-metoden til at udlæse data til skærmen (standard output).
  • Stand-alone applikationer udføres ved at give Java runtime-miljøet navnet på den klasse, hvis hovedmetode skal kaldes. For eksempel vil en kommandolinje (på Unix eller Windows ) af formularen java –cp . Holakøre eksempelprogrammet (tidligere kompileret og genereret "Hello.class"). Navnet på den klasse, hvis hovedmetode kaldes, kan også angives i "MANIFEST"-filen i Java-pakkearkivet (.jar).

Applets

Java-applets er programmer, der er indlejret i andre applikationer, typisk en webside, der vises i en browser.

// Hello.java 
import  javax.swing.JAApplet ; 
importer  java.awt.Graphics ;

offentlig  klasse  Hej  udvider  JApplet  {

    public  void  paint ( Grafik  g )  { 
        g . drawString ( "Hej 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 >

I øjeblikket har HTML 5 fjernet brugen af ​​<applet>-tagget. Men der er stadig en måde at bruge det i HTML5. (Tekst på engelsk) Java-applets i HTML5.

Udsagnet fortæller Java-kompileren at inkludere java.applet-import klasserne . Applet og java.awt. Grafik , så du kan henvise til dem ved deres navne, uden at skulle sætte den fulde sti foran hver gang du vil bruge dem i din kildekode.

Klassen Holaudvider ( extends) til klassen Applet;, det vil sige, den er en underklasse af den. Klassen Appletgiver applikationen mulighed for at vise og kontrollere applettens tilstand. Klassen Appleter en komponent af AWT ( Abstract Window Toolkit ), som gør det muligt for appletten at vise en grafisk brugergrænseflade eller GUI (Graphical User Interface) og reagere på hændelser genereret af brugeren.

Klassen Holaoverbelaster malingsmetoden (Graphics) , der er arvet fra den indeholdende superklasse ( Appleti dette tilfælde), for at få adgang til koden, der er ansvarlig for tegningen. Metoden paint()modtager et objekt Graphics, der indeholder den grafiske kontekst til at tegne appletten. Metoden paint()kalder objektets drawString(String, int, int) metode. [5]

Servlets

Servlets er Java EE server-side komponenter, der er ansvarlige for at generere svar på anmodninger modtaget fra klienter.

// Hello.java 
import  java.io.IOException ;  
import  javax.servlet.* ;

public  class  Hej  udvider  GenericServlet  
{ 
    public  void  service ( ServletRequest  request ,  ServletResponse  response ) 
        kaster  ServletException ,  IOException 
    { 
        response . setContentType ( "tekst/html" ); 
        PrintWriter  pw  =  respons . getWriter (); 
        p w . println ( "Hej verden!" ); 
        p w . lukke (); 
    } 
}

Udtalelserne importfortæller Java-kompileren at inkludere alle offentlige klasser og grænseflader fra java.io- og javax.servlet -pakkerne i build.

Klassen Holaextend( extends) er en arving af GenericServlet -klassen . Denne klasse giver serverens grænseflade til at sende anmodninger til servlet'en og mekanismen til at kontrollere servlet'ens livscyklus.

Klassen Holaoverbelaster servicemetoden (ServletRequest, ServletResponse) , defineret af servlet -grænsefladen, for at få adgang til serviceanmodningsbehandleren. Metoden service()modtager et objekt af typen ServletRequest , der indeholder anmodningen fra klienten og et objekt af typen ServletResponse , der bruges til at generere det svar, der returneres til klienten. Metoden service()kan kaste ( throws) undtagelser af typen ServletException og IOException, hvis der opstår en form for anomali.

SetContentType (String) -metoden på responsobjektet indstiller MIME-indholdstypen til "text/html", for at indikere over for klienten, at svaret på dens anmodning er en HTML-formateret side. GetWriter ()- metoden for responsobjektet returnerer et objekt af typen PrintWriter , der bruges som et rør , hvorigennem dataene vil rejse til klienten. Println (String) -metoden udskriver strengen "Hej, verden!" i svaret og til sidst kaldes close() metoden for at lukke forbindelsen, hvilket bevirker, at data skrevet til røret eller streamen returneres til klienten.

Interface-applikationer

Swing er det avancerede grafiske brugergrænsefladebibliotek til Java SE-platformen.

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

Instruktionerne importfortæller Java-kompileren at inkludere klasser og grænseflader i javax.swing -pakken i build.

Klassen Holaudvider ( extends) javax.swing.JFrame -klassen , som implementerer et vindue med en titellinje og en kontrol til at lukke den.

Konstruktøren Hola()initialiserer rammen ved at kalde setDefaultCloseOperation (int) metoden nedarvet fra JFrame for at indstille standardoperationerne, når lukkekontrollen i titellinjen er valgt til værdien WindowConstants.DISPOSE_ON_CLOSE. Dette medfører, at de ressourcer, som vinduet tager, frigives, når det lukkes, og ikke blot skjules, hvilket tillader den virtuelle maskine og programmet at afslutte deres eksekvering. Et objekt af typen JLabel med teksten "Hello world!" oprettes derefter og føjes til rammen ved hjælp af add (Component) -metoden , nedarvet fra Container -klassen . Pack() - metoden , der er arvet fra Window -klassen , kaldes for at størrelsen af ​​vinduet og lægge dets indhold ud.

Metoden main()kaldes af JVM i starten af ​​programmet. Opret en instans af klassen Holaog få vinduet til at blive vist ved at kalde setVisible(boolean) metoden for superklassen (klassen den arver fra) med parameteren sat til true. Bemærk, at når først rammen er tegnet, afsluttes programmet ikke, når metoden afsluttes main(), da koden, den afhænger af, er i en separat udførelsestråd , der allerede er startet, og vil forblive aktiv, indtil alle vinduer er blevet ødelagt. .

Driftsmiljøer

Javas design, robusthed, industrisupport og nemme portabilitet har gjort Java til et af de hurtigst voksende og mest udbredte sprog på tværs af computerindustrien.

På mobile enheder og indlejrede systemer

Image
Android -operativsystemet er bygget ved hjælp af Java-teknologier.

Siden oprettelsen af ​​J2ME-specifikationen (Java 2 Platform, Micro Edition), en meget optimeret version af det reducerede Java-runtime-miljø specielt udviklet til forbrugerelektronikmarkedet, har der været en revolution inden for Java-udvidelse.

Mikroprocessorer designet til at køre Java bytecode og Java-software kan findes til smart cards (JavaCard), mobiltelefoner, personsøgere, set-top-bokse, tv-tunere og andre små apparater.

Udviklingsmodellen for disse applikationer ligner meget browser -applets , bortset fra at de i dette tilfælde kaldes MIDlets .

Se Sun Mobile Device Technology

I webbrowser

Siden den første version af Java har der været mulighed for at udvikle små applikationer ( Applets ) i Java, der så kan indlejres i en HTML-side for at blive downloadet og eksekveret af webbrowseren. Disse applets kører på en JVM, som browseren har konfigureret som et plug-in i en konfigurerbar begrænset sikkerhedskontekst for at forhindre lokal eksekvering af potentielt skadelig kode.

Succesen med denne type applikationer (visionen fra Gosling-teamet) var ikke rigtig, hvad der var forventet på grund af flere faktorer, måske den vigtigste var langsomheden og den lave båndbredde af kommunikation på det tidspunkt, hvilket begrænsede størrelsen af ​​applikationerne .-applets, der var indlejret i browseren. Den efterfølgende fremkomst af andre alternativer (dynamiske server-webapplikationer) efterlod et begrænset anvendelsesområde for denne teknologi, idet den i dag grundlæggende er henvist til specifikke komponenter til formidling fra en dynamisk server-webapplikation med enheder placeret på den klientmaskine, hvor den udføres. Navigator.

Java -applets er ikke de eneste teknologier (selvom de er de første) af komplekse komponenter, der er indlejret i browseren. Andre lignende teknologier kan være: Microsoft ActiveX , Flash , Java Web Start osv.

På serversystemer

På serversiden er Java mere populær end nogensinde, siden fremkomsten af ​​Servlets og JSP ( Java Server Pages ) specifikationen.

Indtil da var eksisterende dynamiske webapplikationer på serversiden primært baseret på CGI -komponenter og fortolkede sprog. Begge havde forskellige ulemper (fundamentalt langsom, høj beregnings- eller hukommelsesbelastning og tilbøjelige til fejl på grund af deres dynamiske fortolkning).

Servlets og JSP'er repræsenterede et vigtigt fremskridt siden:

  • Programmerings - API'en er meget enkel, fleksibel og kan udvides.
  • Servlets er ikke uafhængige processer (som CGI'er) og kører derfor inden for samme proces som JVM, hvilket væsentligt forbedrer ydeevnen og reducerer den nødvendige beregnings- og hukommelsesbelastning.
  • JSP'er er sider, der er dynamisk kompileret (eller prækompileret før distribution), så den resulterende kode har en væsentlig ydeevnefordel i forhold til mange fortolkede sprog.

Servlets og JSP-specifikationen definerer en programmerings-API og krav til en container (server), hvori disse komponenter kan implementeres til at danne komplette dynamiske webapplikationer. I dag er der mange beholdere (gratis og kommercielle) kompatible med disse specifikationer.

Fra deres ekspansion blandt udviklerfællesskabet har disse teknologier givet plads til meget mere komplicerede udviklingsmodeller med rammer (f.eks . Struts , Webwork ), der er overlejret på servlets og JSP'er for at opnå et meget mere kraftfuldt og effektivt arbejdsmiljø. segmenteret i hvilken rolle specialisering er muligt (udviklere, grafiske designere,...) og kodegenbrug og robusthed lettes. På trods af alt dette er de underliggende teknologier (Servlets og JSP) stort set de samme.

Denne arbejdsmodel er blevet en af ​​de facto -standarderne for udvikling af dynamiske webserverapplikationer.

I desktop-applikationer

I dag er der mange grafiske brugerapplikationer baseret på Java. Java Runtime Environment (JRE) er blevet en almindelig komponent på bruger-pc'er til de mest udbredte operativsystemer i verden. Mange Java-applikationer inkluderer det også i selve applikationspakken, så de kører på enhver pc .

I tidlige versioner af Java-platformen var der betydelige begrænsninger i de grafiske udviklings-API'er ( AWT ). Siden fremkomsten af ​​Swing- biblioteket, er situationen forbedret væsentligt, og senere, med udseendet af biblioteker som SWT , udvikler de komplekse desktop-applikationer med stor dynamik, brugervenlighed osv. være forholdsvis enkel.

Understøttede platforme

En version af Java Runtime Environment ( JRE ) er tilgængelig på de fleste stationære computere. Microsoft har dog ikke inkluderet det som standard i sine operativsystemer. I tilfældet med Apple inkluderer den sin egen version af JRE i sit operativsystem, Mac OS . Det er også et standardprodukt, der vises i de fleste GNU/Linux-distributioner . På grund af inkompatibilitet mellem forskellige versioner af JRE foretrækker mange applikationer at installere deres egen kopi af JRE i stedet for at stole på, at deres skæbne er den applikation, der er installeret som standard. Java -applet- udviklere bør enten insistere på, at brugerne opdaterer JRE eller udvikle under en ældre version af Java og kontrollere, at den fungerer korrekt på senere versioner.

Programmering

Udtryk

Udtryk er et sæt elementer eller tokens sammen med bogstaver, der evalueres for at returnere et resultat. Tokens er det mindste element i et program, der er signifikant og fortolket eller forstået af compileren, i Java er tokens opdelt i fem kategorier, der er:

Identifikatorer: De er de repræsentationer, der gives til de navne, der er tildelt variabler, klasser, pakker, metoder og konstanter i Java-koden, så compileren kan identificere dem, og programmøren kan forstå dem. I Java kan identifikatorerne skelne mellem store og små bogstaver, fordi de er store og små bogstaver , så den variabel, hvis navn er "Myvariable", er ikke lig med "myvariable", da Java identificerer disse som forskellige variabler, fordi de er store og små bogstaver . er også kan du bruge tal eller tegnet "_" til at tildele en identifikator.

Nøgleord: De er identifikatorer, der er reserveret af java til at opfylde et specifikt mål i koden og compileren, de bruges på en begrænset måde og i specifikke tilfælde. Nøgleordene brugt af Java er følgende:

abstrakt boolesk pause byte sag
fangst char klasse Blive ved Standard
gør dobbelt andet strækker sig falsk
endelig langt om længe flyde til hvis
redskaber stof forekomst af int interface
lang hjemmehørende ny nul pakker
privat beskyttet offentlig Vend tilbage shorts
statisk super kontakt synkroniseret Este
kaste kaster forbigående rigtigt prøve
ugyldig flygtige mens var hvile
efterværdi støbt bygge fremtid generisk
gå til inde operatør ydre

Ordene med fed skrift er nøgleord for Java, selvom de i øjeblikket ikke bruges i Java-versionen, men er beregnet til at blive integreret i de følgende Java-versioner.

Literals og konstanter: Literals er syntaks for at tildele værdier til en variabel, det vil sige den værdi, som en variabel kan tage, det er også en konstant værdi, der kan være af en numerisk type. Konstanter er variabler, der har en fast værdi og ikke kan ændres i løbet af kodeudførelse, de erklæres ved hjælp af de endelige og statiske modifikatorer.

endelig  statisk  dobbelt  pi =  3,1416 ;

Operatører: Det er dem, der angiver en evaluering, der anvendes på et objekt eller data, på en identifikator eller konstant. Et eksempel på operatorer kan være addition, subtraktion eller multiplikation.

Separatorer: De bruges til at angive over for Java-kompileren, hvor elementerne i koden er placeret, de separatorer, som Java understøtter, er: { },:;

Også Java-kompileren identificerer og fjerner kommentarer, vognretur og tomme mellemrum på kompileringstidspunktet, så de ikke betragtes som en del af et token.

Udtryk kan være en sekventeret kombination af variabler, operatorer og metoder. Udtryk bruges til at udføre beregninger, til at tildele værdier til variabler eller til at kontrollere udførelsen af ​​programflowet.

Operatører

De er Java-udtryk, som efter at have udført en operation returnerer et resultat. Afhængigt af antallet af operander, som en operatør håndterer, kan den være af to typer: unær eller binær.

Unære operatorer er dem, der kun behøver én operand for at returnere en værdi.

Operatør Beskrivelse
- skift af tegn
! IKKE operatør
~ 1's komplement

Binære operatorer er dem, der kræver to eller flere operander for at returnere en værdi.

operatører Beskrivelse
+ - * / % Aritmetiske operatorer
== != < > <= >= relationelle operatører
&& || ^booleske operatorer
^ << >> >>> Bitvise operatører
+ strengsammenkædning

Bitvise operatorer

eksisterer ikke

~ Komplement til 1 , denne operator inverterer cifrene, ændrer 0 med 1 og 1 med 0, et eksempel kan være:

  11001011
~11001011 resultat 00110100

Som du kan se, ændres værdierne fra 0 til 1 og fra 1 til 0.

& AND på bitniveauet udfører denne operator en AND- eller additionsoperation mellem to bitnumre, hvor hvis to bits er lig med 1 vil resultatet være 1, ellers vil det være 0, et eksempel kan være:

situation
   01001101
 & 10011011
____________
   00001001

| Eller på bitniveauet udfører denne operator en ELLER-operation, hvor hvis et af de to tal er 1, vil resultatet være 1, et eksempel kan være:

   11001101
 | 01011101
____________
   11011101

^ XOR på bitniveauet udfører denne operator XOR-operationen, hvor hvis de to tal er ens, vil resultatet være 0 ellers vil det være 1, et eksempel kan være:

 
   00101001
 ^01101101
____________
   01000100

<< Skift til venstre , denne operator flytter n antal mellemrum en bit til venstre, et eksempel kan være;

01101110
01101110 << 1 = 11011100

Som det kan ses ved udførelse af skiftet, foretages en indsættelse af et ciffer 0 til højre

Operatør forrang

Operatører er en hoveddel af udtryk, typen og brugsformen er afgørende ved programmering, men for deres brug skal der tages hensyn til en række regler, såsom operatørernes forrang.

Operatørerne udføres i henhold til deres forrang: hvis de har en højere forrang, vil de blive evalueret før dem med en lavere forrang; hvis der tilfældigvis er operatører med samme forrangsniveau, vil de blive evalueret fra højre mod venstre; og hvis de er binære operatorer (minus tildelingsoperatorer) vil de blive evalueret fra venstre mod højre. Java kan få at vide, hvilke operatorer der skal evalueres først uanset deres forrang ved hjælp af parenteser "( )", på denne måde fortolker Java-kompileren, at den først skal udføre operationerne inde i parenteserne, og derefter fortsætte med de andre operatorer.

Følgende tabel klassificerer de operatorer, der bruges i Java i henhold til deres forrangsniveau, hvor top er det højeste niveau:

Type af operatører operatører
Postfix-operatører [ ] . ( parametre) udtr++ udtr--
unære operatører ++udtr --udtr +udtr -udtr ~ !
Oprettelse eller konvertering Ny (type) udtr
Multiplikation *
Division/
resten af ​​divisionen%
Tilføjelse +
Subtraktion-
Forskydning << >> >>>
Sammenligning < > <= >= forekomst af
Lighed == !=
Bitvis OG &
bitvis ELLER |
Bitvist XOR ^
logisk OG &&
logisk ELLER ||
Betinget ? :
Opgave = += -= *= /= %= &= ^= |= <<= >>= >>>=

Et eksempel på operatørernes forrang i Java kunne være følgende, hvor vi har en kode, der vil være ansvarlig for at udføre en række aritmetiske operationer :

int  tal1  =  3 ; 
int  nummer2  =  4 ; 
int  resultat ; 
resultat  =  tal1 + tal2  * 3 ; System . ud . println ( resultat ); //dette udskriver værdien af ​​15   
  

Afhængigt af operatorernes forrang har multiplikationen "*" en højere prioritet end additionen "+", så multiplikationen udføres først, og derefter udføres additionen.

int  tal1  =  3 ; 
int  nummer2  =  4 ; 
int  resultat ; 
resultat  =  ( tal1 + tal2  ) * 3 ; System . ud . println ( resultat ); //dette udskriver værdien af ​​21   
  

I dette tilfælde ændres resultatet, da parametrene inden for parentes evalueres først og derefter resten af ​​parametrene evalueres. En af de anbefalinger som Java giver til udvikling er brugen af ​​parenteser i operationer med mere end 3 operander, på denne måde bliver koden mere læsbar og man undgår fejl ved kompilering.

Sætninger

Udsagn er en repræsentation af en sekvens af handlinger, der udføres i Java. Den grundlæggende nøgle til udsagn er deres sidste punkt, der indikerer, at udsagnet er afsluttet og kan fortsætte med det næste, den anvendte indikator er semikolon (;). I Java har vi udsagn, der kan være tildeling, loop, spring og betinget. Udsagn består almindeligvis af en instans og en operatør; Et eksempel er tildelingssætningen, der består af en forekomst af en variabel, tildelingstegnet og et udtryk; et eksempel er:

int  variabel  =  12 + 2 ;

Tildelingsudsagn er dem, hvor en værdi er tildelt en variabel eller konstant. Betingede udsagn er dem, der udtrykker en betingelse for at definere programmets eksekveringsflow; blandt dem har vi hvis, andet og skifte. Loop statements er ansvarlige for at udføre en handling i et givet tidsrum, eller indtil en betingelse er opfyldt; blandt dem har vi mens, gøre-mens og til. Jump-sætninger fører compileren til et bestemt punkt i programmet eller til den næste udførelsessætning; blandt dem har vi pause, fortsætter og vender tilbage.

Typekonvertering

I nogle tilfælde er det ofte nødvendigt at konvertere en datatype til en anden, dette er kendt som typekonvertering, modellering eller typning, og dermed være i stand til at udføre de nødvendige operationer på den værdi, der skal konverteres. Den type data, der skal konverteres, skal tages i betragtning, da hvis en data konverteres, der har et mindre antal bits end den foregående, vil den have tab af information, et eksempel på indtastning kan være et langt tal, som du ønsker for at konvertere til int, vil compileren fjerne de første 32bit af longen for at passe den til int, da int er 32bit og long er 64. Hvis konverteringen er fra en lavere bit datatype til en højere bit datatype, er konverteringen udføres automatisk kaldet implicit konvertering, men hvis det udføres fra en datatype med en højere bit til en lavere bit, skal der foretages en eksplicit konvertering, som udføres med en casting, når man bruger denne metode er den tvunget til at udføre konverteringen Derfor kan der være datatab i konverteringen. For at foretage en eksplicit konvertering, skal du sætte den type data, du vil foretage konverteringen, mellem parenteser, derefter værdien eller den variabel, du vil konvertere. Et eksempel på eksplicit typekonvertering kan være:

int  nummer1  =  32 ; 
byte  nummer2 ; 
nummer2  =  ( byte )  nummer1 ;

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

int  tal1  =  32 ; 
langt  nummer2 ; 
nummer2  =  nummer1 ;

Følgende tabel viser de datatyper, der implicit kan konverteres fra kildedataene til destinationsdataene, som er de data, der skal konverteres.

Oprindelsestype destinationstype
byte dobbelt, flydende, lang, int, char, kort
shorts dobbelt, flydende, lang, int
char dobbelt, flydende, lang, int
int dobbelt, flydende, lang
lang dobbelt, flyde
flyde dobbelt

Booleske datatyper kan ikke konverteres til en anden datatype, ved hvilken som helst metode nævnt ovenfor. Enhver anden form for konvertering, der ikke findes i denne tabel fra kilde til destination, skal udføres ved hjælp af en eksplicit casting-konvertering. Når du vil konvertere fra en strengtype som kilde til en anden type, skal du bruge en funktion, der er ansvarlig for at konvertere datatypen, den nødvendige funktion består af den variabel, der skal gemme resultatet, og afhængigt af variablen parameteren bruges, der starter med datatypen, der skal konverteres, heltal, byte, kort eller lang, efterfulgt af et punktum ". “, som indikerer at parameterens attributter vil blive indlæst, hvor vi vil indlæse parseInt hvis vi vil konvertere til interger eller parseByte hvis vi vil konvertere til byte, eller afhængigt af datatypen, efterfulgt af parenteser hvor strengen værdi vil blive tilføjet for at konvertere. Nogle eksempler kan være:

int  nummer1 ; 
langt  nummer2 ; 
byte  nummer3 ; 
Strengtekst  = 2013 ; _ nummer1 = Heltal . parseInt ( tekst ); nummer2 = Langt . parseLong ( tekst ); nummer3 = Byte . parseByte ( tekst ); 
     
    
     

dette bruges ofte til at udføre en tekstkonvertering, når numeriske værdier indtastes af et input til java, som registrerer dem som en streng, så du kan konvertere den tekst, du indtaster, til et tal for at udføre operationer, som en lommeregner.

Relateret industri

Sun Microsystem, som skaberen af ​​Java -programmeringssproget og JDK-platformen, opretholder stærke politikker for at opretholde en specifikation af sproget [ 10 ] såvel som den virtuelle maskine [ 11 ] gennem JCP. Det er på grund af denne indsats, at en de facto standard opretholdes.

Der er utallige virksomheder, der udvikler applikationer til Java og/eller er dedikerede til denne teknologi: [ 12 ]

  • Mobiltelefonindustrien er stærkt påvirket af Java-teknologi .
  • IntelliJ IDEA- , Netbeans- og Eclipse - udviklingsmiljøerne (IDE'er) har indtaget en vigtig plads blandt Java-udviklerfællesskabet.
  • Apache Foundation har også en betydelig tilstedeværelse i udviklingen af ​​Java-baserede serverkomponenter og biblioteker.
  • IBM , BEA , IONA , Oracle ,... er virksomheder med store interesser og produkter skabt i og til Java.

Kritik

I 1995 sagde nogen [ hvem? ] at Java blev oprettet for at åbne en ny vej i håndteringen af ​​kompleks software, og det er generelt accepteret, at det har opført sig godt i denne henseende. Det kan dog ikke siges, at Java er fejlfri og fuldstændig tilpasningsdygtig til alle programmeringsstile, alle miljøer eller alle behov.

Generelt

  • Java har ikke leveret standardfunktioner til aritmetik med flydende komma. IEEE 754- standarden for " Standard for Binary Floating Point Arithmetic" udkom i 1985 og har været industristandarden lige siden. Og selvom Javas flydende aritmetik (som ændrede sig siden den 13. november 2006, da kildekoden blev åbnet og GPL -licensen blev vedtaget , bortset fra den allerede eksisterende) er [ citation nødvendig ] [ 13 ] stort set baseret på målt i IEEE-standarden , den understøtter endnu ikke nogle funktioner. Mere information om dette kan findes i det sidste afsnit om eksterne links.

Sproget

  • I streng forstand er Java ikke et absolut objektorienteret sprog, i modsætning til for eksempel Ruby eller Smalltalk . Af effektivitetsmæssige årsager har Java lempet noget på det objektorienterede paradigme, og for eksempel er ikke alle værdier objekter.
  • Java-kode kan nogle gange være overflødig sammenlignet med andre sprog. Dette skyldes blandt andet hyppige typedeklarationer og manuelle typekonverteringer (støbning). Det skyldes også, at der ikke er nogen overbelastede operatører til rådighed, og en relativt simpel syntaks. J2SE 5.0 introducerer dog ting for at forsøge at reducere redundans, såsom en ny konstruktion for '''foreach'''-løkker.
  • I modsætning til C++ har Java ikke brugerdefinerede overbelastningsoperatører. Designerne af Java tog denne beslutning, fordi de mente, at denne funktion under visse omstændigheder kunne gøre programmer svære at læse og vedligeholde.

Udseende

Det ydre udseende ('''look and feel''') af GUI (Graphical User Interface) applikationer skrevet i Java ved hjælp af Swing platformen adskiller sig ofte fra det, der vises af native applikationer. Selvom programmøren kan bruge AWT-værktøjssættet (Abstract Windowing Toolkit), som genererer native platformsgrafikobjekter, er AWT'en ikke i stand til avancerede grafikfunktioner uden at ofre portabilitet på tværs af platforme; da hver har et andet sæt API'er, især for grafiske objekter på højt niveau. Swing-værktøjer, skrevet udelukkende i Java, undgår dette problem ved at bygge de grafiske objekter ud fra grundlæggende tegnemekanismer, der burde være tilgængelige på alle platforme. Ulempen er det ekstra arbejde, der kræves for at få det samme udseende og følelse på målplatformen. Selvom dette er muligt (ved at bruge GTK+ og Windows Look-and-Feel), ved de fleste brugere ikke, hvordan man ændrer det udseende, der leveres som standard, til et, der passer til platformen.

Ydeevne

Java-bytekode kan tolkes ved kørsel af den virtuelle maskine eller kompileres, når programmet indlæses, eller under selve eksekveringen, for at generere indbygget kode, der udføres direkte på hardwaren. Hvis det fortolkes, vil det være langsommere end at bruge målplatformens iboende maskinkode. Hvis det kompileres, under indledende indlæsning eller udførelse, er straffen i den tid, det tager at udføre kompileringen.

Nogle funktioner i selve sproget har en tidsstraf, selvom de ikke er unikke for Java. Nogle af dem er kontrol af matrixgrænser, kontrol af runtime-type og indirektion af virtuel funktion .

Brug af en skraldeopsamler til automatisk at fjerne unødvendige genstande tilføjer overhead, der kan påvirke ydeevnen eller være ubetydelig, afhængigt af opsamlerens teknologi og den særlige applikation. Moderne JVM'er bruger skraldopsamlere, der takket være hurtige hukommelseshåndteringsalgoritmer får nogle applikationer til at køre mere effektivt.

Ydeevnen mellem en JIT-kompiler og native compilere kan være ens, selvom skelnen ikke er klar på dette tidspunkt. Kompilering ved hjælp af JIT kan være tidskrævende, hovedsageligt til besvær for kortlivede applikationer eller applikationer med en stor mængde kode. Men når det først er kompileret, kan programmets ydeevne være sammenlignelig med den, der opnås af native compilere af målplatformen, selv i numeriske opgaver. Selvom Java ikke tillader manuel udvidelse af metodekald, udfører mange JIT-compilatorer denne optimering under applikationsindlæsning og kan udnytte information fra runtime-miljøet til at udføre effektive transformationer under selve applikationsudførelsen. Denne dynamiske omkompilering, som den, der leveres af Suns virtuelle HotSpot-maskine, kan potentielt udkonkurrere traditionelle statiske compilere, takket være data, der kun er tilgængelige under kørsel.

Java er designet til sikkerhed og portabilitet og giver ikke direkte adgang til arkitekturhardware eller adresserum. Java understøtter ikke assembly- kodeudvidelse , selvom applikationer kan få adgang til funktioner på lavt niveau ved hjælp af native biblioteker (JNI, Java Native Interfaces).

Java funktioner:

1. Simpelt sprog: “Det er kendt som et simpelt sprog, fordi det kommer fra den samme struktur som c og c++; da c++ var en reference til oprettelsen af ​​java, er det derfor, den bruger visse karakteristika for c++, og andre er blevet elimineret."

2. Objektorienteret.

3. Multithreading: Java har en facilitet til at udføre flere funktioner på samme tid, takket være dens multithreading funktion, da for hver tråd, som programmet har, vil mange funktioner blive udført i realtid på samme tid.

Høj ydeevne: Java anses for høj ydeevne, fordi det er så hurtigt, når man kører programmer, og fordi det gemmer mange linjer kode.

Ressourcer

JRE

JRE ( Java Runtime Environment eller Java Runtime Environment) er den software, der er nødvendig for at køre enhver applikation udviklet til Java-platformen. Slutbrugeren bruger JRE som en del af softwarepakker eller plugins (eller plug-ins) i en webbrowser. Sun tilbyder også Java 2 SDK eller JDK (Java Development Kit), hvori JRE'en er placeret, og inkluderer værktøjer såsom Java-kompileren, Javadoc til at generere dokumentation eller debuggeren . Det kan også fås som en selvstændig pakke, og kan betragtes som det nødvendige miljø for at køre en Java-applikation, mens en udvikler også skal have andre faciliteter, som JDK tilbyder.

Komponenter

  • Java-biblioteker, som er resultatet af kompilering af kildekoden udviklet af JRE-implementeren, og som understøtter Java-udvikling. Nogle eksempler på disse biblioteker er:
    • Centralbibliotekerne, som omfatter:
    • Integrationsbiblioteker, som tillader kommunikation med eksterne systemer. Disse biblioteker omfatter:
    • Biblioteker til brugergrænsefladen, herunder:
      • AWT (Abstract Window Toolkit) native toolkit , som tilbyder GUI (Graphical User Interface) komponenter, mekanismer til at bruge dem og håndtering af deres tilknyttede hændelser.
      • Swing Libraries , bygget oven på AWT, men tilbyder ikke-native implementeringer af AWT-komponenter.
      • API til optagelse, behandling og afspilning af lyd.
  • En platformsafhængig implementering af Java Virtual Machine (JVM), som er ansvarlig for at udføre koden for eksterne applikationer og biblioteker.
  • Plugins eller stik, der giver dig mulighed for at køre applets i webbrowsere.
  • Java Web Start, til distribution af Java-applikationer over internettet.
  • Dokumentation og licens.

API

Sun definerer tre platforme i et forsøg på at dække forskellige applikationsmiljøer. Det har således distribueret mange af sine API'er (Application Program Interface), så de hører til hver af platformene:

  • Java ME (Java Platform, Micro Edition) eller J2ME — rettet mod miljøer med begrænsede ressourcer, såsom mobiltelefoner, PDA'er (Personal Digital Assistant) osv.
  • Java SE (Java Platform, Standard Edition) eller J2SE — til mellemtonemiljøer og arbejdsstationer. Her er den gennemsnitlige bruger placeret på en stationær pc.
  • Java Platform, Enterprise Edition (Java EE) eller J2EE — rettet mod distribuerede virksomheds- eller internetmiljøer.

Klasserne i Java API'erne er organiseret i usammenhængende grupper kaldet pakker . Hver pakke indeholder et sæt relaterede grænseflader, klasser og undtagelser. Oplysninger om de pakker, der tilbydes af hver platform, kan findes i dens dokumentation.

Sættet af API'er styres af Sun Microsystems sammen med andre enheder eller personer gennem JCP-programmet (Java Community Process). Virksomheder eller enkeltpersoner, der deltager i JCP, kan aktivt påvirke design og udvikling af API'er, noget der har været en kilde til kontroverser.

Udvidelser og relaterede arkitekturer

Java- udvidelser [ 14 ]​ er i pakker, der hænger fra root javax: javax.*. De er ikke inkluderet i JDK eller JRE. Nogle af de udvidelser og arkitekturer, der er tæt knyttet til Java-sproget er:

  • Java EE (Java Platform, Enterprise Edition; tidligere J2EE) – til virksomhedsorienterede distribuerede applikationer

Open source Java

Udvalgsbaseret udvikling, der involverer alle interessenter, er ikke nok, og samfundet har længe krævet frigivelsen af ​​de centrale JDK API'er og biblioteker.

I december 2006 begyndte Sun Microsystems genudgivelsen af ​​sin Java-platform [ 15 ] under GNU GPL -licensen .

I april 2009 købte Oracle Sun Microsystems , hvilket vækker frygt i samfundet om den mulige kommodificering af nutidens mest populære objektorienterede programmeringssprog. Indtil videre har Oracle fortsat med at vedligeholde Java, med versioner efter 6 under dets kontrol.

En hjemmebrygget version af PSPKVM (0.5.5) er installeret for at emulere Java-platformen på PSP . Dette giver dig mulighed for at bruge JAVA-programmer på denne spillekonsol.

Gratis alternativer

Der er alternativer til Java-udviklings- og runtime-miljøet med en bred dækning af funktionalitet sammenlignet med kommercielle implementeringer fra Sun, IBM, Bea osv.

Kritik vedrørende Java og gratis software

Bemærk, at denne artikel blev skrevet før udgivelsen af ​​Java-kildekoden. I øjeblikket har Free Software Foundations og Richard Stallmans holdning ændret sig , begge er til fordel for dets brug i fri software.

Se også

Referencer

Noter

  1. https://www.oracle.com/java/technologies/javase/18-0-1-relnotes.html
  2. ^ "Programmeringssprogs popularitet" . 2009. Arkiveret fra originalen 2009-01-16 . Hentet 16. januar 2009 . 
  3. ^ "TIOBE-programmeringsfællesskabsindeks" . 2009 . Hentet 6. maj 2009 . 
  4. Sun and Oracle (Oracle.com)
  5. "Jonathan Schwartz's blog: Anderledes er ikke altid bedre, men bedre er altid anderledes" . Blogs.sun.com. Arkiveret fra originalen den 5. september 2009 . Hentet 24. september 2010 . 
  6. M. Domínguez-Dorado,. Al programmering. nr. 8. Sider. 39-42. Redaktionel Iberprensa (Madrid). DL M-13679-2004. Februar, 2005. Tegning på lærred i Java. . 
  7. Oracle Staff, Oracle annoncerer Java 16 , 18. marts 2021.
  8. Release Notes [1]
  9. Microsoft (red.). "Operator overbelastning (C# og Java)" . C# til Java-udviklere . Hentet 21. juni 2018 . 
  10. Java-sprogspecifikation
  11. Java Virtual Machine Specification
  12. madridiario.es. "Java-programmeringstræning fortsætter med at være førende med hensyn til elevernes efterspørgsel" . Hentet 29. januar 2019 . 
  13. "En analyse af Java - Notes on Computer Engineering - Docsity" . www.docsity.com . Hentet 14. november 2018 . 
  14. M. Domínguez-Dorado, Guillermo Som. Al programmering. nr. 11. Sider. 10-20. Redaktionel Iberprensa (Madrid). DL M-13679-2004. August, 2005. Udskrivning fra Java og .NET . 
  15. Sun begynder at frigive Java under GPL - Free Software Foundation

Eksterne links

Oracle-Sun

Tutorials

Kritik