Java (programmeringssprog)
| Java | ||
|---|---|---|
|
| ||
| 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
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.0 ( 23. januar 1996 ) — Første udgivelse: pressemeddelelse
- JDK 1.1 ( 19. februar 1997 ) — Større tilføjelser inkluderet: pressemeddelelse
- J2SE 1.2 ( 8. december 1998 ) — Kodenavnet Playground . Denne og efterfølgende versioner blev samlet under navnet Java 2 , og navnet "J2SE" (Java 2 Platform, Standard Edition) erstattede JDK for at skelne basisplatformen fra J2EE (Java 2 Platform, Enterprise Edition) og J2ME (Java 2 Platform, Micro udgave). Andre tilføjede forbedringer inkluderede: pressemeddelelse
- det reserverede ord (søgeord)
strictfp - refleksion over programmering
- det grafiske API ( Swing ) blev integreret i basisklasserne
- Suns virtuelle maskine (JVM) blev udstyret med en JIT (Just in Time) compiler for første gang
- Java plugin
- Java IDL , en implementering af IDL ( Interface Description Language ) til interoperabilitet med CORBA
- Samlinger _ _
- det reserverede ord (søgeord)
- J2SE 1.3 ( 8. maj 2000 ) — Kodenavnet Kestrel . De mest bemærkelsesværdige ændringer var: pressemeddelelse fuld liste over ændringer
- inklusion af den virtuelle HotSpot JVM-maskine (HotSpot JVM blev oprindeligt udgivet i april 1999 til J2SE 1.2 JVM)
- RMI blev ændret til at være baseret på CORBA
- JavaSound
- inkluderet Java Naming and Directory Interface (JNDI) i kernebibliotekspakken (tidligere tilgængelig som en udvidelse)
- Java Platform Debugger Architecture (JPDA)
- J2SE 1.4 ( 6. februar 2002 ) — Kodenavnet Merlin . Dette var den første udgivelse af Java-platformen udviklet under Java Community Process som JSR 59 . De mest bemærkelsesværdige ændringer var: pressemeddelelse fuld liste over ændringer
- Reserveret ord
assert(specificeret i JSR 41. ) - Regulære udtryk modelleret efter stilen med Perl regulære udtryk
- Undtagelseskæde Tillader en undtagelse at indkapsle den oprindelige undtagelse på lavt niveau.
- ikke-blokerende NIO ( Ny input/output ) (specificeret i JSR 51. )
- Logging API (specificeret i JSR 47. )
- I/O API til læsning og skrivning af billeder i formater som JPEG eller PNG
- Integreret XML -parser og XSLT - processor ( JAXP ) (specificeret i JSR 5 og JSR 63. )
- Integrerede sikkerheds- og kryptografiske udvidelser (JCE, JSSE , JAAS )
- Java Web Start inkluderet (Første udgivelse fandt sted i marts 2001 til J2SE 1.3) (specificeret i JSR 56 .)
- Reserveret ord
- 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åsomDia.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 loopingforer 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:
- Det bør bruge det objektorienterede programmeringsparadigme.
- Det bør tillade udførelse af det samme program på flere operativsystemer.
- Det bør inkludere netværksunderstøttelse som standard.
- Det skal være designet til at udføre kode sikkert på fjernsystemer.
- 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 kaldetHola, 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
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
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:
- API'et for adgang til JDBC- databaser (Java DataBase Connectivity).
- Java Naming and Directory Interface (JNDI) til katalogtjenester.
- RMI (Remote Method Invocation) og CORBA til udvikling af distribuerede applikationer.
- 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
- Free But Shackled—The Java Trap , af Richard Stallman , 12. april 2004 . ( James Goslings svar )
- Spansk oversættelse af denne artikel: Gratis men lænket. Java-fælden. (Bemærk, at der er en seddel i en gul boks, der taler om den aktuelle situation med hensyn til, hvad der står i den artikel)
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
- Jon Byous, Java-teknologi: De tidlige år . Sun Developer Network, udateret[ca. 1998]. Hentet 21. april 2005.
- James Gosling , En kort historie om det grønne projekt . Java.net, ingen dato [ca. Q1/1998]. Hentet 22. april 2005.
- James Gosling , Bill Joy , Guy Steele og Gilad Bracha , Java-sprogspecifikationen , tredje udgave. Addison-Wesley, 2005. ISBN 0-321-24678-0 .
- Tim Lindholm og Frank Yellin. Java Virtual Machine-specifikationen , anden udgave. Addison-Wesley, 1999. ISBN 0-201-43294-3 .
Noter
- ↑ https://www.oracle.com/java/technologies/javase/18-0-1-relnotes.html
- ^ "Programmeringssprogs popularitet" . 2009. Arkiveret fra originalen 2009-01-16 . Hentet 16. januar 2009 .
- ^ "TIOBE-programmeringsfællesskabsindeks" . 2009 . Hentet 6. maj 2009 .
- ↑ Sun and Oracle (Oracle.com)
- ↑ "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 .
- ↑ 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. .
- ↑ Oracle Staff, Oracle annoncerer Java 16 , 18. marts 2021.
- ↑ Release Notes [1]
- ↑ Microsoft (red.). "Operator overbelastning (C# og Java)" . C# til Java-udviklere . Hentet 21. juni 2018 .
- ↑ Java-sprogspecifikation
- ↑ Java Virtual Machine Specification
- ↑ madridiario.es. "Java-programmeringstræning fortsætter med at være førende med hensyn til elevernes efterspørgsel" . Hentet 29. januar 2019 .
- ↑ "En analyse af Java - Notes on Computer Engineering - Docsity" . www.docsity.com . Hentet 14. november 2018 .
- ↑ 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 .
- ↑ Sun begynder at frigive Java under GPL - Free Software Foundation
Eksterne links
Wikibooks er vært for en bog eller manual om Java-programmering .- Programmer lavet i java med kildekode
- Kompilering af kildekoder i java
- 5 fordele ved Java
Oracle-Sun
- Officiel Java-udviklerside osv
- Java-sprogspecifikationen, tredje udgave officielle Java-sprogspecifikation
Tutorials
- Thinking in Java , af Bruce Eckel (online)
- En introduktion til datalogi ved hjælp af Java af Bradley Kjell.
- Java Course , af A.B. Downey.
- Computer-Books.us Samling af Java-bøger, der kan downloades gratis.
- På spansk:
- Videotutorials til at lære fra bunden «Start programmering»
- "Java ovenpå" samling af elektroniske bøger (University of Malaga. Spanien)
- Java-kursus, fra nul til op til forbindelse til MYSQL, inkluderer PDF (Mexico)
- Java-kursus, der følger Kathy Sierras java bogindeks, indeholder PDF'er og øvelser (Mexico)
- Java træning på store projekter
- Lær Java-programmering fra bunden (webportalprendiraprogramar.com, online og i pdf-format)
- Dekryptering af Java
- Java-kursus fra bunden (pildorasinformaticas.com)
Kritik
- Softpanorama Java Critique Side: Java vs Scripting Languages , af Nikolai Bezroukov
- [6] , af W. Kahan og Joseph D. Darcy ved ACM 1998 Workshop on Java for High-Performance Network Computing