Þessi grein er einnig fáanleg sem hljóðskrá.

Java (forritunarmál)

frá Wikipedia, ókeypis alfræðiorðabókinni
Fara í siglingar Fara í leit
Java
merki
Grunngögn
Fyrirmyndir : Hlutbundið forritunarmál
Útgáfuár: 1995
Hönnuður: James Gosling , Sun Microsystems
Hönnuður: Sun Microsystems , Oracle
Núverandi útgáfa Java SE 16.0.2[1] (20. júlí 2021)
Vélritun : sterkur , kyrrstæður
Undir áhrifum frá: C ++ , C , Ada , Simula 67, Smalltalk , Objective-C , Object Pascal , Oberon , Eiffel , Modula-3 , Mesa , Simula , C # , UCSD Pascal , hlutategund , breytileiki , athugasemd (Java) , Niklaus Wirth , Patrick Naughton, foreach lykkja
Áhrif: Groovy , Clojure , C # , Scala , Vala , ActionScript , Seed7 , Kotlin , JavaScript
Stýrikerfi : vettvangur óháður
Leyfi : GNU General Public License
www.oracle.com/java/

Java er hlutbundið forritunarmál og skráð vörumerki Sun Microsystems , sem var keypt af Oracle árið 2010. Forritunarmálið er hluti af Java tækni - það samanstendur í grundvallaratriðum af Java þróunarverkfærinu ( JDK ) til að búa til Java forrit og Java runtime umhverfið (JRE) til að framkvæma þau. Runtime umhverfið sjálft samanstendur af sýndarvélinni ( JVM ) og bókasafnunum sem fylgja. Java sem forritunarmál ætti ekki að leggja að jöfnu við Java tækni; Java keyrsluumhverfi keyrir bytecode sem er hægt að taka saman bæði frá forritunarmáli Java og öðrum forritunarmálum eins og Groovy , Kotlin og Scala . Í grundvallaratriðum er hægt að nota hvaða forritunarmál sem grundvöll fyrir Java kóða en í flestum tilfellum eru engar samsvarandi bycode þýðendur .

Java forritunarmálið er fyrst og fremst notað innan Java tækni til að móta forrit. Þetta er upphaflega fáanlegt sem hreinn, mannskiljanlegur texti , svokallaður frumkóði . Þessi frumkóði er ekki beint keyranlegur; Aðeins Java þýðandinn, sem er hluti af þróunarverkfærinu, þýðir það í vélskiljanlegan Java hliðarkóða. Vélin sem keyrir þennan byececode er hins vegar venjulega sýndar - það er, kóðinn er venjulega ekki keyrður beint af vélbúnaði (eins og örgjörvi ), heldur með viðeigandi hugbúnaði á miðapallinum.

Tilgangur þessarar sýndarvæðingar er sjálfstæði vettvangs : forritið ætti að geta keyrt á hvaða tölvuarkitektúr sem er án frekari breytinga ef viðeigandi keyrsluumhverfi er sett upp þar . Oracle sjálft býður upp á keyrsluumhverfi fyrir Linux , macOS , Solaris og Windows stýrikerfi. Aðrir framleiðendur hafa sitt eigið Java keyrsluumhverfi vottað fyrir vettvang sinn. Java er einnig notað í bíla, hátæknikerfi og önnur raftæki.

Til að auka framkvæmdarhraða eru hugtök eins og samantekt rétt í tíma og hagræðing á heitum reitum notuð. Í tengslum við raunverulegt framkvæmdarferlið getur JVM túlkað bycecodið, en einnig tekið saman og fínstillt það ef þörf krefur.

Java er eitt vinsælasta forritunarmálið. Í TIOBE vísitölunni sem birt var síðan 2001 var Java alltaf í fyrsta eða öðru sæti í röðinni og keppti við C. [2] [3] Samkvæmt RedMonk forritunarmálavísitölu 2019 eru Java og Python í öðru sæti á eftir JavaScript . [4] [5]

Grunnhugtök

Hönnun Java forritunarmálsins hafði fimm meginmarkmið: [6]

