www.wikidata.de-de.nina.az
Java ist eine objektorientierte Programmiersprache und eine eingetragene Marke des Unternehmens Sun Microsystems welches 2010 von Oracle aufgekauft wurde Die Programmiersprache ist ein Bestandteil der Java Technologie diese besteht grundsatzlich aus dem Java Entwicklungswerkzeug JDK zum Erstellen von Java Programmen und der Java Laufzeitumgebung JRE zu deren Ausfuhrung Die Laufzeitumgebung selbst umfasst die virtuelle Maschine JVM und die mitgelieferten Bibliotheken Java als Programmiersprache sollte nicht mit der Java Technologie gleichgesetzt werden Java Laufzeitumgebungen fuhren Bytecode aus der sowohl aus der Programmiersprache Java als auch aus anderen Programmiersprachen wie Groovy Kotlin und Scala kompiliert werden kann Im Prinzip konnte jede Programmiersprache als Grundlage fur Java Bytecode genutzt werden fur die meisten existieren aber keine passenden Bytecode Compiler JavaLogoLogo der Programmiersprache JavaBasisdatenParadigmen Objektorientierte ProgrammierspracheErscheinungsjahr 1995Designer James Gosling Sun MicrosystemsEntwickler Sun Microsystems Oracle 1 Aktuelle Version Java SE 21 2 20 September 2023 Typisierung stark statischBeeinflusst von C C Ada Simula 67 Smalltalk Objective C Object Pascal Oberon Eiffel Modula 3 Mesa Programmiersprache Simula C UCSD Pascal boxing variadische Funktion Annotation Java Niklaus Wirth Patrick Naughton foreach loopBeeinflusste Groovy Clojure C Scala Vala ActionScript Seed7 Kotlin JavaScriptBetriebssystem plattformunabhangigLizenz GNU General Public License 3 www oracle com java Die Programmiersprache Java dient innerhalb der Java Technologie vor allem zum Formulieren von Programmen Diese liegen zunachst als reiner menschenverstandlicher Text vor dem sogenannten Quellcode Dieser Quellcode ist nicht direkt ausfuhrbar erst der Java Compiler der Teil des Entwicklungswerkzeugs ist ubersetzt ihn in den maschinenverstandlichen Java Bytecode Die Maschine die diesen Bytecode ausfuhrt ist jedoch typischerweise virtuell das heisst der Code wird meist nicht direkt durch Hardware etwa einen Mikroprozessor ausgefuhrt sondern durch entsprechende Software auf der Zielplattform Zweck dieser Virtualisierung ist Plattformunabhangigkeit Das Programm soll ohne weitere Anderung auf jeder Rechnerarchitektur laufen konnen wenn dort eine passende Laufzeitumgebung installiert ist Oracle selbst bietet Laufzeitumgebungen fur die Betriebssysteme Linux macOS Solaris und Windows an Andere Hersteller lassen eigene Java Laufzeitumgebungen fur ihre Plattform zertifizieren Auch in Autos HiFi Anlagen und anderen elektronischen Geraten wird Java verwendet Um die Ausfuhrungsgeschwindigkeit zu erhohen werden Konzepte wie die Just in time Kompilierung und die Hotspot Optimierung verwendet In Bezug auf den eigentlichen Ausfuhrungsvorgang kann die JVM den Bytecode also interpretieren ihn bei Bedarf jedoch auch kompilieren und optimieren Java ist eine der popularsten Programmiersprachen In dem seit 2001 veroffentlichten TIOBE Index lag Java bis 2020 konkurrierend mit C stets auf den ersten beiden seit 2021 mit zusatzlicher Konkurrenz von Python auf den ersten drei Platzen des Rankings 4 5 Nach dem RedMonk Programmiersprachenindex 2019 liegt Java zusammen mit Python auf dem zweiten Platz nach JavaScript 6 7 Inhaltsverzeichnis 1 Grundkonzepte 1 1 Objektorientierung 1 1 1 Beispiel 1 1 1 1 Source Code 1 1 1 2 Konsolenausgabe 1 2 Reflexion 1 3 Annotationen 1 4 Modulare Ausfuhrung auf fernen Computern 2 Merkmale 3 Syntax 4 Entstehung und Weiterentwicklung 4 1 Entstehung 4 2 Oracle und JCP 4 3 Java als freie Software 5 Unterschiede zu ahnlichen Sprachen 5 1 JavaScript 5 2 Smalltalk 5 3 C 5 4 C NET 5 5 Scala 5 6 Kotlin 6 Anwendungsarten 6 1 Java Webanwendungen 6 2 Java Desktop Anwendungen 6 3 Java Applets 6 4 Apps 7 Entwicklungsumgebungen 8 Compiler 8 1 Bytecode Compiler 8 2 Native Compiler 8 3 Wrapper 9 Java User Groups 10 Konferenzen 11 Siehe auch 12 Literatur 13 Weblinks 14 EinzelnachweiseGrundkonzepte BearbeitenDer Entwurf der Programmiersprache Java strebte hauptsachlich funf Ziele an 8 Sie soll eine einfache objektorientierte verteilte und vertraute Programmiersprache sein Sie soll robust und sicher sein Sie soll architekturneutral und portabel sein Sie soll sehr leistungsfahig sein Sie soll interpretierbar parallelisierbar und dynamisch sein Einfachheit Java ist im Vergleich zu anderen objektorientierten Programmiersprachen wie C oder C einfach da es einen reduzierten Sprachumfang besitzt und beispielsweise Operatoruberladung und Mehrfachvererbung nicht unterstutzt Objektorientierung Java gehort zu den objektorientierten Programmiersprachen Verteilt Eine Reihe einfacher Moglichkeiten fur Netzwerkkommunikation von TCP IP Protokollen uber Remote Method Invocation bis zu Webservices werden vor allem uber Javas Klassenbibliothek angeboten die Sprache Java selbst beinhaltet keine direkte Unterstutzung fur verteilte Ausfuhrung Vertrautheit Wegen der syntaktischen Nahe zu C der ursprunglichen Ahnlichkeit der Klassenbibliothek zu Smalltalk Klassenbibliotheken und der Verwendung von Entwurfsmustern in der Klassenbibliothek ist der Umstieg auf Java fur erfahrene Programmierer vergleichsweise einfach Robustheit Viele der Designentscheidungen bei der Definition von Java reduzieren die Wahrscheinlichkeit ungewollter Systemfehler Beispiele dafur sind die starke Typisierung Garbage Collection Ausnahmebehandlung sowie Verzicht auf Zeigerarithmetik Sicherheit Dafur stehen Konzepte wie der Class Loader der die sichere Zufuhrung von Klasseninformationen zur Java Virtual Machine steuert und Security Manager die sicherstellen dass nur Zugriff auf Programmobjekte erlaubt wird fur die entsprechende Rechte vorhanden sind Architekturneutralitat Java wurde so entwickelt dass dieselbe Version eines Programms prinzipiell auf einer beliebigen Computerhardware lauft unabhangig von ihrem Prozessor oder anderen Hardwarebestandteilen Portabilitat Zusatzlich zur Architekturneutralitat ist Java portabel Das heisst dass elementare Datentypen sowohl in ihrer Grosse und internen Darstellung als auch in ihrem arithmetischen Verhalten standardisiert sind Beispielsweise ist ein float immer ein IEEE 754 Float von 32 Bit Lange Dasselbe gilt beispielsweise auch fur die Klassenbibliothek mit deren Hilfe man eine vom Betriebssystem unabhangige GUI erzeugen kann Leistungsfahigkeit Java hat aufgrund der Optimierungsmoglichkeit zur Laufzeit das Potenzial eine bessere Performance als auf Compilezeit Optimierungen begrenzte Sprachen C etc zu erreichen Dem entgegen steht der Overhead durch die Java Laufzeitumgebung sodass die Leistungsfahigkeit von beispielsweise C Programmen in einigen Kontexten ubertroffen 9 10 in anderen aber nicht erreicht wird 11 Um Leistungsfahigkeit zu gewahrleisten kann in der Java Virtual Machine JVM die Performance gemessen werden 12 Interpretierbarkeit Java wird in maschinenunabhangigen Bytecode kompiliert dieser wiederum kann auf der Zielplattform interpretiert werden Die Java Virtual Machine interpretiert Java Bytecode bevor sie ihn aus Performancegrunden kompiliert und optimiert Parallelisierbarkeit Java unterstutzt Multithreading also den parallelen Ablauf von eigenstandigen Programmabschnitten Dazu bietet die Sprache selbst die Schlusselworter synchronized und volatile Konstrukte die das Monitor amp Condition Variable Paradigma von C A R Hoare 13 unterstutzen Die Klassenbibliothek enthalt weitere Unterstutzungen fur parallele Programmierung mit Threads Moderne JVMs bilden einen Java Thread auf Betriebssystem Threads ab und profitieren somit von Prozessoren mit mehreren Rechenkernen Dynamisch Java ist so aufgebaut dass es sich an dynamisch andernde Rahmenbedingungen anpassen lasst Da die Module erst zur Laufzeit gelinkt werden konnen beispielsweise Teile der Software etwa Bibliotheken neu ausgeliefert werden ohne die restlichen Programmteile anpassen zu mussen Interfaces konnen als Basis fur die Kommunikation zwischen zwei Modulen eingesetzt werden die eigentliche Implementierung kann aber dynamisch und beispielsweise auch wahrend der Laufzeit geandert werden Objektorientierung Bearbeiten nbsp Abhangigkeitsgraph der Java Core Klassen erstellt mit jdeps und Gephi In der Mitte des Diagramms sind die am haufigsten verwendeten Klassen Object und String zu sehen Die Grundidee der objektorientierten Programmierung ist Daten und zugehorige Funktionen moglichst eng in einem sogenannten Objekt zusammenzufassen und nach aussen hin zu kapseln Abstraktion Die Absicht dahinter ist grosse Softwareprojekte einfacher zu verwalten und die Qualitat der Software zu erhohen Ein weiteres Ziel der Objektorientierung ist ein hoher Grad der Wiederverwendbarkeit von Softwaremodulen Ein neuer Aspekt von Java gegenuber den objektorientierten Programmiersprachen C und Smalltalk ist die explizite Unterscheidung zwischen Schnittstellen und Klassen die durch entsprechende Schlusselworter interface und class ausgedruckt wird Java unterstutzt kein Erben von mehreren unabhangigen Basisklassen sogenannte Mehrfachvererbung wie in C oder Eiffel wohl aber das Implementieren einer beliebigen Zahl von Schnittstellen womit sich viele der entsprechenden Probleme ebenfalls losen lassen Dabei werden Methodensignaturen und Standardimplementierungen von Methoden an die abgeleiteten Klassen weitergegeben jedoch keine Attribute Java ist nicht vollstandig objektorientiert da die Grunddatentypen int boolean usw keine Objekte sind siehe auch unter Java Syntax Sie werden allerdings ab Java 5 bei Bedarf automatisch und fur den Programmierer transparent mittels Autoboxing in die entsprechenden Objekttypen und umgekehrt umgewandelt 14 Beispiel Bearbeiten Source Code Bearbeiten Diese Klasse ist eine allgemeine Klasse fur jedes beliebige Tier und bietet Methoden an die alle Tiere gemeinsam haben public class Tier Diese Methode lasst das Tier kommunizieren Die Unterklassen dieser Klasse konnen diese Methode uberschreiben und eine passende Implementierung fur das jeweilige Tier anbieten public void kommuniziere Wird von allen Unterklassen verwendet die diese Methode nicht uberschreiben System out println Tier sagt nichts Deklariert die Klasse Hund als Unterklasse der Klasse Tier Die Klasse Hund erbt damit die Felder und Methoden der Klasse Tier class Hund extends Tier Diese Methode ist in der Oberklasse Tier implementiert Sie wird in dieser Klasse uberschrieben und fur die Tierart Hund angepasst Override public void kommuniziere Ruft die Implementierung dieser Methode in der Oberklasse Tier auf super kommuniziere Gibt einen Text in der Konsole aus System out println Hund sagt Wuff Wuff Deklariert die Klasse Katze als Unterklasse der Klasse Tier Die Klasse Katze erbt damit die Felder und Methoden der Klasse Tier class Katze extends Tier Diese Methode ist in der Oberklasse Tier implementiert Sie wird in dieser Klasse uberschrieben und fur die Tierart Katze angepasst Override public void kommuniziere Ruft die Implementierung dieser Methode in der Oberklasse Tier auf super kommuniziere Gibt einen Text auf der Konsole aus System out println Katze sagt Miau class Main Methode die beim Programmstart aufgerufen wird public static void main String args Deklariert eine Variable fur Instanzen der Klassen Hund und Katze Tier tier Erstellt eine Instanz der Klasse Hund und speichert die Instanz in der Variable tier tier new Hund Ruft die Methode Hund kommuniziere auf tier kommuniziere Erstellt eine Instanz der Klasse Katze und speichert die Instanz in der Variable tier tier new Katze Ruft die Methode Katze kommuniziere auf tier kommuniziere Konsolenausgabe Bearbeiten Tier sagt nichts Hund sagt Wuff Wuff Tier sagt nichts Katze sagt Miau Reflexion Bearbeiten Java bietet eine Reflexion API als Bestandteil der Laufzeitumgebung Damit ist es moglich zur Laufzeit auf Klassen und Methoden zuzugreifen deren Existenz oder genaue Auspragung zur Zeit der Programmerstellung nicht bekannt war Haufig wird diese Technik im Zusammenhang mit dem Entwurfsmuster Fabrikmethode Factory Method angewandt Annotationen Bearbeiten Mit Java 5 hat Sun die Programmiersprache um Annotationen erweitert Annotationen erlauben die Notation von Metadaten und ermoglichen bis zu einem gewissen Grad benutzerdefinierte Spracherweiterungen Sinn der Annotationen ist unter anderem die automatische Erzeugung von Code und anderen in der Software Entwicklung wichtigen Dokumenten fur wiederkehrende Muster anhand moglichst kurzer Hinweise im Quelltext Bislang wurden in Java dafur ausschliesslich Javadoc Kommentare mit speziellen JavaDoc Tags verwendet die von Doclets wie zum Beispiel dem XDoclet ausgewertet wurden Annotationen konnen auch in den kompilierten Class Dateien enthalten sein Der Quelltext wird also fur ihre Verwendung nicht benotigt Insbesondere sind die Annotationen auch uber die Reflection API zuganglich So konnen sie zum Beispiel zur Erweiterung des Bean Konzeptes verwendet werden Modulare Ausfuhrung auf fernen Computern Bearbeiten Java bietet die Moglichkeit Klassen zu schreiben die in unterschiedlichen Ausfuhrungsumgebungen ablaufen Beispielsweise lassen sich Applets in Webbrowsern die Java unterstutzen ausfuhren Das Sicherheitskonzept von Java kann dazu eingesetzt werden dass unbekannte Klassen dabei keinen Schaden anrichten konnen was vor allem bei Applets wichtig ist siehe auch Sandbox Beispiele fur in entsprechenden Ausfuhrungsumgebungen ausfuhrbare Java Module sind Applets Servlets Portlets MIDlets Xlets Translets und Enterprise JavaBeans Merkmale Bearbeiten nbsp Duke das Java MaskottchenDer Objektzugriff in Java ist VM intern uber Referenzen implementiert die den aus C oder C bekannten Zeigern ahneln 15 Die Sprachdefinition Java Language Specification bezeichnet sie als Reference Values um deutlich zu machen dass sie im Quelltext des jeweiligen Programms als Call by value ubergeben werden 16 Aus Sicherheitsgrunden erlauben diese nicht die tatsachliche Speicheradresse zu erkennen oder zu modifizieren Sogenannte Zeigerarithmetik ist in Java somit ausgeschlossen Per Design kann so ein haufiger Typ von Fehlern die in anderen Programmiersprachen auftreten von vornherein ausgeschlossen werden Zusammengehorige Klassen werden in Paketen englisch packages zusammengefasst Diese Pakete ermoglichen die Einschrankung der Sichtbarkeit von Klassen eine Strukturierung von grosseren Projekten sowie eine Trennung des Namensraums fur verschiedene Entwickler Die Paketnamen sind hierarchisch aufgebaut und beginnen meist mit dem umgekehrten Internet Domainnamen des Entwicklers also beispielsweise com google bei Klassenbibliotheken die Google zur Verfugung stellt Klassennamen mussen nur innerhalb eines Paketes eindeutig sein Hierdurch ist es moglich Klassen von verschiedenen Entwicklern zu kombinieren ohne dass es zu Namenskonflikten kommt Die Hierarchie der Paketnamen hat allerdings keine semantische Bedeutung Bei der Sichtbarkeit zwischen den Klassen zweier Pakete spielt es keine Rolle wo sich die Pakete in der Namenshierarchie befinden Klassen sind entweder nur fur Klassen des eigenen Paketes sichtbar oder fur alle Pakete Weiter unterstutzt die Sprache Threads nebenlaufig ablaufende Programmteile und Ausnahmen englisch exception Java beinhaltet auch eine automatische Speicherbereinigung englisch garbage collector die nicht mehr referenzierte Objekte aus dem Speicher entfernt Java unterscheidet explizit zwischen Schnittstellen und Klassen Eine Klasse kann beliebig viele Schnittstellen implementieren hat aber stets genau eine Basisklasse Java unterstutzt kein direktes Erben von mehreren Klassen Mehrfachvererbung jedoch die Vererbung uber mehrere Hierarchie Ebenen Klasse Kind erbt von Klasse Vater die ihrerseits von Klasse Grossvater erbt usw Je nach Sichtbarkeit public protected default package private private erbt die Klasse Methoden und Attribute auch Felder genannt von ihren Klassenvorfahren Alle Klassen sind direkt oder indirekt von der Wurzelklasse Object abgeleitet Zu Java gehort eine umfangreiche Klassenbibliothek Dem Programmierer wird damit eine einheitliche vom zugrundeliegenden Betriebssystem unabhangige Schnittstelle Application programming interface API angeboten Mit Java 2 wurden die Java Foundation Classes JFC eingefuhrt die unter anderem Swing bereitstellen das zur Erzeugung plattformunabhangiger grafischer Benutzerschnittstellen GUI dient und auf dem Abstract Window Toolkit basiert Syntax Bearbeiten Hauptartikel Java Syntax Syntax Grammatik und Semantik von Java sind in der Java Language Specification Java Sprachspezifikation von Sun Microsystems dokumentiert Das folgende Beispielprogramm gibt die unter Programmierern klassische Meldung Hallo Welt gefolgt von einem Zeilenumbruch auf dem Ausgabemedium aus public class HalloWelt public static void main String args System out println Hallo Welt Entstehung und Weiterentwicklung BearbeitenEntstehung Bearbeiten Herkunft und Entwicklung der Programmiersprache Java sowie mit ihr verwandter Technik sind im Artikel Java Technologie beschrieben sowie wann welche Version veroffentlicht wurde Oracle und JCP Bearbeiten Neben Oracle kummert sich eine Vielzahl von Einzelpersonen kleiner und grosser Unternehmen wie Apple IBM Hewlett Packard und Siemens beim Java Community Process JCP unter anderem um die Weiterentwicklung der Java Sprachspezifikation Der JCP wurde 1998 von Sun Microsystems ins Leben gerufen Java als freie Software Bearbeiten Sun hatte zugesichert sein JDK unter der GNU General Public License zu veroffentlichen mit der Ubernahme durch Oracle wurde auch die offene Lizenzierung ubernommen Am 13 November 2006 wurden bereits mit dem Compiler javac und der Hotspot Virtual Machine erste Teile als Open Source veroffentlicht Zudem wurde mit OpenJDK eine Community Seite eroffnet mit deren Hilfe die Entwicklung koordiniert werden soll 17 Am 8 Mai 2007 folgten dann grosse Teile des Java SE Quellcodes zum Erstellen eines JDK Eine Ausnahme stellte solcher Code dar fur den Sun nicht die notigen Rechte besass um ihn freizugeben Dieser liegt somit nur in kompilierter Form vor 18 Ebenfalls kundigte Sun an dass Entwicklungen auf Grundlage des OpenJDK das Java Compatible Logo fuhren durfen wenn sie nach dem Java Compatibility Kit JCK zertifiziert sind Zuvor wurde der Quelltext von Java unter anderem bei jedem JDK mitgeliefert und ermoglichte so zwar Einsicht er durfte aber nicht beliebig modifiziert werden Deswegen gibt es neben den offiziellen JCP auch diverse unabhangige Vereinigungen die es sich zum Ziel gesetzt haben ein unter eine freie Open Source Lizenz gestelltes Java bereitzustellen Die bekanntesten dieser Projekte waren Apache Harmony Kaffe und das GNU Classpath Projekt Gegenwartig gibt es neben OpenJDK noch eine weitere grosse Implementierung die aktuelle Java Releases veroffentlicht Eclipse OpenJ9 Diese JVM Implementierung wurde von IBM an die Eclipse Foundation ubergeben 19 OpenJ9 steht mehrfachlizenziert unter EPL 2 0 Apache 2 0 und GNU 2 0 with Classpath Exception 20 Unterschiede zu ahnlichen Sprachen BearbeitenDaruber hinaus bietet Java die Moglichkeit aus Java Code heraus verschiedene Skriptsprachen auszufuhren Ebenfalls gibt es eine Reihe an Programmiersprachen die nach Java Bytecode kompiliert werden Damit lassen sich Programmteile auch in anderen Programmiersprachen umsetzen Mit JDK Version 7 das am 28 Juli 2011 erschienen ist 21 wurde auch die Unterstutzung fur dynamische Fremdsprachen durch die Virtual Machine verbessert 22 JavaScript Bearbeiten Java darf nicht mit der Skriptsprache JavaScript verwechselt werden JavaScript wurde von Netscape Communications entwickelt hiess fruher LiveScript und wurde im Zuge einer Kooperation zwischen Netscape und Sun Microsystems in JavaScript umbenannt 23 JavaScript ist eine dynamisch typisierte objektbasierte aber bis ECMAScript 2015 klassenlose Skriptsprache mit einer ahnlichen Syntax wie C Perl oder Java unterscheidet sich jedoch in vielerlei Hinsicht von Java Trotz der Ahnlichkeit der Namen der beiden Programmiersprachen unterscheidet sich Java starker von JavaScript als zum Beispiel von C oder C JavaScript wurde ursprunglich vornehmlich in HTML Seiten zur eingebetteten Programmierung verwendet um interaktive Webapplikationen zu ermoglichen Mittlerweile wird JavaScript auf der Laufzeitumgebung Node js zunehmend auch fur Server Applikationen genutzt Smalltalk Bearbeiten Smalltalk ist eine der altesten objektorientierten Programmiersprachen uberhaupt Java erbt von Smalltalk die grundsatzliche Konzeption eines Klassenbaumes in den alle Klassen eingehangt werden Dabei stammen alle Klassen entweder direkt oder indirekt von der Klasse java lang Object ab Ausserdem wurden die Konzepte der automatischen Speicherbereinigung garbage collector und der virtuellen Maschine ubernommen sowie eine Vielzahl weiterer Merkmale der Sprache Smalltalk Smalltalk kennt jedoch keine primitiven Datentypen wie zum Beispiel int selbst eine einfache Zahl ist ein Objekt Dieses Konzept wurde nicht nach Java ubernommen primitive Datentypen werden aber ab Java 5 mittels Autoboxing bei Bedarf in die entsprechenden Objekttypen und umgekehrt umgewandelt 14 C Bearbeiten Java lehnt seine Syntax an die der Programmiersprache C an Im Gegensatz zu C fanden jedoch Mehrfachvererbung oder Zeigerarithmetik keinen Einzug Klassen konnen nur eine Superklasse haben Einfachvererbung aber eine beliebige Anzahl von Interfaces implementieren Interfaces entsprechen abstrakten Klassen in C die keine Attribute oder konkrete Methoden besitzen werden allerdings konzeptionell anders als die auch in Java moglichen abstrakten Klassen verwendet Die interne Speicherverwaltung wird dem Java Entwickler weitgehend abgenommen dies erledigt die automatische Speicherbereinigung Allerdings garantiert auch dieser Mechanismus nicht den vollstandigen Ausschluss von Speicherlecks Letztlich muss der Programmierer dafur sorgen dass nicht mehr verwendete Objekte von keinem laufenden Thread mehr referenziert werden Einander referenzierende Objekte die von keinem Thread aus mehr uber Referenzen erreichbar sind werden ebenfalls freigegeben wobei es dem Garbage Collector GC obliegt wann und ob uberhaupt diese Objekte freigegeben werden Jede Objektklasse besitzt zusatzlich eine Methode namens finalize die vom Garbage Collector aufgerufen werden kann um zusatzliche Aufraumarbeiten durchzufuhren Es gibt jedoch keine Garantie wann und ob dies geschieht Sie ist daher nicht mit einem Destruktor aus C vergleichbar Neben Mehrfachvererbung und Speicherarithmetik wurden bei der Entwicklung von Java noch weitere Konstrukte der Sprache C bewusst weggelassen Im Gegensatz zu C ist es in Java nicht moglich Operatoren zum Beispiel arithmetische Operatoren wie und logische Operatoren wie amp amp und oder den Index Operator zu uberladen das heisst in einem bestimmten Kontext mit neuer Bedeutung zu versehen Dies sorgt einerseits fur eine Vereinfachung der Sprache an sich und verhindert dass Quellcodes mit Operatoren die mit schwer nachvollziehbarer Semantik uberladen werden unleserlich gemacht werden Andererseits wurden benutzerdefinierte Typen mit uberladenen Operatoren in C eher wie eingebaute Typen erscheinen konnen vor allem numerischer Code ware so mitunter einfacher nachzuvollziehen Die Sprachdefinition von Java definiert jedoch typabhangiges Verhalten der Operatoren Addition bei arithmetischen Operanden andernfalls zur Verkettung von Zeichenketten string concatenation sowie amp und logisch fur boolean und bitweise fur arithmetische Operanden Das lasst diese Operatoren zumindest wie teilweise uberladene Operatoren erscheinen Das C Konstrukt der Templates die es erlauben Algorithmen oder sogar ganze Klassen unabhangig von den darin verwendeten Datentypen zu definieren wurde in Java nicht ubernommen Ab Version 5 unterstutzt Java aber sogenannte Generics die zwar keinerlei Metaprogrammierung erlauben aber ahnlich wie C Templates typsichere Container und ahnliches ermoglichen In Java wurde das Schlusselwort const reserviert hat aber keine Funktion Die Alternative zu const und Praprozessor Direktiven ist final Im Gegensatz zu const wird final in einer Methodensignatur nicht vererbt und hat somit nur im aktuellen Scope Gultigkeit Den final Modifikator kann eine Klasse die dadurch nicht mehr abgeleitet werden kann ein Attribut dessen Wert so nur einmal gesetzt werden kann oder eine Methode die dadurch unuberschreibbar wird besitzen C NET Bearbeiten Die NET Plattform von Microsoft kann als Konkurrenzprodukt zu Java gesehen werden Mit der Spezifikation von C hat Microsoft im Rahmen seiner NET Strategie versucht den Spagat zwischen der Schaffung einer neuen Sprache und der leichten Integration bestehender Komponenten zu schaffen Konzeptionelle Unterschiede zu Java bestehen insbesondere in der Umsetzung von Callback Mechanismen In NET ist hierzu die Unterstutzung von Delegaten englisch delegates implementiert einem Konzept das mit Funktionszeigern vergleichbar ist In Java kann dies uber Methodenreferenzen oder Lambdaausdrucke erreicht werden Des Weiteren unterstutzen NET Sprachen sogenannte Attribute attributes die es erlauben die Funktionalitat der Sprache uber Metadaten im Code zu erweitern eine ahnliche Funktionalitat wurde in Form der oben beschriebenen Annotations in Java 5 0 ubernommen C enthalt auch Bestandteile der Sprache Visual Basic zum Beispiel Eigenschaften properties sowie Konzepte aus C In NET ist es ebenso wie in Java moglich Ausnahmen exceptions zu einer Methode zu deklarieren In Java konnen Ausnahmen so deklariert werden dass sie auch verarbeitet werden mussen Checked Exception Windows Systembefehle Win ABI Aufrufe konnen in NET uber platform invoke oder mittels C CLI aufgerufen werden Das ist in Java nicht moglich es besteht mit dem Java Native Interface aber die Moglichkeit C und C Code per DLL direkt zu referenzieren und ausserhalb der Java Virtual Machine ausfuhren zu lassen Scala Bearbeiten Scala ist eine Programmiersprache die objektorientierte und funktionale Paradigmen vereint und wie Java auf der Java Virtual Machine ausgefuhrt werden kann Im Gegensatz zu Java und ahnlich wie C ist das Typsystem vereinheitlicht und umfasst Referenz und Werttypen Benutzer konnen weitere Typen definieren in Java sind die verfugbaren Werttypen auf die fest vordefinierten primitiven Typen int long beschrankt Scala verwendet statt Schnittstellen interface sogenannte Traits traits die wiederverwendbare Methodenimplementierungen enthalten konnen Weitere Funktionalitat die nicht in Java enthalten ist umfasst unter anderem Typen und Funktionen hoherer Ordnung Pattern Matching und frei wahlbare Methoden und Klassennamen Wie in C gibt es keine checked exceptions Allerdings konnen 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 Bearbeiten Kotlin ist eine plattformubergreifende statisch typisierte Programmiersprache die in Bytecode fur die Java Virtual Machine JVM ubersetzt 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 unterstutzt Kotlin auch Typinferenz sodass der Typ oft auch weggelassen werden kann wenn er aus dem Zusammenhang klar ist Als Anweisungsende genugt der Zeilenumbruch optional kann jedoch auch ein Semikolon verwendet werden 24 Zusatzlich zu Klassen und Methoden in Kotlin member functions aus der objektorientierten Programmierung unterstutzt Kotlin prozedurale Programmierung unter Verwendung von Funktionen sowie bestimmte Aspekte der funktionalen Programmierung 25 Als Einstiegspunkt dient wie bei C u a eine main Funktion Kotlin lasst sich ausserdem zur Entwicklung von Android Apps verwenden und wird dafur seit 2017 offiziell von Google unterstutzt 26 Seit Mai 2019 ist Kotlin die von Google bevorzugte Sprache fur Android Appentwicklung 27 Anwendungsarten Bearbeiten Hauptartikel Java Anwendung Mit Java konnen zahlreiche verschiedene Arten von Anwendungen erstellt werden Java Webanwendungen Bearbeiten Java Webanwendungen sind Java Programme die auf einem Webserver geladen und gestartet werden und beim Benutzer in einem Webbrowser ablaufen bzw dargestellt werden Ublicherweise lauft ein Teil der Webanwendung auf dem Server die Geschaftslogik und Persistenz und ein anderer Teil am Webbrowser die Logik der grafischen Benutzeroberflache Der Serverteil wird ublicherweise vollstandig in Java geschrieben der Browserteil ublicherweise in HTML und JavaScript Es ist jedoch auch moglich Java Webanwendungen inklusive GUI Logik vollstandig in Java zu schreiben siehe z B Google Web Toolkit oder die Remote Application Platform Bekannte Beispiele fur Java Webanwendungen sind Twitter 28 Jira Jenkins oder Gmail das nicht vollstandig aber zu grossen Teilen in Java geschrieben ist Java Desktop Anwendungen Bearbeiten 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 fur Java Desktop Anwendungen sind die integrierte Entwicklungsumgebung Eclipse das Filesharing Programm Vuze oder das Computerspiel Minecraft Java Applets Bearbeiten Java Applets sind Java Anwendungen die normalerweise in einem Webbrowser ausgefuhrt werden Sie sind ublicherweise auf einen durch ein spezielles HTML Tag definierten Bereich einer Webseite beschrankt Voraussetzung fur die Ausfuhrung von Java Applets ist ein Java fahiger Browser Diese Anwendungsform wird seit Java 11 nicht mehr unterstutzt nachdem sie bereits in Java 9 als veraltet gekennzeichnet wurde 29 30 31 32 Apps Bearbeiten Apps sind kleinere Applikationen fur mobile Gerate wie Handys Smartphones PDAs oder Tablets Sie laufen ublicherweise auf speziellen fur die Ausfuhrung von Java Anwendungen auf mobilen Geraten optimierten Java Plattformen wie Java ME Apps fur das Android Betriebssystem von Google werden in der hier beschriebenen Sprache Java programmiert basieren aber auf einer abweichenden Klassenbibliotheks API Entwicklungsumgebungen BearbeitenEs gibt eine grosse Vielfalt von Entwicklungsumgebungen fur Java sowohl proprietare als auch freie Open Source Die meisten Entwicklungsumgebungen fur 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 33 jedoch Freie Software ist JBuilder von Borland sowie JCreator und das auf NetBeans basierende Sun ONE Studio von Sun am verbreitetsten Ausserdem 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 heisst Apple liefert mit macOS ab Version 10 3 die Entwicklungsumgebung Xcode aus die verschiedene Programmiersprachen unterstutzt allerdings einen Schwerpunkt auf C C Objective C und Swift setzt 34 35 Fur das Programmieren von Android Apps mit Java empfiehlt sich Android Studio Fur Einsteiger und Ausbildungszwecke konzipiert ist die IDE BlueJ wo unter anderem die Beziehungen zwischen den verschiedenen Klassen grafisch in Form von Klassendiagrammen dargestellt werden Sehr viele Texteditoren bieten Unterstutzung fur Java darunter Emacs jEdit Atom Visual Studio Code Vim Geany Jed Notepad und TextPad Compiler BearbeitenEin Java Compiler ubersetzt Java Quellcode Dateiendung java in einen ausfuhrbaren Code Grundsatzlich unterscheidet man zwischen Bytecode und Nativecode Compilern Einige Java Laufzeitumgebungen verwenden einen JIT Compiler um zur Laufzeit den Bytecode haufig genutzter Programmteile in nativen Maschinencode zu ubersetzen Bytecode Compiler Bearbeiten Im Normalfall ubersetzt der Java Compiler die Programme in einen nicht direkt ausfuhrbaren Bytecode Dateiendung class den die Java Runtime Environment JRE spater ausfuhrt Die aktuelle HotSpot Technologie kompiliert den Bytecode zur Laufzeit in nativen Prozessorcode und optimiert diesen abhangig von der verwendeten Plattform Diese Optimierung findet dabei nach und nach statt sodass der Effekt auftritt dass Programmteile nach mehrmaliger Abarbeitung schneller werden Andererseits fuhrt diese Technik die ein Nachfolger der Just in time Kompilierung ist dazu dass Java Bytecode theoretisch genauso schnell wie native kompilierte Programme ausgefuhrt werden konnte Die HotSpot Technik ist seit der JRE Version 1 3 verfugbar und wurde seitdem stetig weiter verbessert Beispiele fur Bytecode Compiler sind javac Teil des JDK und war Jikes eingestellt Funktionsumfang bis Java SE 5 von IBM Native Compiler Bearbeiten Es existieren auch Compiler fur Java die Java Quelltexte oder Java Bytecode in normalen Maschinencode ubersetzen konnen sogenannte Ahead of time Compiler Nativ kompilierte Programme haben den Vorteil keine JavaVM mehr zu benotigen aber auch den Nachteil nicht mehr plattformunabhangig zu sein Beispiele fur 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 Bearbeiten Hauptartikel Wrapper Software Als weitere Moglichkeit kann das Java Programm in ein anderes Programm eingepackt englisch to wrap werden diese aussere Hulle dient dann als Ersatz fur ein Java Archiv Sie sucht selbstandig nach einer installierten Java Laufzeitumgebung um das eigentliche Programm zu starten und informiert den Benutzer daruber wo er eine Laufzeitumgebung herunterladen kann sofern noch keine installiert ist Es ist also immer noch eine Laufzeitumgebung notig um das Programm starten zu konnen aber der Anwender erhalt eine verstandliche Fehlermeldung die ihm weiterhilft Java Web Start ist ein etwas eleganterer und standardisierter Ansatz fur diese Losung er ermoglicht die einfache Aktivierung von Anwendungen mit einem einzigen Mausklick und garantiert dass immer die neueste Version der Anwendung ausgefuhrt wird Dadurch werden komplizierte Installations oder Aktualisierungsprozeduren automatisiert Beispiele fur Java Wrapper sind JSmooth oder Launch4J JBuilder von Borland und NSIS sind ebenfalls in der Lage einen Wrapper fur Windows zu erstellen Java User Groups BearbeitenSowohl international als auch in Deutschland gibt es Java User Groups JUG Der Zweck dieser Vereinigungen an Java Anwendern ist freier Informationsaustausch Konferenzen BearbeitenWichtige deutschsprachige Konferenzen rund um Java sind JAX Java Tage JavaLandInternationale Konferenzen mit dem Schwerpunkt Java JavaOneSiehe auch BearbeitenVisual J Literatur BearbeitenChristian Ullenboom Java ist auch eine Insel Galileo Computing 13 Auflage 2017 ISBN 978 3 8362 4119 9 Guido Kruger Heiko Hansen Java Programmierung Das Handbuch zu Java 8 O Reilly 8 Auflage 2014 ISBN 978 3 95561 514 7 Christian Ullenboom Java 7 Mehr als eine Insel Galileo Computing 1 Auflage 2011 ISBN 978 3 8362 1507 7 Florian Siebler Einfuhrung in Java mit BlueJ Galileo Computing 1 Auflage 2011 ISBN 978 3 8362 1630 2 Dirk Louis Peter Muller Java 7 Das Handbuch Markt amp Technik 1 Auflage 2011 ISBN 978 3 8272 4353 9 James Gosling Bill Joy Guy Steele Gilad Bracha The Java Language Specification Addison Wesley 3 Auflage 2005 ISBN 0 321 24678 0 Online Michael Bonacina Java Programmieren fur Einsteiger BMU Verlag 2 Auflage 2018 ISBN 978 3 96645 003 4 Weblinks Bearbeiten nbsp Wikiversity Java Programmiersprache Kursmaterialien nbsp Commons Java programming language Sammlung von Bildern Videos und Audiodateien Java Homepage bei Oracle englisch Einzelnachweise Bearbeiten www oracle com JDK 21 www lemondeinformatique fr 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 TIOBE Programming Community Index tiobe com 2015 abgerufen am 3 April 2015 englisch Stephen O Grady The RedMonk Programming Language Rankings January 2020 In tecosystems RedMonk 28 Februar 2020 abgerufen am 5 Marz 2020 amerikanisches Englisch Silke Hahn Python schreibt Geschichte Platz 2 im Programmiersprachen Ranking heise online 3 Marz 2020 abgerufen am 5 Marz 2020 The Java Language An Overview 1995 Sun Whitepaper Hajo Schulz Daniel Dusentrieb 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 Dusentrieb 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 J P Lewis 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 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 David Georg Reichelt Java pulling ahead JVM Performance Regressionen fruhzeitig erkennen und vermeiden Informatik Aktuell Alkmene Verlag 4 Februar 2022 abgerufen am 6 Februar 2022 Im JVM Umfeld ist vor allem JMH zur Definition von Benchmarks verbreitet Die regelmassige Ausfuhrung von JMH Benchmarks wird aus Ressourcengrunden aber nur selten durchgefuhrt Statt immer alle Regressions Benchmarks oder Tests auszufuhren ist es viel schneller nur diejenigen auszufuhren bei denen eine Regression moglich ist Daher ermoglicht das Jenkins Plugin Peass CI die Automatisierung der Regressions Testselektion fur JMH so dass in der aktuellen Version nur noch fur diese Version relevante Workloads getestet werden C A R 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 a b Autoboxing in Java englisch Scott Stanchfield Java is Pass by Value Dammit Nicht mehr online verfugbar JavaDude com archiviert vom Original am 15 Mai 2008 abgerufen am 5 November 2010 englisch 4 1 The Kinds of Types and Values In Java Language Specification Oracle Inc abgerufen am 24 September 2016 englisch Community Seite zur Entwicklung des Open Source JDKs von Sun Sun Microsystems Presseankundigung vom 8 Mai 2007 Memento vom 11 Mai 2008 im Internet Archive englisch Java IBM ubertragt die JVM J9 an die Eclipse Foundation In heise online Abgerufen am 24 September 2019 eclipse openj9 license Eclipse Foundation 1 August 2018 abgerufen am 24 September 2019 Roadmap JDK 7 englisch JDK 7 Features JSR 292 VM support for non Java languages InvokeDynamic englisch Brendan Eich JavaScript at Ten Years Memento vom 28 Mai 2007 im Internet Archive MS PowerPoint 576 kB Semicolons jetbrains com abgerufen am 8 Februar 2014 Vorlage Cite web temporar functions jetbrains com abgerufen am 8 Februar 2014 Vorlage Cite web temporar Maxim Shafirov Kotlin on Android Now official In Kotlin Blog 17 Mai 2017 abgerufen am 18 Juni 2019 amerikanisches Englisch Google I O Googles Bekenntnis zu Kotlin In heise online Abgerufen am 18 Juni 2019 developer ibm com Deprecated APIs Features and Options Abgerufen am 14 September 2019 JEP 289 Deprecate the Applet API Abgerufen am 14 September 2019 Dalibor Topic Moving to a Plugin Free Web Abgerufen am 14 September 2019 Aurelio Garcia Ribeyro Further Updates to Moving to a Plugin Free Web Abgerufen am 14 September 2019 JetBrains Community Edition auf GitHub Apple Xcode Features Swift for XCode nbsp Dieser Artikel ist als Audiodatei verfugbar source source Speichern 24 49 min 28 MB Text der gesprochenen Version 14 Januar 2011 Mehr Informationen zur gesprochenen Wikipedia Normdaten Sachbegriff GND 4401313 9 lobid OGND AKS Abgerufen von https de wikipedia org w index php title Java Programmiersprache amp oldid 237534358