einfaldleiki
Í samanburði við önnur hlutbundin forritunarmál eins og C ++ eða C # , er Java einfalt vegna þess að það hefur minnkað tungumálasvið og styður ekki til dæmis ofhleðslu rekstraraðila og margfalda arfleifð .
Hlutlæg stefna
Java er eitt af hlutbundnu forritunarmálunum .
Dreifðir
A tala af einföldum valkostum fyrir net samskipta, frá TCP / IP samskiptareglum til fjarlægur aðferð ákall til þjónustu á vefnum , aðallega í boði í gegnum Java bekknum bókasafn ; Java tungumálið sjálft felur ekki í sér beinan stuðning við dreifða framkvæmd.
kunnugleiki
Vegna setningafræðilegrar nálægðar við C ++, upphaflega líkingu bekkjarbókasafnsins við Smalltalk bekkjasöfn og notkun hönnunarmynstra í bekkjasafninu, sýnir Java engin óvænt áhrif fyrir reynda forritarann.
traustleiki
Margir þeirra hönnunarvalda sem eru gerðir við skilgreiningu Java draga úr líkum á óæskilegum kerfisvillum; að nefna er sterk vélritun, sorphirðu, undantekningahöndlun og skortur á vísir.
öryggi
Hugtök eins og bekkjarhleðslutækið, sem stýrir öruggu framboði bekkjarupplýsinga til sýndarvélarinnar í Java, og öryggisstjórar, sem tryggja að aðeins sé aðgangur að forritahlutum sem viðeigandi réttindi eru fyrir.
Byggingarleysis hlutleysi
Java var þróað á þann hátt að sama útgáfa af forriti keyrir í grundvallaratriðum á hvaða tölvuvélbúnaði sem er, óháð örgjörva þess eða öðrum vélbúnaðaríhlutum.
færanleika
Auk þess að vera arkitektúr hlutlaus, er Java flytjanlegur. Þetta þýðir að frumstæðar gagnategundir eru staðlaðar í stærð þeirra og innri framsetningu sem og í reiknihegðun. Til dæmis er float alltaf IEEE 754 floti með 32 bita lengd. Sama gildir til dæmis um bekkjasafnið, sem hægt er að nota til að búa til GUI sem er óháð stýrikerfi.
Skilvirkni
Vegna hagræðingarmöguleika við keyrslutíma hefur Java möguleika á að ná betri afköstum en tungumálum sem takmarkast við samstillingartíma hagræðingu (C ++ osfrv.). Á móti kemur kostnaður vegna Java keyrslutíma umhverfis , þannig að frammistöðu til dæmis C ++ forrita er í sumum samhengi, [7] [8] en ekki náð í öðrum. [9]
Túlkun
Java er sett saman í vél óháðum bæti kóða, sem aftur er hægt að túlka á miðapallinum. Java sýndarvél Oracle túlkar Java kennitölu áður en hún tekur saman og fínstillir hana af árangursástæðum.
Samsvörun
Java styður margþráð , þ.e. samhliða framkvæmd sjálfstæðra forritahluta. Að auki býður tungumálið sjálft upp á leitarorðin synchronized og volatile - smíðar sem styðja „Monitor & Condition Variable Paradigm“ eftir CAR Hoare [10] . Bekkjasafnið inniheldur viðbótarstuðning fyrir samhliða forritun með þráðum. Nútíma JVM tengir Java þráð við þræði stýrikerfis og nýtur þannig góðs af örgjörvum með nokkrum tölvukjörnum .
Dynamískt
Java er þannig uppbyggt að hægt er að laga það að breytilegum rammaskilyrðum. Þar sem einingarnar eru aðeins tengdar við keyrslutíma er hægt að afhenda hluta af hugbúnaðinum (t.d. bókasöfnum) aftur, til dæmis án þess að þurfa að laga þá hluta sem eftir eru. Hægt er að nota tengi sem grundvöll fyrir samskipti milli tveggja eininga; hins vegar er hægt að breyta raunverulegri framkvæmd á kraftmikinn hátt og til dæmis einnig meðan á keyrslu stendur.

Hlutlæg stefna

Ósjálfstæði graf Java kjarna flokkanna (búið til með jdeps og Gephi ). Í miðju skýringarmyndarinnar er hægt að sjá algengustu flokkana Object og String.

Grunnhugmynd hlutbundinnar forritunar er að draga saman gögn og tilheyrandi aðgerðir eins nálægt og mögulegt er í svokölluðum hlut og hylja þau utan frá ( abstrakt ). Ætlunin bak við þetta er að gera stór verkefni hugbúnaður auðveldara að stjórna og að auka gæði af the hugbúnaður. Annað markmið með hlutlægri stefnumörkun er mikil endurnotanleiki hugbúnaðareininga.

Nýr þáttur Java samanborið við hlutbundin forritunarmál C ++ og Smalltalk er skýr greinarmunur á viðmóti og flokkum , sem er tjáð með samsvarandi lykilorðum interface og class . Java styður ekki að erfa marga sjálfstæða grunnflokka (svokallaða „margfalda arfleifð“ eins og í C ++ eða Eiffel ), en styður þó framkvæmd margra viðmóta sem getur einnig leyst mörg samsvarandi vandamál. Undirskriftaraðferðir og staðlaðar útfærslur á aðferðum eru sendar til afleiddra flokka, en engir eiginleikar .

Java er ekki fullkomlega hlutbundið vegna þess að grunngagnategundirnar ( int , boolean osfrv.) Eru ekki hlutir (sjá einnig Java setningafræði ). Frá og með Java 5 er þeim hins vegar sjálfkrafa breytt í samsvarandi hlutategundir og öfugt með sjálfvirkum kassa sem er gagnsær fyrir forritarann. [11]

dæmi

Upprunakóði
 / **
* Þessi flokkur er almennur flokkur fyrir öll dýr og tilboð
* Hafa aðferðir sem öll dýr eiga sameiginlegt.
* /
opinber bekknum Animal {
	/ **
* Þessi aðferð gerir dýrið kleift að eiga samskipti. Undirflokkar þessa
* Class getur hnekkt þessari aðferð og fundið viðeigandi
* Bjóða upp á framkvæmd fyrir viðkomandi dýr.
* /
	tómt samskipti almennings () {
	    // Notað af öllum undirflokkum sem hnekkja ekki þessari aðferð.
	    Kerfi . út . println ( "Dýr segir ekkert." );
	}
}

/ **
* Lýsir yfir flokknum „hundur“ sem undirflokk í flokknum „dýr“.
* "Hundur" flokkurinn erfir sviðin og aðferðirnar í "dýrum" flokknum.
* /
opinber bekknum hundur nær dýrið {
	/ **
* Þessi aðferð er útfærð í yfirstéttinni „Tier“. hún mun
* Yfirgnæfandi í þessum flokki og aðlagað að dýrategundinni „hundi“.
* /
	@Afleiðing
	tómt samskipti almennings () {
		// Kallar á framkvæmd þessarar aðferðar í „Tier“ yfirflokknum.
		frábært . miðla ();
		// Gefur út texta í stjórnborðinu.
		Kerfi . út . println ( "Hundurinn segir: 'Wuf Wuf'" );
	}
}

/ **
* Lýsir yfir flokknum „köttur“ sem undirflokk í flokknum „dýr“.
* "Kötturinn" flokkurinn erfir sviðin og aðferðirnar í "dýrum" flokknum.
* /
opinber bekknum köttur nær dýrið {
	/ **
* Þessi aðferð er útfærð í yfirstéttinni „Tier“. hún mun
* Yfirgnæfandi í þessum flokki og aðlagað að dýrategundinni „kött“.
* /
	@Afleiðing
	tómt samskipti almennings () {
		// Kallar á framkvæmd þessarar aðferðar í „Tier“ yfirflokknum.
		frábært . miðla ();
		// Gefur út texta á vélinni.
		Kerfi . út . println ( "köttur segir: 'meow'" );
	}
}

opinber bekknum Main {
	/ **
* Aðferð sem er kölluð þegar forritið er ræst.
* /
	public static void main ( String [] args ) {
		// lýsir yfir breytu fyrir tilvik af flokkunum „hundur“ og „köttur“
		Dýra dýr ;

		// Býr til dæmi úr „hund“ flokknum og vistar dæmið í
		// breytan "þrep"
		dýr = nýr hundur ();
		// Hringir í hundinn.samskipti () aðferð
		dýr . miðla ();

		// Býr til dæmi af "köttnum" flokknum og geymir tilvikið í
		// breytan "þrep"
		dýr = nýr köttur ();
		// Kallar cat.communicate () aðferðina
		dýr . miðla ();
	}
}
Framleiðsla á vélinni
Animal segir ekkert.
Hundur segir: 'úff vá'
Animal segir ekkert.
Köttur segir: 'mjá'

Hugleiðing

Java býður upp á Reflection API sem hluta af keyrsluumhverfinu . Þetta gerir það mögulegt að fá aðgang að bekkjum og aðferðum meðan á keyrslu stendur en ekki var vitað um tilvist eða nákvæmt form á þeim tíma sem forritið var búið til. Þessi aðferð er oft notuð í tengslum við verksmiðju aðferð hönnun mynstur .

Skýringar

Með Java 5 hefur Sun bætt við athugasemdum við forritunarmálið. Skýringar leyfa merkingu lýsigagna og gera að vissu marki notendaskilgreinda tungumálaviðbót. Tilgangur athugasemda er meðal annars sjálfvirk kóða og önnur mikilvæg skjöl í hugbúnaðargerð fyrir endurtekið mynstur byggt á stystu mögulegu tilvísunum í frumtextanum. Hingað til voru aðeins Javadoc athugasemdir með sérstökum JavaDoc merkjum notuð í Java, sem voru metnar af skjölum eins og XDoclet .

Skýringar geta einnig verið með í samsettum flokkaskrám. Kóðinn er því ekki nauðsynlegur til notkunar þeirra. Sérstaklega eru skýringarnar einnig aðgengilegar í gegnum Reflection API. Til dæmis er hægt að nota þau til að stækka baunahugtakið .

Modular framkvæmd á fjarlægum tölvum

Java býður upp á möguleika á að skrifa námskeið sem keyra í mismunandi framkvæmdarumhverfi. Til dæmis er hægt að keyra smáforrit í vöfrum sem styðja Java. Hægt er að nota Java öryggishugtakið til að tryggja að óþekktir flokkar geti ekki valdið skemmdum, sem er sérstaklega mikilvægt með smáforritum (sjá einnig sandkassa ). Dæmi um Java -einingar sem hægt er að framkvæma í samsvarandi framkvæmdarumhverfi eru smáforrit , servlets , portlets , MIDlets , Xlets , translets og Enterprise JavaBeans .

eiginleikar

Duke, Java lukkudýr

Hlutaaðgangur í Java er útfærður innbyrðis í VM með því að nota tilvísanir sem eru svipaðar ábendingum sem þekktar eru frá C eða C ++. [12] Tungumálaskilgreiningin (Java Language Specification) kallar þau „Tilvísunargildi“ til að gera það ljóst að þau eru flutt í frumkóða viðkomandi forrits sem kall eftir gildi . [13] Af öryggisástæðum leyfa þessar ekki að þekkja eða breyta raunverulegu minnisfangi. Svokölluð mælikvarði er því útilokaður í Java. Með hönnun er hægt að útiloka algenga tegund af villum sem eiga sér stað á öðrum forritunarmálum frá upphafi.

Tengd námskeið eru sameinuð (enskir pakkar) í pakka. Þessir pakkar gera það mögulegt að takmarka sýnileika bekkja, skipuleggja stærri verkefni og aðgreina nafnrými fyrir mismunandi forritara. Pakkanöfnin eru skipulögð stigveldislega og byrja venjulega með (öfugt) netlén þróunaraðila, t.d. com.google þegar um er að ræða bókasöfn frá Google . Nöfn bekkja þurfa aðeins að vera einstök í pakka. Þetta gerir það mögulegt að sameina flokka frá mismunandi forriturum án þess að valda nafngiftum. Stigveldi pakkaheitanna hefur hins vegar enga merkingarfræðilega merkingu. Hvað varðar sýnileika milli flokka tveggja pakka skiptir ekki máli hvar pakkarnir eru í nafnastigveldinu. Flokkar eru annaðhvort aðeins sýnilegir fyrir bekki í eigin pakka eða fyrir alla pakka.

Ennfremur styður tungumálið þræði ( samtímis keyrandi forritahluta) og undantekningar (enska undantekning). Java inniheldur einnig sjálfvirkan sorphirðu , sem fjarlægir hluti sem ekki er lengur vísað til úr minni.

Java gerir skýran greinarmun á milli viðmóta og flokka . Flokkur getur innleitt hvaða fjölda viðmóta sem er en hefur alltaf nákvæmlega einn grunnflokk . Java styður ekki beint arf frá nokkrum flokkum ( " multiple arf "), en arf yfir nokkrum stigum stigveldi (flokkur barn erfir frá flokki föður, sem aftur erfir frá bekknum afa, osfrv). Það fer eftir sýnileika ( public , protected , default / pakki einkaaðila, private ) flokkur erfir aðferðir og eiginleikar (einnig kölluð sviðum) frá feðrum sínum flokki. Allir flokkar eru - beint eða óbeint - fengnir úr rótarflokknum Object .

Viðamikið bekkjasafn er hluti af Java. Forritaranum er þannig boðið upp á samræmt viðmót (forritunarviðmót, API) sem er óháð undirliggjandi stýrikerfi.

Með Java 2 voru Java Foundation Classes (JFC) kynntir, sem meðal annars veita Swing , sem er notað til að búa til pallháð sjálfstæð grafísk notendaviðmót (GUI) og er byggt á Abstract Window Toolkit .

setningafræði

Java setningafræði / málfræði og merkingarfræði eru skráð í Java Language Specification frá Sun Microsystems . Eftirfarandi dæmi um forrit gefur út skilaboðin „Halló heimur!“, Sem er klassískt meðal forritara og síðan línubrot á framleiðslumiðlinum.

 opinber bekknum HalloWelt {
     public static void main ( String [] args ) {
         Kerfi . út . println ( "Halló heimur!" );
     }
 }

Sköpun og frekari þróun

Tilkoma

Uppruna og þróun Java forritunarmálsins og skyldrar tækni er lýst í greininni Java tækni , svo og hvenær hvaða útgáfa var gefin út.

Oracle og JCP

Auk Oracle sér fjöldi einstaklinga, lítilla og stórra fyrirtækja eins og Apple , IBM , Hewlett-Packard og Siemens um frekari þróun á Java-forskrift Java í Java Community Process (JCP). JCP var hleypt af stokkunum árið 1998 af Sun Microsystems.

Java sem ókeypis hugbúnaður

Sun hafði lofað að birta JDK sína undir GNU General Public License ; með yfirtöku Oracle var opin leyfi einnig tekið yfir. Þann 13. nóvember 2006 voru fyrstu hlutar javac þýðandans og sýndarvélarvettvangurinn gefinn út sem opinn uppspretta . Að auki var opnuð samfélagssíða með OpenJDK , með því að samræma þróunina. [14] Hinn 8. maí 2007 fylgdu stórir hlutar af „Java SE“ frumkóðanum til að búa til JDK. Undantekningin frá þessu var kóða sem Sun hafði ekki nauðsynleg réttindi til að gefa hana út. Þetta er því aðeins fáanlegt í samsettu formi. [15] Sun tilkynnti einnig að þróun sem byggist á OpenJDK kunni að bera „Java Compatible“ merkið ef þau eru vottuð samkvæmt „Java Compatibility Kit“ (JCK).

Áður var Java kóðinn meðal annars innifalinn í hverju JDK, og þó að þetta gerði það mögulegt að skoða það, mátti ekki breyta því að vild. Þess vegna, til viðbótar við opinberu JCP, eru einnig ýmis sjálfstæð samtök sem hafa sett sér það markmið að gera Java aðgengilegt með ókeypis opnum heimildaleyfi. Þekktustu þessara verkefna voru Apache Harmony , Kaffe og GNU Classpath verkefnið . Það er nú önnur stór framkvæmd til viðbótar við OpenJDK sem gefur út núverandi Java útgáfur, Eclipse OpenJ9. Þessi JVM útfærsla var veitt Eclipse Foundation af IBM. [16] OpenJ9 er með leyfi samkvæmt EPL 2.0 , Apache 2.0 og GNU 2.0 með undanþágu frá Classpath . [17]

Mismunur frá svipuðum tungumálum

Að auki býður Java upp á möguleika á að framkvæma ýmis forskriftarmál frá Java kóða. Það eru líka nokkur forritunarmál sem eru sett saman í samræmi við Java kennitölu. Þetta þýðir að einnig er hægt að útfæra forritahluta á öðrum forritunarmálum. Með JDK útgáfu 7, sem kom út 28. júlí 2011, [18] hefur stuðningur við kraftmikil „erlend tungumál“ af sýndarvélinni einnig verið bætt. [19]

JavaScript

Java má ekki rugla saman við forskriftarmálið JavaScript . JavaScript var þróað af Netscape Communications , hét áður LiveScript og fékk nafnið JavaScript sem hluti af samstarfi Netscape og Sun Microsystems. [20]

JavaScript er kraftmikið vélritað , hlutbundið, en fram að ECMAScript 2015 , klassalaust forskriftarmál með svipaða setningafræði og C, Perl eða Java, en er frábrugðið Java á margan hátt. Þrátt fyrir líkindi nafna tveggja forritunarmála, þá er Java frábrugðið JavaScript meira en til dæmis C ++ eða C #. JavaScript er aðallega notað á HTML síðum fyrir innbyggða forritun til að gera gagnvirkt vefforrit kleift.

Spjall

Smalltalk er eitt af elstu hlutbundnu forritunarmálunum yfirleitt. Java erfir frá Smalltalk grunnhugmyndinni um bekkjatré þar sem allir flokkar eru tengdir. Allir flokkar eru fengnir annaðhvort beint eða óbeint úr flokknum java.lang.Object . Að auki hafa hugtökin verið sjálfvirkt sorp (sorphirða) og sýndarvélin tekin auk margs konar annarra eiginleika tungumálsins Smalltalk.

Samt sem áður hefur Smalltalk engar frumstæðar gagnategundir eins og int - jafnvel einföld tala er hlutur. Þetta hugtak var ekki tekið upp af Java, en frá Java 5 og áfram er frumstæðum gagnategundum breytt í samsvarandi hlutategundir með sjálfvirkum kassa og öfugt. [11]

C ++

Java er byggt á setningafræði C ++ forritunarmálsins. Öfugt við C ++ var hins vegar ekki notuð margföld arfleifð eða bendirekni . Flokkar geta aðeins haft einn yfirflokk (einn arfleifð), en þeir geta innleitt hvaða fjölda viðmóta sem er. Tengi samsvara abstrakt flokkum í C ++ sem hafa enga eiginleika eða áþreifanlegar aðferðir, en eru notaðir hugrænt öðruvísi en abstrakt flokkarnir sem einnig eru mögulegir í Java. Innri minni stjórnun er að miklu leyti létt af Java verktaki; þetta er gert með sjálfvirkri sorphirðu . Hins vegar tryggir þetta kerfi ekki fullkomlega útilokun minni leka heldur. Að lokum verður forritarinn að sjá til þess að hlutir sem ekki eru lengur notaðir séu ekki lengur vísaðir af neinum þráðum. Gagnkvæmum tilvísunum í hluti sem ekki er lengur hægt að nálgast með þráðum með tilvísunum er einnig sleppt, þar sem það er undir sorphirðu (GC) hvenær og hvort þessum hlutum er sleppt yfirleitt. Hver hlutaflokkur hefur einnig aðferð sem kallast finalize() , sem hægt er að hringja í sorphirðu til að framkvæma „hreinsunarvinnu“ til viðbótar. Engin trygging er hins vegar fyrir því hvenær eða hvort þetta gerist. Það er því ekki sambærilegt við eyðingarvél frá C ++.

Auk margra arfleifða og minnisreikninga voru aðrar C ++ málgerðir vísvitandi útundan í þróun Java:

Ólíkt C ++, þá er það ekki mögulegt í Java, að rekstraraðilar (til dæmis reiknifyrirtæki eins og + og - , rökréttir rekstraraðilar eins og && og || , eða vísitöluaðilinn [] ) séu of þungir , það er að segja í ákveðnu samhengi með nýja merkingu að veita. Annars vegar einfaldar þetta tungumálið sjálft og kemur í veg fyrir að frumkóðar séu gerðir ólæsilegir hjá símafyrirtækjum sem eru ofhlaðin merkingarfræði sem erfitt er að skilja. Á hinn bóginn, notendaskilgreindar gerðir með ofhlaðnum símafyrirtækjum myndu líkjast meira eins og innbyggðum gerðum í C ++-sérstaklega væri tölulegri kóða auðveldara að skilja þannig. Hins vegar skilgreinir tungumálsskilgreining Java tegundarháða hegðun rekstraraðila + (viðbót fyrir reikningaaðgerðir, annars vegna samtengingar stafstrengja „strengjasamband“) og & , | og ^ (rökrétt fyrir búolískan og bitvíslega fyrir reikninga). Þetta lætur þessa rekstraraðila virðast að minnsta kosti eins og ofhlaðna rekstraraðila.

C ++ smíð sniðmátanna , sem gera kleift að skilgreina reiknirit eða jafnvel heila flokka óháð gagnategundum sem notaðar eru í þeim, var ekki samþykkt í Java. Frá útgáfu 5, Java styður svokallaða samheitalyf , sem leyfa ekki neina metaprogramming , en svipað og C ++ sniðmát leyfa tegund-örugg ílát og þess háttar.

const leitarorðið var frátekið í Java, en hefur enga virkni. Valkosturinn við const (og forvinnslutilskipanir) er final . Öfugt við const , endanlegt erfist ekki í undirskrift aðferðar og gildir því aðeins í núverandi gildissviði. final breyting getur verið flokkur (sem ekki er lengur hægt að draga úr þessu), eiginleiki (sem aðeins er hægt að stilla gildi einu sinni) eða aðferð (sem ekki er hægt að skrifa yfir).

C # (.NET)

Líta má á .NET pallinn frá Microsoft sem samkeppnisvöru á Java. Með forskriftinni C # reyndi Microsoft, sem hluti af .NET stefnu sinni, að ná jafnvægi milli þess að búa til nýtt tungumál og auðveldrar samþættingar fyrirliggjandi íhluta.

Hugmyndalegur munur á Java er einkum fyrir hendi við framkvæmd hringitækja. Í .NET hefur þessi stuðningur fulltrúa (enskir fulltrúar) innleitt hugtak sem er svipað aðgerðarbendingum. Í Java er hægt að ná þessu með aðferðartilvísunum eða lambda tjáningu.

Frekari stuðningur við .NET tungumál sem kallast attributes (eigindir) sem leyfa virkni lýsigagna málsins í kóðanum að stækka (svipuð virkni hefur verið tekin upp í formi athugasemda sem lýst er hér að ofan í Java 5.0). C # inniheldur einnig þætti tungumálsins Visual Basic , til dæmis eiginleika (eiginleika), svo og hugtök um C ++.

Í .NET, eins og í Java, er hægt að lýsa yfir undantekningum frá aðferð. Í Java er hægt að lýsa undantekningum á þann hátt að einnig þarf að vinna úr þeim ( merkt undantekning ).

Hægt er að hringja í Windows kerfisskipanir (Win- ABI boð) í .NET í gegnum kallkerfi vettvangs eða nota C ++ / CLI. Þetta er ekki mögulegt í Java, en með Java Native Interface er möguleiki á að vísa til C og C ++ kóða beint í gegnum DLL og framkvæma það utan Java Virtual Machine .

Scala

Scala er forritunarmál sem sameinar hlutbundna og hagnýta hugmyndafræði og, eins og Java, er hægt að framkvæma á Java Virtual Machine .

Öfugt við Java, og svipað og C #, er gerðarkerfið sameinað og inniheldur tilvísunar- og verðmætategundir. Benutzer können weitere Typen definieren – in Java sind die verfügbaren Werttypen auf die fest vordefinierten primitiven Typen ( int , long , …) beschränkt.

Scala verwendet statt Schnittstellen ( interface ) sogenannte Traits ( traits ), die wiederverwendbare Methodenimplementierungen enthalten können. Weitere Funktionalität, die nicht in Java enthalten ist, umfasst unter anderem Typen und Funktionen höherer Ordnung , Pattern Matching und frei wählbare Methoden- und Klassennamen.

Wie in C# gibt es keine checked exceptions . Allerdings können Methoden mit einer @throws -Annotation versehen werden. Scala entfernt unter anderem das Konzept statischer Methoden und Klassen (ersetzt durch companion objects ), Raw Types , die Notwendigkeit von Getter- und Settermethoden und die unsichere Varianz von Arrays.

Die Varianz generischer Typen muss nicht wie in Java bei der Nutzung erfolgen ( use-site variance ), sondern kann direkt bei der Deklaration angegeben werden ( declaration-site variance ).

Kotlin

Kotlin ist eine plattformübergreifende , statisch typisierte Programmiersprache , die in Bytecode für die Java Virtual Machine (JVM) übersetzt wird, aber auch in JavaScript - Quellcode oder (mittels LLVM ) in Maschinencode umgewandelt werden kann.

Anders als in Java wird bei Kotlin der Datentyp einer Variable nicht vor dem Variablennamen, sondern danach, abgetrennt durch einen Doppelpunkt, notiert. Allerdings unterstützt Kotlin auch Typinferenz , sodass der Typ oft auch weggelassen werden kann, wenn er aus dem Zusammenhang klar ist. Als Anweisungsende genügt der Zeilenumbruch, optional kann jedoch auch ein Semikolon verwendet werden. [21] Zusätzlich zu Klassen und Methoden (in Kotlin: member functions ) aus der objektorientierten Programmierung unterstützt Kotlin prozedurale Programmierung unter Verwendung von Funktionen sowie bestimmte Aspekte der funktionalen Programmierung . [22] Als Einstiegspunkt dient wie bei C u. ä. eine main-Funktion .

Kotlin lässt sich außerdem zur Entwicklung von Android-Apps verwenden und wird dafür seit 2017 offiziell von Google unterstützt. [23] Seit Mai 2019 ist Kotlin die von Google bevorzugte Sprache für Android-Appentwicklung. [24]

Anwendungsarten

Mit Java können zahlreiche verschiedene Arten von Anwendungen erstellt werden.

Java-Webanwendungen

Java-Webanwendungen sind Java-Programme, die auf einem Webserver geladen und gestartet werden und beim Benutzer in einem Webbrowser ablaufen bzw. dargestellt werden. Üblicherweise läuft ein Teil der Webanwendung auf dem Server (die Geschäftslogik und Persistenz ) und ein anderer Teil am Webbrowser (die Logik der grafischen Benutzeroberfläche ). Der Serverteil wird üblicherweise vollständig in Java geschrieben, der Browserteil üblicherweise in HTML und JavaScript. Es ist jedoch auch möglich, Java-Webanwendungen inklusive GUI-Logik vollständig in Java zu schreiben (siehe z. B. Google Web Toolkit oder die Remote Application Platform ). Bekannte Beispiele für Java-Webanwendungen sind Twitter , [25] Jira , Jenkins oder Gmail (das nicht vollständig, aber zu großen Teilen in Java geschrieben ist).

Java-Desktop-Anwendungen

Unter Desktop-Anwendungen oder Applikationen werden normale Desktop-Programme zusammengefasst. Sowohl Internet-Kommunikationsprogramme als auch Spiele oder Office-Anwendungen, die auf einem normalen PC laufen, werden so genannt. Bekannte Beispiele für Java-Desktop-Anwendungen sind die integrierte Entwicklungsumgebung Eclipse , das Filesharing -Programm Vuze oder das Computerspiel Minecraft .

Java-Applets

Java-Applets sind Java-Anwendungen, die normalerweise in einem Webbrowser ausgeführt werden. Sie sind üblicherweise auf einen durch ein spezielles HTML -Tag definierten Bereich einer Webseite beschränkt. Voraussetzung für die Ausführung von Java-Applets ist ein Java-fähiger Browser. Diese Anwendungsform wird seit Java 11 nicht mehr unterstützt, nachdem sie bereits in Java 9 als „veraltet“ gekennzeichnet wurde. [26] [27] [28] [29]

Apps

Apps sind kleinere Applikationen für mobile Geräte wie Handys, Smartphones, PDAs oder Tablets. Sie laufen üblicherweise auf speziellen, für die Ausführung von Java-Anwendungen auf mobilen Geräten optimierten Java-Plattformen wie Java ME .

Apps für das Android Betriebssystem von Google werden in der hier beschriebenen Sprache Java programmiert, basieren aber auf einer abweichenden Klassenbibliotheks - API .

Entwicklungsumgebungen

Es gibt eine große Vielfalt von Entwicklungsumgebungen für Java, sowohl proprietäre als auch freie ( Open Source ). Die meisten Entwicklungsumgebungen für Java sind selbst ebenfalls in Java geschrieben.

Die bekanntesten Open-Source-Umgebungen sind das von der Eclipse Foundation bereitgestellte Eclipse und das von Sun entwickelte NetBeans .

Unter den kommerziellen Entwicklungsumgebungen sind IntelliJ IDEA von JetBrains (welches in der Community Edition [30] jedoch Freie Software ist), JBuilder von Borland sowie JCreator und das auf NetBeans basierende Sun ONE Studio von Sun, am verbreitetsten. Außerdem gibt es noch eine um einige hundert Plugins erweiterte Version von Eclipse, die von IBM unter dem Namen WebSphere Studio Application Developer („WSAD“) vertrieben wurde und ab Version 6.0 Rational Application Developer („RAD“) heißt.

Apple liefert mit macOS ab Version 10.3 die Entwicklungsumgebung Xcode aus, die verschiedene Programmiersprachen unterstützt, allerdings einen Schwerpunkt auf C, C++, Objective-C und Swift setzt. [31] [32] Für das Programmieren von Android-Apps mit Java empfiehlt sich Android Studio .

Für Einsteiger und Ausbildungszwecke konzipiert ist die IDE BlueJ , wo unter anderem die Beziehungen zwischen den verschiedenen Klassen graphisch in Form von Klassendiagrammen dargestellt werden.

Sehr viele Texteditoren bieten Unterstützung für Java, darunter Emacs , jEdit , Atom , Visual Studio Code , Vim , Geany , Jed , Notepad++ und TextPad .

Compiler

Ein Java- Compiler übersetzt Java- Quellcode (Dateiendung „.java“) in einen ausführbaren Code. Grundsätzlich unterscheidet man zwischen Bytecode- und Nativecode -Compilern. Einige Java-Laufzeitumgebungen verwenden einen JIT-Compiler , um zur Laufzeit den Bytecode häufig genutzter Programmteile in nativen Maschinencode zu übersetzen.

Bytecode-Compiler

Im Normalfall übersetzt der Java-Compiler die Programme in einen nicht direkt ausführbaren Bytecode (Dateiendung „.class“), den die Java Runtime Environment (JRE) später ausführt. Die aktuelle HotSpot -Technologie kompiliert den Bytecode zur Laufzeit in nativen Prozessorcode und optimiert diesen abhängig von der verwendeten Plattform. Diese Optimierung findet dabei nach und nach statt, sodass der Effekt auftritt, dass Programmteile nach mehrmaliger Abarbeitung schneller werden. Andererseits führt diese Technik, die ein Nachfolger der Just-in-time-Kompilierung ist, dazu, dass Java-Bytecode theoretisch genau so schnell wie native, kompilierte Programme ausgeführt werden könnte.

Die HotSpot-Technik ist seit der JRE Version 1.3 verfügbar und wurde seitdem stetig weiter verbessert.

Beispiele für Bytecode-Compiler sind javac (Teil des JDK ) und war Jikes (eingestellt, Funktionsumfang bis Java SE 5) von IBM .

Native Compiler

Es existieren auch Compiler für Java, die Java-Quelltexte oder Java-Bytecode in „normalen“ Maschinencode übersetzen können, sogenannte Ahead-of-time-Compiler . Nativ kompilierte Programme haben den Vorteil, keine JavaVM mehr zu benötigen, aber auch den Nachteil, nicht mehr plattformunabhängig zu sein.

Beispiele für native Java Compiler waren Excelsior JET (eingestellt, bis Java SE 7), sowie GNU Compiler for Java (GCJ, eingestellt, bis J2SE 5.0) wie MinGW , Cygwin oder JavaNativeCompiler (JNC).

Wrapper

Als weitere Möglichkeit kann das Java-Programm in ein anderes Programm „eingepackt“ (englisch to wrap ) werden; diese äußere Hülle dient dann als Ersatz für ein Java-Archiv . Sie sucht selbständig nach einer installierten Java-Laufzeitumgebung , um das eigentliche Programm zu starten, und informiert den Benutzer darüber, wo er eine Laufzeitumgebung herunterladen kann, sofern noch keine installiert ist. Es ist also immer noch eine Laufzeitumgebung nötig, um das Programm starten zu können, aber der Anwender erhält eine verständliche Fehlermeldung, die ihm weiterhilft.

Java Web Start ist ein etwas eleganterer und standardisierter Ansatz für diese Lösung – er ermöglicht die einfache Aktivierung von Anwendungen mit einem einzigen Mausklick und garantiert, dass immer die neueste Version der Anwendung ausgeführt wird. Dadurch werden komplizierte Installations- oder Aktualisierungsprozeduren automatisiert.

Beispiele für Java-Wrapper sind JSmooth oder Launch4J . JBuilder von Borland und NSIS sind ebenfalls in der Lage, einen Wrapper für Windows zu erstellen.

Siehe auch

Literatur

Weblinks

Commons : Java (programming language) – Sammlung von Bildern, Videos und Audiodateien

Einzelnachweise

  1. Consolidated JDK 16 Release Notes . 20. Juli 2021 (abgerufen am 27. Juli 2021).
  2. Robert McMillan: Is Java Losing Its Mojo? wired.com , 1. August 2013, abgerufen am 29. September 2018 (englisch): „Java is on the wane, at least according to one outfit that keeps on eye on the ever-changing world of computer programming languages. For more than a decade, it has dominated the Tiobe Programming Community Index – a snapshot of software developer enthusiasm that looks at things like internet search results to measure how much buzz different languages have. But lately, Java has been slipping.“
  3. TIOBE Programming Community Index. tiobe.com, 2015, abgerufen am 3. April 2015 (englisch).
  4. Stephen O'Grady: The RedMonk Programming Language Rankings: January 2020. In: tecosystems. RedMonk, 28. Februar 2020, abgerufen am 5. März 2020 (amerikanisches Englisch).
  5. Silke Hahn: Python schreibt Geschichte: Platz 2 im Programmiersprachen-Ranking. heise online, 3. März 2020, abgerufen am 5. März 2020 .
  6. The Java Language: An Overview. 1995 Sun Whitepaper
  7. Hajo Schulz: Daniel Düsentrieb, C#, Java, C++ und Delphi im Effizienztest . Teil 1. In: c't . Nr.   19 . Heise Zeitschriften Verlag, Hannover 2003, S.   204–207 ( heise.de [abgerufen am 21. Oktober 2010]).
    Hajo Schulz: Daniel Düsentrieb, C#, Java, C++ und Delphi im Effizienztest . Teil 2. In: c't . Nr.   21 . Heise Zeitschriften Verlag, Hannover 2003, S.   222–227 ( heise.de [abgerufen am 21. Oktober 2010]).
  8. JPLewis, Ulrich Neumann: Java pulling ahead? Performance of Java versus C++. Computer Graphics and Immersive Technology Lab, University of Southern California, Januar 2003, abgerufen am 21. Oktober 2010 (englisch): „This article surveys a number of benchmarks and finds that Java performance on numerical code is comparable to that of C++, with hints that Java's relative performance is continuing to improve.“
  9. Robert Hundt: Loop Recognition in C++/Java/Go/Scala . Hrsg.: Scala Days 2011. Stanford CA 27. April 2011 (englisch, scala-lang.org [PDF; 318   kB ; abgerufen am 17. November 2012]): We find that in regards to performance, C++ wins out by a large margin. […] The Java version was probably the simplest to implement, but the hardest to analyze for performance. Specifically the effects around garbage collection were complicated and very hard to tune
  10. CAR Hoare: Monitors: an operating system structuring concept . (PDF) In: Communications of the ACM , 17, Nr. 10, 1974, S. 549–557 doi:10.1145/355620.361161
  11. a b Autoboxing in Java (englisch)
  12. Scott Stanchfield: Java is Pass-by-Value, Dammit! (Nicht mehr online verfügbar.) JavaDude.com, archiviert vom Original am 15. Mai 2008 ; abgerufen am 5. November 2010 (englisch).
  13. 4.1. The Kinds of Types and Values. In: Java Language Specification. Oracle Inc., abgerufen am 24. September 2016 (englisch).
  14. Community-Seite zur Entwicklung des Open-Source-JDKs von Sun
  15. Sun Microsystems Presseankündigung vom 8. Mai 2007 ( Memento vom 11. Mai 2008 im Internet Archive ) (englisch)
  16. Java: IBM überträgt die JVM J9 an die Eclipse Foundation. In: heise online. Abgerufen am 24. September 2019 .
  17. eclipse openj9 license. Eclipse Foundation, 1. August 2018, abgerufen am 24. September 2019 .
  18. Roadmap JDK 7 (englisch)
  19. JDK 7 Features – JSR 292: VM support for non-Java languages (InvokeDynamic) (englisch)
  20. Brendan Eich: JavaScript at Ten Years ( Memento vom 28. Mai 2007 im Internet Archive ) ( MS PowerPoint ; 576 kB).
  21. Semicolons . jetbrains.com. Abgerufen am 8. Februar 2014.
  22. functions . jetbrains.com. Abgerufen am 8. Februar 2014.
  23. Maxim Shafirov: Kotlin on Android. Now official. In: Kotlin Blog. 17. Mai 2017, abgerufen am 18. Juni 2019 (amerikanisches Englisch).
  24. Google I/O: Googles Bekenntnis zu Kotlin. In: heise online. Abgerufen am 18. Juni 2019 .
  25. developer.ibm.com
  26. Deprecated APIs, Features, and Options. Abgerufen am 14. September 2019 .
  27. JEP 289: Deprecate the Applet API. Abgerufen am 14. September 2019 .
  28. Dalibor Topic: Moving to a Plugin-Free Web. Abgerufen am 14. September 2019 .
  29. Aurelio Garcia-Ribeyro: Further Updates to 'Moving to a Plugin-Free Web'. Abgerufen am 14. September 2019 .
  30. JetBrains Community Edition auf GitHub
  31. Apple Xcode Features
  32. Swift for XCode