| Dieser Artikel ist Teil einer Reihe über die Programmiersprache Java. |
|
Java ist eine objektorientierte Programmiersprache der höheren Ebene , die universell einsetzbar , speichersicher und programmiersicher ist. Sie ermöglicht es Programmierern, Code einmal zu schreiben und überall auszuführen (WORA) [ 17 ] , was bedeutet, dass kompilierter Java-Code auf allen Java-fähigen Plattformen ohne erneute Kompilierung ausgeführt werden kann. [ 18 ] Java-Anwendungen werden üblicherweise in Bytecode kompiliert , der auf jeder Java Virtual Machine (JVM) unabhängig von der zugrunde liegenden Computerarchitektur ausgeführt werden kann . [ 19 ] Die Syntax von Java ähnelt der von C und C++ , bietet aber weniger Low-Level -Funktionen. Die Java- Laufzeitumgebung ermöglicht dynamische Funktionen (wie reflexive Programmierung (Reflection) und Laufzeitcodemodifikation), die in traditionellen kompilierten Sprachen üblicherweise nicht verfügbar sind.
Java erlangte kurz nach seiner Veröffentlichung große Popularität und ist seither eine weit verbreitete Programmiersprache. [ 20 ] Laut GitHub war Java 2022 die drittbeliebteste Programmiersprache . [ 21 ] Obwohl Java nach wie vor sehr beliebt ist, hat seine Nutzung in den letzten Jahren allmählich abgenommen, während andere Sprachen, die die JVM nutzen, an Popularität gewonnen haben. [ 22 ]
Java wurde von James Gosling bei Sun Microsystems entwickelt und im Mai 1995 als Kernkomponente der Java-Plattform von Sun veröffentlicht . Die ursprünglichen und Referenzimplementierungen der Java- Compiler , virtuellen Maschinen (VMs) und Klassenbibliotheken wurden von Sun unter proprietären Lizenzen herausgegeben . Im Mai 2007 lizenzierte Sun , gemäß den Vorgaben des Java Community Process , die meisten seiner Java-Technologien unter der GPL-2.0- Lizenz neu. Oracle , das Sun 2010 übernahm, bietet seine eigene HotSpot Java Virtual Machine an. Die offizielle Referenzimplementierung ist jedoch die OpenJDK JVM, eine Open-Source-Software, die von den meisten Entwicklern verwendet wird und die Standard-JVM fast aller Linux-Distributionen ist .
Stand März 2026 ist Java 26 die aktuelle Version.
Geschichte


James Gosling , Mike Sheridan und Patrick Naughton initiierten das Java-Sprachprojekt im Juni 1991. [ 23 ] Java war ursprünglich für interaktives Fernsehen konzipiert, aber für die damalige digitale Kabelfernsehbranche noch zu fortschrittlich. [ 24 ] Die Sprache hieß zunächst Oak, nach einer Eiche , die vor Goslings Büro stand. Später trug das Projekt den Namen Green und wurde schließlich in Java umbenannt , abgeleitet von Java-Kaffee , einer Kaffeesorte aus Indonesien . [ 25 ] Gosling entwarf Java mit einer C / C++- ähnlichen Syntax, die System- und Anwendungsprogrammierern vertraut sein sollte. [ 26 ]
Sun Microsystems veröffentlichte 1996 die erste öffentliche Implementierung als Java 1.0. [ 27 ] Sie versprach die „Write Once, Run Anywhere “-Funktionalität (WORA) und bot kostenlose Laufzeitumgebungen auf gängigen Plattformen . Java war relativ sicher, bot konfigurierbare Sicherheitsfunktionen und ermöglichte Zugriffsbeschränkungen für Netzwerk und Dateien. Die wichtigsten Webbrowser integrierten bald die Möglichkeit, Java-Applets in Webseiten auszuführen , und Java erfreute sich schnell großer Beliebtheit. Der Java-1.0-Compiler wurde von Arthur van Hoff in Java neu geschrieben , um die Java-1.0-Sprachspezifikation strikt einzuhalten. [ 28 ] Mit dem Erscheinen von Java 2 (zunächst als J2SE 1.2 im Dezember 1998/99 veröffentlicht) gab es neue Versionen mit verschiedenen Konfigurationen für unterschiedliche Plattformen. J2EE enthielt Technologien und APIs für Unternehmensanwendungen, die typischerweise in Serverumgebungen liefen, während J2ME für mobile Anwendungen optimierte APIs bot. Die Desktop-Version wurde in J2SE umbenannt. Im Jahr 2006 benannte Sun aus Marketinggründen die neuen J2-Versionen in Java EE , Java ME und Java SE um.
1997 wandte sich Sun Microsystems an das Normungsgremium ISO/IEC JTC 1 und später an Ecma International , um Java zu formalisieren, zog sich jedoch bald aus dem Prozess zurück. [ 29 ] [ 30 ] [ 31 ] Java ist weiterhin ein De-facto- Standard , der durch den Java Community Process kontrolliert wird . [ 32 ] Zeitweise stellte Sun die meisten seiner Java-Implementierungen kostenlos zur Verfügung, obwohl es sich um proprietäre Software handelte. Einnahmen generierte Sun mit Java durch den Verkauf von Lizenzen für Spezialprodukte wie das Java Enterprise System.
Am 13. November 2006 veröffentlichte Sun einen Großteil seiner Java Virtual Machine (JVM) als freie und Open-Source-Software (FOSS) unter den Bedingungen der GPL-2.0- Lizenz. Am 8. Mai 2007 schloss Sun den Prozess ab und stellte den gesamten Kerncode der JVM unter den Bedingungen freier Software /Open Source zur Verfügung, mit Ausnahme eines kleinen Teils des Codes, an dem Sun nicht die Urheberrechte besaß. [ 33 ]
Suns Vizepräsident Rich Green erklärte, Suns ideale Rolle in Bezug auf Java sei die eines Evangelisten . [ 34 ] Nach der Übernahme von Sun Microsystems durch die Oracle Corporation in den Jahren 2009/10 bezeichnete sich Oracle als Hüter der Java-Technologie mit dem unermüdlichen Bestreben, eine partizipative und transparente Community zu fördern. [ 35 ] Dies hielt Oracle jedoch nicht davon ab, kurz darauf Google wegen der Verwendung von Java im Android SDK zu verklagen (siehe Abschnitt Android ).
Am 2. April 2010 trat James Gosling von seinem Posten bei Oracle zurück . [ 36 ]
Im Januar 2016 kündigte Oracle an, dass Java-Laufzeitumgebungen auf Basis von JDK 9 das Browser-Plugin einstellen werden. [ 37 ]
Java-Software läuft auf den meisten Geräten, von Laptops bis zu Rechenzentren , von Spielekonsolen bis zu wissenschaftlichen Supercomputern . [ 38 ]
Oracle (und andere) empfehlen dringend, veraltete und nicht mehr unterstützte Java-Versionen zu deinstallieren, da in älteren Versionen ungelöste Sicherheitsprobleme bestehen. [ 39 ]
Prinzipien
Bei der Entwicklung der Programmiersprache Java wurden fünf Hauptziele verfolgt: [ 18 ]
- Es muss einfach, objektorientiert und vertraut sein.
- Es muss robust und sicher sein.
- Es muss architekturneutral und portabel sein.
- Es muss mit hoher Leistung ausgeführt werden.
- Es muss interpretiert , verkettet und dynamisch sein .
Versionen
Stand Juni 2026 werden Java 8, 11, 17, 21 und 25 als Langzeitsupport- Versionen (LTS) unterstützt. [ 40 ]
Oracle veröffentlichte im Januar 2019 das letzte kostenlose öffentliche Update für die ältere Version Java 8 LTS zur kommerziellen Nutzung. Ansonsten wird Java 8 für den privaten Gebrauch weiterhin unbefristet mit öffentlichen Updates unterstützt. Andere Anbieter wie Adoptium bieten weiterhin kostenlose Builds der OpenJDK-LTS-Versionen (Long-Term Support) an. Diese Builds können zusätzliche Sicherheitspatches und Fehlerbehebungen enthalten. [ 41 ]
Die wichtigsten Java-Versionen und ihre Veröffentlichungsdaten:
| Version | Datum |
|---|---|
| JDK Beta | 1995 |
| JDK 1.0 | 23. Januar 1996 [ 42 ] |
| JDK 1.1 | 19. Februar 1997 |
| J2SE 1.2 | 8. Dezember 1998 |
| J2SE 1.3 | 8. Mai 2000 |
| J2SE 1.4 | 6. Februar 2002 |
| J2SE 5.0 | 30. September 2004 |
| Java SE 6 | 11. Dezember 2006 |
| Java SE 7 | 28. Juli 2011 |
| Java SE 8 (LTS) | 18. März 2014 |
| Java SE 9 | 21. September 2017 |
| Java SE 10 | 20. März 2018 |
| Java SE 11 (LTS) | 25. September 2018 [ 43 ] |
| Java SE 12 | 19. März 2019 |
| Java SE 13 | 17. September 2019 |
| Java SE 14 | 17. März 2020 |
| Java SE 15 | 15. September 2020 [ 44 ] |
| Java SE 16 | 16. März 2021 |
| Java SE 17 (LTS) | 14. September 2021 |
| Java SE 18 | 22. März 2022 |
| Java SE 19 | 20. September 2022 |
| Java SE 20 | 21. März 2023 |
| Java SE 21 (LTS) | 19. September 2023 [ 45 ] |
| Java SE 22 | 19. März 2024 |
| Java SE 23 | 17. September 2024 |
| Java SE 24 | 18. März 2025 [ 46 ] |
| Java SE 25 (LTS) | 16. September 2025 [ 47 ] |
| Java SE 26 | 17. März 2026 [ 48 ] |
Ausgaben
| Java-Plattform -Editionen |
|---|
|
Sun hat vier Java-Editionen definiert und unterstützt, die auf unterschiedliche Anwendungsumgebungen abzielen, und viele seiner APIs so segmentiert, dass sie zu einer der Plattformen gehören. Die Plattformen sind:
- Java Card für Smartcards. [ 49 ]
- Java Platform, Micro Edition (Java ME) – für Umgebungen mit begrenzten Ressourcen. [ 50 ]
- Java Platform, Standard Edition (Java SE) – targeting workstation environments.[51]
- Java Platform, Enterprise Edition (Java EE) – targeting large distributed enterprise or Internet environments.[52]
The classes in the Java APIs are organized into separate groups called packages. Each package contains a set of related interfaces, classes, subpackages and exceptions.
Sun also provided an edition called Personal Java that has been superseded by later, standards-based Java ME configuration-profile pairings.
Execution system
Java JVM and bytecode
One design goal of Java is portability, which means that programs written for the Java platform must run similarly on any combination of hardware and operating system with adequate run time support. This is achieved by compiling the Java language code to an intermediate representation called JVM bytecode, instead of directly to architecture-specific machine code. JVM bytecode instructions are analogous to machine code, but they are intended to be executed by a virtual machine (VM) written specifically for the host hardware. End-users commonly use a Java Runtime Environment (JRE) installed on their device for standalone Java applications or a web browser for Java applets.
Standard libraries provide a generic way to access host-specific features such as graphics, threading, and networking.
The use of universal bytecode makes porting simple. However, the overhead of interpreting bytecode into machine instructions made interpreted programs almost always run more slowly than native executables. Just-in-time (JIT) compilers that compile byte-codes to machine code during runtime were introduced from an early stage. Java's Hotspot compiler is actually two compilers in one, with GraalVM (included in e.g. Java 11, but removed as of Java 16) allowing tiered compilation.[53] Java itself is platform-independent and is adapted to the particular platform it is to run on by a Java virtual machine (JVM), which translates the JVM bytecode into the platform's machine language.[54]
Performance
Java-Programme gelten gemeinhin als langsamer und speicherintensiver als C++- Programme . [ 55 ] [ 56 ] Die Ausführungsgeschwindigkeit von Java-Programmen verbesserte sich jedoch deutlich mit der Einführung der Just-in-Time-Kompilierung in Java 1.1 ( 1997/1998) [ 57 ] , der Hinzufügung von Sprachmerkmalen zur besseren Codeanalyse (wie innere Klassen, die Klasse `StringBuilder`, optionale Assertions usw.) und Optimierungen der Java Virtual Machine (JVM), beispielsweise der Umstellung von HotSpot auf Suns Standard-JVM im Jahr 2000. Mit Java 1.5 wurde die Leistung durch die Einführung des java.util.concurrentPakets, das sperrfreie Implementierungen von ` ConcurrentMap` und anderen Multicore-Collections enthielt, weiter verbessert und mit Java 1.6 nochmals gesteigert.
Nicht-JVM
Einige Plattformen bieten direkte Hardwareunterstützung für Java; es gibt Mikrocontroller, die JVM-Bytecode in Hardware anstelle einer Software-Java-Virtual-Machine ausführen können, [ 58 ] und einige ARM- basierte Prozessoren könnten über ihre Jazelle- Option Hardwareunterstützung für die Ausführung von JVM-Bytecode bieten , obwohl diese Unterstützung in den aktuellen Implementierungen von ARM größtenteils weggefallen ist.
Automatische Speicherverwaltung
Java verwendet einen automatischen Garbage Collector zur Speicherverwaltung im Objektlebenszyklus . Der Programmierer legt fest, wann Objekte erstellt werden, und die Java-Laufzeitumgebung ist für die Freigabe des Speichers verantwortlich, sobald Objekte nicht mehr verwendet werden. Sobald keine Referenzen mehr auf ein Objekt existieren, kann der nicht mehr erreichbare Speicher automatisch vom Garbage Collector freigegeben werden. Ein Speicherleck kann dennoch auftreten, wenn der Code eines Programmierers eine Referenz auf ein nicht mehr benötigtes Objekt hält, typischerweise wenn nicht mehr benötigte Objekte in Containern gespeichert werden, die noch verwendet werden. [ 59 ] Werden Methoden für ein nicht existierendes Objekt aufgerufen, wird eine NullPointerException ausgelöst. [ 60 ] [ 61 ]
Eine der Grundideen des automatischen Speichermanagements von Java ist, Programmierern die manuelle Speicherverwaltung zu ersparen. In manchen Sprachen wird Speicher für die Objekterzeugung implizit auf dem Stack allokiert oder explizit auf dem Heap allokiert und freigegeben . Im letzteren Fall liegt die Verantwortung für die Speicherverwaltung beim Programmierer. Wird ein Objekt nicht freigegeben, entsteht ein Speicherleck . [ 59 ] Versucht das Programm, auf bereits freigegebenen Speicher zuzugreifen oder diesen freizugeben, ist das Ergebnis undefiniert und schwer vorherzusagen, und das Programm wird wahrscheinlich instabil oder stürzt ab. Dies lässt sich teilweise durch die Verwendung von Smartpointern beheben , diese erhöhen jedoch den Aufwand und die Komplexität. Die automatische Speicherbereinigung (Garbage Collection) verhindert keine logischen Speicherlecks, d. h. solche, bei denen der Speicher zwar referenziert, aber nie verwendet wird. [ 59 ]
Die automatische Speicherbereinigung (Garbage Collection) kann jederzeit erfolgen. Idealerweise findet sie statt, wenn ein Programm im Leerlauf ist. Sie wird garantiert ausgelöst, wenn nicht genügend freier Speicher auf dem Heap vorhanden ist, um ein neues Objekt zu erstellen; dies kann zu einem kurzzeitigen Stillstand des Programms führen. Eine explizite Speicherverwaltung ist in Java nicht möglich, jedoch kann die JVM die automatische Speicherbereinigung manuell durchführen [ 62 ] .
Java unterstützt keine Zeigerarithmetik im C/C++-Stil [ 63 ] , bei der Objektadressen arithmetisch manipuliert werden können (z. B. durch Addition oder Subtraktion eines Offsets). Dies ermöglicht es dem Garbage Collector, referenzierte Objekte neu zu platzieren und gewährleistet Typsicherheit und Datensicherheit.
Wie in C++ und einigen anderen objektorientierten Sprachen werden Variablen primitiver Datentypen in Java entweder direkt in Feldern (für Objekte) oder auf dem Stack (für Methoden) gespeichert, anstatt auf dem Heap, wie es üblicherweise bei nicht-primitiven Datentypen der Fall ist (siehe jedoch Escape-Analyse ). Dies war eine bewusste Entscheidung der Java-Entwickler aus Performancegründen.
Java bietet verschiedene Arten von Garbage Collectoren. Seit Java 9 verwendet HotSpot standardmäßig den Garbage First Garbage Collector (G1GC). [ 64 ] Es gibt jedoch auch einige andere Garbage Collector zur Heap-Verwaltung, wie beispielsweise den Z Garbage Collector (ZGC), der in Java 11 eingeführt wurde, und den Shenandoah GC, der in Java 12 eingeführt wurde, aber in den von Oracle erstellten OpenJDK-Builds nicht verfügbar ist. Shenandoah ist stattdessen in Drittanbieter-Builds von OpenJDK, wie z. B. Eclipse Temurin , verfügbar . Für die meisten Java-Anwendungen ist G1GC ausreichend. In früheren Java-Versionen, wie z. B. Java 8, wurde der Parallel Garbage Collector als Standard-Garbage-Collector verwendet.
Die Lösung des Speichermanagementproblems entbindet den Programmierer nicht von der Last, auch andere Arten von Ressourcen wie Netzwerk- oder Datenbankverbindungen, Dateihandles usw. ordnungsgemäß zu handhaben, insbesondere im Falle von Ausnahmen.
Syntax

Die Syntax von Java ist stark von C++ und C beeinflusst . Im Gegensatz zu C++, das die Syntax für strukturierte, generische und objektorientierte Programmierung vereint, wurde Java fast ausschließlich als objektorientierte Sprache entwickelt. [ 18 ] Der gesamte Code wird innerhalb von Klassen geschrieben, und jedes Datenelement ist ein Objekt, mit Ausnahme der primitiven Datentypen (d. h. Ganzzahlen, Gleitkommazahlen, boolesche Werte und Zeichen), die aus Performancegründen keine Objekte sind.
Im Gegensatz zu C++ unterstützt Java weder Operatorüberladung [ 65 ] noch Mehrfachvererbung für Klassen, obwohl Mehrfachvererbung für Schnittstellen unterstützt wird . [ 66 ]
Java verwendet Kommentare ähnlich wie C++. Es gibt drei verschiedene Kommentarstile: einen einzeiligen Stil, der mit zwei Schrägstrichen (\ //) gekennzeichnet ist, einen mehrzeiligen Stil, der mit \ beginnt /*und mit \ endet */, und den Javadoc -Kommentarstil, der mit \ beginnt /**und mit \ endet . Der Javadoc-Kommentarstil ermöglicht es dem Benutzer, die Javadoc-Datei auszuführen, um eine Dokumentation für das Programm zu erstellen. Diese kann von einigen integrierten Entwicklungsumgebungen (IDEs) wie Eclipse*/ gelesen werden, sodass Entwickler direkt in der IDE auf die Dokumentation zugreifen können.
Hallo Welt
Nachfolgend ein Beispiel für ein „Hallo Welt!“-Programm in der traditionellen Java-Syntax:
public class HelloWorld {public static void main ( String [] args ) {System.out.println ( " Hallo Welt! " ) ;}}Mit Java 25 wurde eine vereinfachte Syntax für die Hauptklasse und die Hauptmethode eingeführt, die es Benutzern ermöglicht, kleine Java-Programme prägnant zu schreiben: [ 67 ] [ 68 ]
void main () {IO.println ( " Hallo Welt!" ) ;}Spezialklassen
Applet
Java-Applets waren Programme, die in andere Anwendungen, hauptsächlich in Webseiten, die in Webbrowsern angezeigt wurden, eingebettet waren. Die Java-Applet-API wurde mit der Veröffentlichung von Java 9 im Jahr 2017 als veraltet eingestuft. [ 69 ] [ 70 ]
Servlet
Die Java-Servlet- Technologie bietet Webentwicklern einen einfachen und konsistenten Mechanismus, um die Funktionalität eines Webservers zu erweitern und auf bestehende Geschäftssysteme zuzugreifen. Servlets sind serverseitige Java-EE-Komponenten, die Antworten auf Clientanfragen generieren . In den meisten Fällen bedeutet dies die Generierung von HTML- Seiten als Antwort auf HTTP- Anfragen. Es stehen jedoch auch zahlreiche andere Standard-Servlet-Klassen zur Verfügung, beispielsweise für die WebSocket- Kommunikation.
Die Java-Servlet-API wurde teilweise durch zwei Standard-Java-Technologien für Webdienste ersetzt (wird aber intern immer noch verwendet):
- Die Java API für RESTful Web Services (JAX-RS 2.0) ist nützlich für AJAX-, JSON- und REST-Dienste, und
- Die Java API für XML-Webdienste (JAX-WS) ist nützlich für SOAP -Webdienste .
Typische Implementierungen dieser APIs auf Anwendungsservern oder Servlet-Containern verwenden ein Standard-Servlet zur Abwicklung aller Interaktionen mit den HTTP- Anfragen und -Antworten, das die eigentliche Geschäftslogik an die Webdienstmethoden delegiert.
JavaServer Pages
JavaServer Pages ( JSP ) sind serverseitige Java-EE-Komponenten, die Antworten, typischerweise HTML- Seiten, auf HTTP- Anfragen von Clients generieren . JSPs betten Java-Code mithilfe der speziellen Trennzeichen `<html><% ` und ` </html>` in eine HTML-Seite ein. Beim ersten Zugriff wird eine JSP zu einem Java- Servlet%> kompiliert , einer eigenständigen Java-Anwendung. Anschließend erzeugt das generierte Servlet die Antwort. [ 71 ]
Swing-Anwendung
Swing ist eine Bibliothek für grafische Benutzeroberflächen (GUI) der Java SE-Plattform. Dank des modularen Look-and-Feel -Systems von Swing lässt sich das Erscheinungsbild individuell anpassen . Sun bietet Nachbildungen von Windows , GTK+ und Motif an. Apple stellt für macOS das Aqua -Look-and-Feel bereit . Während frühere Implementierungen dieser Look-and-Feels als unzureichend galten, behebt Swing in Java SE 6 dieses Problem durch die Verwendung nativer GUI-Widget -Zeichenroutinen der zugrundeliegenden Plattformen. [ 72 ]
JavaFX-Anwendung
JavaFX ist eine Softwareplattform zur Entwicklung und Bereitstellung von Desktop-Anwendungen sowie umfangreichen Webanwendungen , die auf einer Vielzahl von Geräten ausgeführt werden können. JavaFX sollte Swing als Standardbibliothek für grafische Benutzeroberflächen (GUI) in Java SE ablösen . Seit JDK 11 ist JavaFX jedoch nicht mehr Teil des JDK-Kerns, sondern als separates Modul verfügbar. [ 73 ] JavaFX unterstützt Desktop-Computer und Webbrowser unter Microsoft Windows , Linux und macOS . JavaFX bietet keine Unterstützung für das native Erscheinungsbild des jeweiligen Betriebssystems. [ 74 ]
Generika
Im Jahr 2004 wurden Generics mit J2SE 5.0 in die Java-Sprache eingeführt. Vor ihrer Einführung musste jede Variablendeklaration einen bestimmten Typ aufweisen. Dies stellt beispielsweise für Containerklassen ein Problem dar, da es keine einfache Möglichkeit gibt, einen Container zu erstellen, der nur bestimmte Objekttypen akzeptiert. Entweder arbeitet der Container mit allen Subtypen einer Klasse oder eines Interfaces (üblicherweise `int`) Object, oder für jede enthaltene Klasse muss eine separate Containerklasse erstellt werden. Generics ermöglichen die Typüberprüfung zur Kompilierzeit, ohne dass zahlreiche Containerklassen mit nahezu identischem Code benötigt werden. Neben effizienterem Code werden durch die Ausgabe von Kompilierfehlern bestimmte Laufzeitfehler verhindert. Würde Java alle Laufzeitfehler verhindern ClassCastException, wäre es typsicher .
Im Jahr 2016 wurde nachgewiesen, dass das Typsystem von Java fehlerhaft ist , da es möglich ist, mithilfe von Generics Klassen und Methoden zu konstruieren, die es erlauben, einer Variable einer anderen, nicht verwandten Klasse eine Instanz einer Klasse zuzuweisen. Solcher Code wird vom Compiler akzeptiert, führt aber zur Laufzeit zu einer ClassCastException. [ 75 ]
Kritik
Kritikpunkte an Java betreffen unter anderem die Implementierung von Generics [ 76 ] , die Geschwindigkeit [ 55 ] , den Umgang mit vorzeichenlosen Zahlen [ 77 ] , die Implementierung von Gleitkommaarithmetik [ 78 ] sowie Sicherheitslücken in der primären Java-VM-Implementierung HotSpot [ 79 ] . Entwickler bemängeln die Komplexität und den Umfang der Java Persistence API (JPA), einem Standardbestandteil von Java EE. Dies hat zu einer verstärkten Nutzung von Abstraktionen höherer Ebene wie Spring Data JPA geführt, die Datenbankoperationen vereinfachen und Boilerplate-Code reduzieren sollen. Die wachsende Popularität solcher Frameworks deutet auf Einschränkungen hinsichtlich der Benutzerfreundlichkeit der Standard-JPA-Implementierung für die moderne Java-Entwicklung hin.
Klassenbibliotheken
Die Java-Klassenbibliothek ist die Standardbibliothek , die zur Unterstützung der Anwendungsentwicklung in Java entwickelt wurde. Sie wird von Oracle in Zusammenarbeit mit anderen über das Java Community Process- Programm verwaltet. [ 80 ] Unternehmen oder Einzelpersonen, die an diesem Prozess teilnehmen, können Einfluss auf das Design und die Entwicklung der APIs nehmen. Dieser Prozess war in den 2010er Jahren Gegenstand von Kontroversen. [ 81 ] Die Klassenbibliothek enthält unter anderem folgende Funktionen:
- Die Kernbibliotheken, zu denen Folgendes gehören:
- Ein-/Ausgabe (E/A oder IO) [ 82 ] und nicht-blockierende E/A (NIO) oder IO/NIO [ 83 ]
- Netzwerk [ 84 ] (neuer Benutzeragent (HTTP-Client) seit Java 11 [ 85 ] )
- Reflektierendes Programmieren (Reflexion)
- Parallelrechnen (Parallelität) [ 82 ]
- Generika
- Skripterstellung, Compiler
- Funktionale Programmierung ( Lambda , Streaming)
- Sammlungsbibliotheken , die Datenstrukturen wie Listen , Wörterbücher , Bäume , Mengen , Warteschlangen und doppelseitige Warteschlangen oder Stapel implementieren [ 86 ].
- Bibliotheken zur XML -Verarbeitung (Parsing, Transformieren, Validieren)
- Sicherheit [ 87 ]
- Internationalisierungs- und Lokalisierungsbibliotheken [ 88 ]
- Die Integrationsbibliotheken ermöglichen es dem Anwendungsentwickler, mit externen Systemen zu kommunizieren. Zu diesen Bibliotheken gehören:
- Die Java Database Connectivity (JDBC) API für den Datenbankzugriff
- Java Naming and Directory Interface (JNDI) für die Suche und Ermittlung
- Java Remote Method Invocation (RMI) und Common Object Request Broker Architecture (CORBA) für die Entwicklung verteilter Anwendungen
- Java Management Extensions (JMX) zur Verwaltung und Überwachung von Anwendungen
- Benutzerschnittstellenbibliotheken , die Folgendes umfassen:
- Das (schwergewichtige oder native ) Abstract Window Toolkit (AWT) stellt GUI- Komponenten, die Mittel zum Layouten dieser Komponenten und die Mittel zur Behandlung von Ereignissen dieser Komponenten bereit.
- Die (leichtgewichtigen) Swing -Bibliotheken basieren auf AWT, bieten aber (nicht-native) Implementierungen der AWT-Widgets.
- APIs für Audioaufnahme, -verarbeitung und -wiedergabe
- JavaFX
- Eine plattformabhängige Implementierung der Java Virtual Machine, die das Mittel darstellt, mit dem die Bytecodes der Java-Bibliotheken und Anwendungen von Drittanbietern ausgeführt werden.
- Plugins, die es ermöglichen , Applets in Webbrowsern auszuführen.
- Java Web Start ermöglicht die effiziente Verteilung von Java-Anwendungen an Endbenutzer über das Internet.
- Lizenzierung und Dokumentation
Dokumentation
Javadoc ist ein umfassendes Dokumentationssystem, das von Sun Microsystems entwickelt wurde . Es bietet Entwicklern ein strukturiertes System zur Dokumentation ihres Codes. Javadoc-Kommentare beginnen mit einem zusätzlichen Sternchen (*), d. h. die Trennzeichen sind `\` /**und `\ */`, während normale mehrzeilige Kommentare in Java durch `\ ` /*und `\ ` begrenzt werden */und einzeilige Kommentare mit `\` beginnen //. [ 89 ]
Implementierungen
Oracle Corporation besitzt die offizielle Implementierung der Java SE-Plattform aufgrund der Übernahme von Sun Microsystems am 27. Januar 2010. Diese Implementierung basiert auf der ursprünglichen Java-Implementierung von Sun. Die Oracle-Implementierung ist für Windows , macOS , Linux und Solaris verfügbar . Da Java keine formale Standardisierung besitzt, die von ECMA International , ISO/IEC, ANSI oder anderen unabhängigen Normungsorganisationen anerkannt wird, gilt die Oracle-Implementierung als De-facto-Standard .
Die Oracle-Implementierung ist in zwei verschiedenen Paketen verfügbar: Die Java Runtime Environment (JRE) enthält die für die Ausführung von Java-Programmen erforderlichen Bestandteile der Java SE-Plattform und ist für Endbenutzer bestimmt. Das Java Development Kit (JDK) hingegen richtet sich an Softwareentwickler und umfasst Entwicklungswerkzeuge wie den Java-Compiler , Javadoc , JAR-Dateien und einen Debugger . Oracle hat außerdem GraalVM veröffentlicht , einen leistungsstarken dynamischen Java-Compiler und -Interpreter.
OpenJDK ist eine weitere Java-SE-Implementierung, die unter der GNU GPL lizenziert ist. Die Entwicklung begann, als Sun den Java-Quellcode unter der GPL veröffentlichte. Seit Java SE 7 ist OpenJDK die offizielle Java-Referenzimplementierung.
Ziel von Java ist die Kompatibilität aller Java-Implementierungen. Historisch gesehen verlangt Suns Markenlizenz für die Nutzung der Marke Java die Kompatibilität aller Implementierungen . Dies führte zu einem Rechtsstreit mit Microsoft , nachdem Sun behauptet hatte, die Microsoft-Implementierung unterstütze weder Java Remote Method Invocation (RMI) noch Java Native Interface (JNI) und enthalte eigene plattformspezifische Funktionen. Sun klagte 1997 und erhielt 2001 eine Entschädigung in Höhe von 20 Millionen US-Dollar sowie eine gerichtliche Anordnung zur Durchsetzung der Lizenzbedingungen. [ 90 ] Infolgedessen liefert Microsoft Java nicht mehr standardmäßig mit Windows aus .
Plattformunabhängiges Java ist für Java EE unerlässlich , und für die Zertifizierung einer Implementierung ist eine noch strengere Validierung erforderlich. Diese Umgebung ermöglicht portable serverseitige Anwendungen.
Verwendung außerhalb der Java-Plattform
Die Programmiersprache Java erfordert das Vorhandensein einer Softwareplattform, damit kompilierte Programme ausgeführt werden können.
Oracle stellt die Java-Plattform für die Verwendung mit Java bereit. Das Android SDK ist eine alternative Softwareplattform, die primär zur Entwicklung von Android-Anwendungen mit eigenem GUI-System verwendet wird.
Android
Die Programmiersprache Java ist ein zentraler Bestandteil von Android , einem Open-Source -Betriebssystem für Mobilgeräte . Obwohl Android, basierend auf dem Linux-Kernel , größtenteils in C geschrieben ist, nutzt das Android SDK Java als Grundlage für Android-Anwendungen, verwendet jedoch keine der etablierten Java-Standards wie GUI, SE, ME oder andere. [ 91 ] Der vom Android SDK unterstützte Bytecode ist inkompatibel mit JVM-Bytecode und läuft auf einer eigenen virtuellen Maschine, die für Geräte mit geringem Speicher wie Smartphones und Tablet-Computer optimiert ist . Je nach Android-Version wird der Bytecode entweder von der Dalvik Virtual Machine interpretiert oder von der Android Runtime in nativen Code kompiliert .
Android stellt nicht die vollständige Java SE-Standardbibliothek bereit, obwohl das Android SDK eine unabhängige Implementierung eines großen Teils davon enthält. Es unterstützt Java 6 und einige Java 7-Funktionen und bietet eine mit der Standardbibliothek kompatible Implementierung ( Apache Harmony ).
Kontroverse
Die Verwendung von Java-Technologie in Android führte zu einem Rechtsstreit zwischen Oracle und Google. Am 7. Mai 2012 entschied eine Jury in San Francisco, dass Google durch die Verwendung von Java in Android-Geräten Oracles Urheberrechte verletzt habe, falls APIs urheberrechtlich geschützt werden könnten. [ 92 ] Bezirksrichter William Alsup urteilte am 31. Mai 2012, dass APIs nicht urheberrechtlich geschützt werden könnten, [ 93 ] doch dieses Urteil wurde im Mai 2014 vom US-Berufungsgericht für den Bundesbezirk aufgehoben. [ 94 ] Am 26. Mai 2016 entschied das Bezirksgericht zugunsten von Google und urteilte, die Urheberrechtsverletzung der Java-API in Android stelle eine zulässige Nutzung dar. [ 95 ] Im März 2018 wurde dieses Urteil vom Berufungsgericht aufgehoben, das den Fall zur Feststellung des Schadensersatzes an ein Bundesgericht in San Francisco verwies. [ 96 ] Google reichte im Januar 2019 beim Obersten Gerichtshof der Vereinigten Staaten eine Petition auf Erlass eines Writ of Certiorari ein , um die beiden Urteile des Berufungsgerichts zugunsten von Oracle anzufechten. [ 97 ] Am 5. April 2021 entschied der Gerichtshof mit 6:2 Stimmen zugunsten von Google, dass die Nutzung von Java-APIs als zulässige Nutzung anzusehen sei . Der Gerichtshof lehnte es jedoch ab, über die Urheberrechtsfähigkeit von APIs zu urteilen und entschied stattdessen, die Java-API „rein argumentativ“ als urheberrechtlich geschützt zu betrachten. [ 98 ]
Siehe auch
- C#
- C++
- Dalvik , das in älteren Android-Versionen verwendet wurde, wurde durch die Nicht-JIT -Android-Laufzeitumgebung ersetzt.
- Java Heterogene verteilte Datenverarbeitung
- Liste der Java-APIs
- Liste der Java-Frameworks
- Liste der JVM-Sprachen
- Liste der Java-Programmierbücher
- Liste der Java-Software und -Tools
- Liste der Java Virtual Machines
- Überblick über die Programmiersprache Java
- Vergleich von C# und Java
- Vergleich von Java und C++
- Vergleich der Programmiersprachen
Referenzen
- ^ Binstock, Andrew (20. Mai 2015). „Java – 20 Jahre Innovation“ . Forbes . Archiviert vom Original am 14. März 2016. Abgerufen am 18. März 2016 .
- ^ "JDK 26" .
- ^ a b c d Barbara Liskov mit John Guttag (2000). Programmentwicklung in Java – Abstraktion, Spezifikation und objektorientiertes Design . USA, Addison Wesley. ISBN 978-0-201-65768-5Die
- ^ Chaudhary, Harry H. (28. Juli 2014). „Das Java-Programmierinterview meistern :: Über 2000 Java-Interviewfragen/-antworten“ . Archiviert vom Original am 29. September 2023. Abgerufen am 29. Mai 2016 .
- Java 5.0 führte mehrere neue Sprachmerkmale ein (die erweiterte for-Schleife , Autoboxing , Varargs und Annotationen ), nachdem diese in der ähnlichen (und konkurrierenden)Sprache C# eingeführt worden waren. [1] Archiviert am 19. März 2011 in der Wayback Machine . [2] Archiviert am 7. Januar 2006 in der Wayback Machine .
- ^ Gosling, James; McGilton, Henry (Mai 1996). „The Java Language Environment“ . Archiviert vom Original am 6. Mai 2014. Abgerufen am 6. Mai 2014 .
- ^ Gosling, James; Joy, Bill; Steele, Guy; Bracha, Gilad. „The Java Language Specification, 2nd Edition“ . Archiviert vom Original am 5. August 2011. Abgerufen am 8. Februar 2008 .
- ^ „Die AZ der Programmiersprachen: Modula-3“ . Computerworld. Archiviert vom Original am 5. Januar 2009. Abgerufen am 9. Juni 2010 .
- Niklaus Wirth äußerte sich bei mehreren öffentlichen Anlässen, beispielsweise in einem Vortrag im Polytechnischen Museum in Moskau im September 2005 (es existieren mehrere unabhängige Augenzeugenberichte in russischer Sprache, darunter einer mit einer Audioaufnahme: Filippova, Elena (22. September 2005). „ Niklaus Wirths Vortrag im Polytechnischen Museum in Moskau“ . Archiviert vom Original am 1. Dezember 2020. Abgerufen am 20. November 2011 ).Das Sun Java-Designteam hatte die Quelltexte des Oberon-Compilers bereits einige Jahre vor der Veröffentlichung von Java lizenziert und untersucht: (relative) Kompaktheit, Typsicherheit, automatische Speicherbereinigung, keine Mehrfachvererbung für Klassen – all diese wichtigen Designmerkmale werden von Java und Oberon gemeinsam genutzt.
- Patrick Naughton nennt Objective-C als starken Einfluss auf das Design der Programmiersprache Java und führt als bemerkenswerte direkte Ableitungen Java-Interfaces (abgeleitet vom Objective-C- Protokoll ) und Wrapper-Klassen für primitive Datentypen an. [3] Archiviert am 13. Juli 2011 im Internet Archive .
- ^ TechMetrix Research (1999). „Geschichte von Java“ (PDF) . Java Application Servers Report . Archiviert vom Original (PDF) am 29. Dezember 2010. Das Projekt wurde unter dem Namen
Green
fortgeführt
, und die Sprache basierte auf einem alten Modell von
UCSD Pascal
, wodurch die Generierung von interpretierbarem Code möglich ist.
- ^ „Ein Gespräch mit James Gosling“ . ACM Queue . Band 2, Nr. 5. Association for Computing Machinery . 31. August 2004. Archiviert vom Original am 16. Juli 2015. Abgerufen am 9. Juni 2010 .
- ^ Das Java Language Team. Über Microsofts „Delegierte“ (Whitepaper). JavaSoft, Sun Microsystems, Inc. Archiviert vom Original am 27. Juni 2012.
Im Sommer 1996 entwarf Sun den Vorläufer des heutigen Ereignismodells von AWT und der JavaBeans-Komponentenarchitektur. Borland leistete einen wesentlichen Beitrag zu diesem Prozess. Wir untersuchten Delphi Object Pascal eingehend und entwickelten einen funktionsfähigen Prototyp gebundener Methodenreferenzen, um deren Interaktion mit der Programmiersprache Java und ihren APIs zu verstehen.
- ^ „Chapel spec (Acknowledgements)“ (PDF) . Cray Inc. 1. Oktober 2015. Archiviert (PDF) vom Original am 5. Februar 2016. Abgerufen am 14. Januar 2016 .
- ^ „Einführung in die Gambas-Dokumentation“ . Gambas-Website. Archiviert vom Original am 9. Oktober 2017. Abgerufen am 9. Oktober 2017 .
- ^ „Facebook-Fragen und -Antworten: Hack bringt statische Typisierung in die PHP-Welt“ . InfoWorld . 26. März 2014. Archiviert vom Original am 13. Februar 2015. Abgerufen am 11. Januar 2015 .
- ^ „Einmal schreiben, überall ausführen?“ Computer Weekly . 2. Mai 2002. Archiviert vom Original am 13. August 2021. Abgerufen am 27. Juli 2009 .
- ^ a b c „1.2 Designziele der Programmiersprache Java“ . Oracle. 1. Januar 1999. Archiviert vom Original am 23. Januar 2013. Abgerufen am 14. Januar 2013 .
- ^ https://arxiv.org/pdf/1908.11685 Java-Programmiersprache
- ^ Melanson, Mike (9. August 2022). „Nenn es nicht Comeback: Warum Java immer noch unangefochten an der Spitze steht“ . GitHub . Archiviert vom Original am 25. August 2023. Abgerufen am 15. Oktober 2023 .
- ^ „Die wichtigsten Programmiersprachen“ . Der Status des Octoverse . GitHub . Archiviert vom Original am 2. August 2023. Abgerufen am 15. Oktober 2023 .
- ^ McMillan, Robert (1. August 2013). „Verliert Java seinen Reiz?“ . Wired . Archiviert vom Original am 15. Februar 2017. Abgerufen am 15. Oktober 2023 .
- ^ Byous, Jon (ca. 1998). „Java-Technologie: Die Anfänge“ . Sun Developer Network . Sun Microsystems . Archiviert vom Original am 20. April 2005. Abgerufen am 22. April 2005 .
- ^ Objektorientierte Programmierung „Die Geschichte der Java-Technologie“ . Sun Developer Network . ca. 1995. Archiviert vom Original am 10. Februar 2010. Abgerufen am 30. April 2010 .
- ^ Murphy, Kieron (4. Oktober 1996). „Warum haben sie sich entschieden, es Java zu nennen?“ . JavaWorld . Archiviert vom Original am 13. Juli 2020 . Abgerufen am 13. Juli 2020 .
- ^ Kabutz, Heinz; Once Upon an Oak. Archiviert am 13. April 2007 in der Wayback Machine . Artima. Abgerufen am 29. April 2007.
- ^ „JAVASOFT VERÖFFENTLICHT JAVA 1.0“ . Archiviert vom Original am 10. März 2007. Abgerufen am 13. Mai 2018 .
- ^ Objektorientierte Programmierung mit Java: Grundlagen und Anwendungen . Tata McGraw-Hill Education. S. 34.
- ^ „JSG – Java Study Group“ . open-std.org . Archiviert vom Original am 25. August 2006. Abgerufen am 2. August 2006 .
- ^ „Warum Java nicht zweimal standardisiert wurde“ (PDF) . Archiviert (PDF) vom Original am 13. Januar 2014. Abgerufen am 3. Juni 2018 .
- ^ „Was ist ECMA – und warum ist es Microsoft wichtig?“ . ZDNet . Archiviert vom Original am 6. Mai 2014. Abgerufen am 6. Mai 2014 .
- ^ „Website des Java Community Process“ . Jcp.org. 24. Mai 2010. Archiviert vom Original am 8. August 2006. Abgerufen am 9. Juni 2010 .
- ^ „JAVAONE: Sun – Der Großteil von Java ist Open Source“ . GrnLight.net. Archiviert vom Original am 27. Mai 2014. Abgerufen am 26. Mai 2014 .
- ^ „Suns sich wandelnde Rolle als Java-Evangelist“ . O'Reilly Media . Archiviert vom Original am 15. September 2010. Abgerufen am 2. August 2009 .
- ^ „ Oracle und Java“ . oracle.com . Oracle Corporation. Archiviert vom Original am 31. Januar 2010. Abgerufen am 23. August 2010.
Oracle ist seit der Entstehung von Java im Jahr 1995 ein führender und maßgeblicher Unterstützer dieser Technologie und übernimmt nun die Rolle des Hüters der Java-Technologie mit einem unermüdlichen Engagement für die Förderung einer partizipativen und transparenten Community.
- ^ Gosling, James (9. April 2010). „Zeit, weiterzuziehen…“ Auf einem neuen Weg . Archiviert vom Original am 5. November 2010. Abgerufen am 16. November 2011 .
- ^ Thema, Dalibor. „Umstieg auf ein Plugin-freies Web“ . Archiviert vom Original am 16. März 2016. Abgerufen am 15. März 2016 .
- ^ „Learn About Java Technology“ . Oracle. Archiviert vom Original am 24. November 2011. Abgerufen am 21. November 2011 .
- ^ „Warum sollte ich ältere Java-Versionen von meinem System deinstallieren?“ Oracle. Archiviert vom Original am 12. Februar 2018. Abgerufen am 24. September 2021 .
- ^ „Oracle Java SE Support Roadmap“ . Oracle. 13. September 2021. Archiviert vom Original am 1. Juni 2026. Abgerufen am 3. Juni 2026 .
- ^ „Temurin™-Unterstützung; Adoptium“ . adoptium.net . Archiviert vom Original am 29. März 2024. Abgerufen am 29. März 2024 .
- ^ „JAVASOFT VERÖFFENTLICHT JAVA 1.0“ . sun.com . Archiviert vom Original am 10. März 2007. Abgerufen am 5. Februar 2008 .
- ^ Chander, Sharat. „Einführung in Java SE 11“ . oracle.com . Archiviert vom Original am 26. September 2018. Abgerufen am 26. September 2018 .
- ^ Chander, Sharat (15. September 2020). „Die Ankunft von Java 15!“ . Oracle . Archiviert vom Original am 16. September 2020. Abgerufen am 15. September 2020 .
- ^ „JDK 21“ . openjdk.org . Archiviert vom Original am 20. September 2023. Abgerufen am 20. September 2023 .
- ^ "JDK 24" .
- ^ "JDK 25" .
- ^ "JDK 26" .
- ^ „Java Card Overview“ . Oracle Technology Network . Oracle. Archiviert vom Original am 7. Januar 2015. Abgerufen am 18. Dezember 2014 .
- ^ „Java Platform, Micro Edition (Java ME)“ . Oracle Technology Network . Oracle. Archiviert vom Original am 4. Januar 2015. Abgerufen am 18. Dezember 2014 .
- ^ „Java SE“ . Oracle Technology Network . Oracle. Archiviert vom Original am 24. Dezember 2014. Abgerufen am 18. Dezember 2014 .
- ^ „Java Platform, Enterprise Edition (Java EE)“ . Oracle Technology Network . Oracle. Archiviert vom Original am 17. Dezember 2014. Abgerufen am 18. Dezember 2014 .
- ^ „Deep Dive Into the New Java JIT Compiler – Graal | Baeldung“ . www.baeldung.com . 6. August 2021. Archiviert vom Original am 28. Oktober 2021. Abgerufen am 13. Oktober 2021 .
- ^ „Ist die JVM (Java Virtual Machine) plattformabhängig oder plattformunabhängig? Welchen Vorteil bietet die Verwendung der JVM, wenn Java eine übersetzte Sprache ist?“ Programmiererinterview. Archiviert vom Original am 19. Januar 2015. Abgerufen am 19. Januar 2015 .
- ^ a b Jelovic, Dejan. „Warum Java immer langsamer sein wird als C++“ . Archiviert vom Original am 11. Februar 2008. Abgerufen am 15. Februar 2008 .
- ^ Hundt, Robert. „Schleifenerkennung in C++/Java/Go/Scala“ (PDF) . Archiviert (PDF) vom Original am 16. November 2011. Abgerufen am 12. Juli 2012 .
- ^ „Symantecs Just-in-Time-Java-Compiler wird in Sun JDK 1.1 integriert“ . Archiviert vom Original am 28. Juni 2010. Abgerufen am 1. August 2009 .
- ^ Salcic, Zoran; Park, Heejong; Teich, Jürgen; Malik, Avinash; Nadeem, Muhammad (22. Juli 2017). „Noc-HMP: Ein heterogener Multicore-Prozessor für eingebettete Systeme, entworfen in SystemJ“. ACM Transactions on Design Automation of Electronic Systems . 22 (4): 73. doi : 10.1145/3073416 . ISSN 1084-4309 . S2CID 11150290 .
- ^ a b c Bloch 2018 , S. 26-28, §Punkt 7: Eliminieren veralteter Objektverweise.
- ^ "NullPointerException" . Oracle. Archiviert vom Original am 6. Mai 2014. Abgerufen am 6. Mai 2014 .
- ^ „Ausnahmen in Java“ . Artima.com. Archiviert vom Original am 21. Januar 2009. Abgerufen am 10. August 2010 .
- ^ „System (Java SE 25 und JDK 25)“ . Oracle . Abgerufen am 14. Januar 2026 .
{{cite web}}: CS1 maint: url-status ( link ) - ^ Walter, A. (2010). Auf dem Weg zur Zertifizierung von Java-Anwendungen für sicherheitskritische Projekte. Proceedings of Embedded Real-Time Software and Systems, ERTS2 , 1-7.
- ^ „Leistungsverbesserungen für virtuelle Maschinen in Java HotSpot™“ . Oracle.com. Archiviert vom Original am 29. Mai 2017. Abgerufen am 26. April 2017 .
- ^ „Operatorüberladung (C# vs. Java)“ . C# für Java-Entwickler . Microsoft. Archiviert vom Original am 7. Januar 2015. Abgerufen am 10. Dezember 2014 .
- ^ „Mehrfache Vererbung von Zustand, Implementierung und Typ“ . Die Java-Tutorials . Oracle. Archiviert vom Original am 9. November 2014. Abgerufen am 10. Dezember 2014 .
- ^ Krill, Paul (16. September 2025). „JDK 25: Die neuen Funktionen in Java 25“ . InfoWorld . Abgerufen am 9. Oktober 2025 .
- ^ Pressler, Ron; Laskey, Jim; Bierman, Gavin (11. Juli 2025). „JEP 512: Compact Source Files and Instance Main Methods“ . OpenJDK . Abgerufen am 9. Oktober 2025 .
- ^ „Veraltete APIs, Funktionen und Optionen“ . Oracle. Archiviert vom Original am 19. Juni 2019. Abgerufen am 31. Mai 2019 .
- ^ „Applet (Java Platform SE 7)“ . Dokumentation . Oracle. Archiviert vom Original am 2. August 2020. Abgerufen am 1. Mai 2020 .
- ^ „Was ist eine JSP-Seite? – Das Java EE 5-Tutorial“ . docs.oracle.com . Archiviert vom Original am 2. August 2020. Abgerufen am 1. Mai 2020 .
- ^ „Trail: Creating a GUI With JFC/Swing (The Java Tutorials)“ . docs.oracle.com . Archiviert vom Original am 29. April 2020. Abgerufen am 1. Mai 2020 .
- ^ „Aus JDK 11 entfernt, JavaFX 11 erscheint als eigenständiges Modul“ . InfoWorld . 20. September 2018. Archiviert vom Original am 14. Oktober 2020. Abgerufen am 13. Oktober 2020 .
- ^ „Erste Schritte mit JavaFX: Hello World im JavaFX-Stil“ . JavaFX 2 Tutorials und Dokumentation . Oracle. Archiviert vom Original am 2. August 2020. Abgerufen am 1. Mai 2020 .
- ^ „Die Typsysteme von Java und Scala sind unzulänglich“ (PDF) . Archiviert (PDF) vom Original am 28. November 2016. Abgerufen am 20. Februar 2017 .
- ^ Arnold, Ken (27. Juni 2005). „Generika gelten als schädlich“ . java.net. Archiviert vom Original am 10. Oktober 2007. Abgerufen am 10. September 2015 .
- ^ Owens, Sean R. „Java und unsigned int, unsigned short, unsigned byte, unsigned long usw. (Oder besser gesagt, das Fehlen derselben)“ . Archiviert vom Original am 20. Februar 2009. Abgerufen am 4. Juli 2011 .
- ^ Kahan, William (1. März 1998). „Wie Javas Gleitkommaarithmetik allen überall schadet – ACM 1998 Workshop on Java (Stanford)“ (PDF) . Elektrotechnik und Informatik, Universität von Kalifornien, Berkeley. Archiviert (PDF) vom Original am 5. September 2012. Abgerufen am 4. Juni 2011 .
- ^ „Hast du das Java überprüft?“ . Archiviert vom Original am 21. September 2012. Abgerufen am 23. Dezember 2011 .
- ^ Cadenhead, Rogers (20. November 2017), Understanding How Java Programs Work , archiviert vom Original am 13. August 2021 , abgerufen am 26. März 2019
- ^ Woolf, Nicky (26. Mai 2016). „Google gewinnt sechsjährigen Rechtsstreit mit Oracle um das Urheberrecht am Android-Code“ . The Guardian . ISSN 0261-3077 . Archiviert vom Original am 26. März 2019. Abgerufen am 26. März 2019 .
- ^ a b Bloch 2018 , S. 1–4, § 1 Einleitung.
- ^ „java.nio (Java Platform SE 8)“ . docs.oracle.com .
- ^ „Java Networking“ . docs.oracle.com .
- ^ "HttpClient (Java SE 11 & JDK 11)" . docs.oracle.com .
- ^ „Übersicht über das Collections Framework“ . Java-Dokumentation . Oracle. Archiviert vom Original am 31. Dezember 2014. Abgerufen am 18. Dezember 2014 .
- ^ „Java-Sicherheitsübersicht“ . Java-Dokumentation . Oracle. Archiviert vom Original am 3. Januar 2015. Abgerufen am 18. Dezember 2014 .
- ^ „Trail: Internationalisierung“ . Die Java-Tutorials . Oracle. Archiviert vom Original am 31. Dezember 2014. Abgerufen am 18. Dezember 2014 .
- ^ „Wie man Doc-Kommentare für das Javadoc-Tool schreibt“ . Oracle Technology Network . Oracle. Archiviert vom Original am 18. Dezember 2014. Abgerufen am 18. Dezember 2014 .
- ^ Niccolai, James (24. Januar 2001). „Sun und Microsoft einigen sich im Java-Rechtsstreit“ . JavaWorld . IDG News Service . Archiviert vom Original am 14. Juli 2020. Abgerufen am 13. Juli 2020 .
- ^ van Gurp, Jilles (13. November 2007). „Google Android: Erste Eindrücke und Kritik“ . Javalobby . Archiviert vom Original am 28. August 2008. Abgerufen am 7. März 2009.
Ehrlich gesagt verstehe ich nicht, warum Google die Vielzahl bereits existierender Implementierungen ignorieren will. Das wirkt auf mich wie ein klassischer Fall von „Nicht hier erfunden“. Letztendlich wird dies die Verbreitung verlangsamen. Es gibt bereits zu viele Java-Plattformen für den mobilen Bereich, und dies ist nur eine weitere.
- ^ Mullin, Joe (7. Mai 2012). „Google im Oracle-Prozess der Urheberrechtsverletzung schuldig gesprochen; weitere juristische Probleme drohen“ . Law & Disorder . Ars Technica. Archiviert vom Original am 8. Mai 2012. Abgerufen am 8. Mai 2012 .
- ^ Mullin, Joe (31. Mai 2012). „Google gewinnt wichtigen API-Urteil, Oracles Klage dezimiert“ . Ars Technica . Archiviert vom Original am 12. März 2017. Abgerufen am 1. Juni 2012 .
- ^ Rosenblatt, Seth (9. Mai 2014). „Gericht gibt Oracle im Java-Patentstreit um Android Recht“ . CNET . Archiviert vom Original am 10. Mai 2014. Abgerufen am 10. Mai 2014 .
- ^ Mullin, Joe (26. Mai 2016). „Google schlägt Oracle – Android nutzt Java-APIs ‚fair‘“ . Ars Technica . Archiviert vom Original am 20. Januar 2017. Abgerufen am 26. Mai 2016 .
- ^ Farivar, Cyrus (27. März 2018). "„Googles Nutzung der Java-API-Pakete war nicht fair“, urteilte das Berufungsgericht . Ars Technica . Archiviert vom Original am 24. September 2019. Abgerufen am 6. August 2019 .
- ^ Lee, Timothy (23. April 2019). „Google bittet den Obersten Gerichtshof, ein verheerendes Urteil zu API-Urheberrechten aufzuheben“ . Ars Technica . Archiviert vom Original am 23. April 2019. Abgerufen am 23. April 2019 .
- ^ „ Google LLC gegen Oracle America, Inc. 593 US ____ (2021)“ (PDF) . Archiviert (PDF) vom Original am 5. April 2021. Abgerufen am 6. April 2021 .
Bibliographie
- Bloch, Joshua (2018). Effektives Java: Programmiersprachenhandbuch (3. Aufl.). Addison-Wesley. ISBN 978-0-13-468599-1Die
- Gosling, James; Joy, Bill ; Steele, Guy L. Jr .; Bracha, Gilad (2005). Die Java-Sprachspezifikation (3. Aufl.). Addison-Wesley. ISBN 0-321-24678-0Archiviert vom Original am 14. Februar 2012. Abgerufen am 8. Februar 2019 .
- Gosling, James; Joy, Bill; Steele, Guy; Bracha, Gilad; Buckley, Alex (2014). Die Java®-Sprachspezifikation (PDF) (Java SE 8. Auflage). Archiviert (PDF) vom Original am 21. Oktober 2014. Abgerufen am 18. November 2014 .
- Lindholm, Tim; Yellin, Frank (1999). Die Java Virtual Machine Spezifikation (2. Aufl.). Addison-Wesley. ISBN 0-201-43294-3Archiviert vom Original am 25. September 2011. Abgerufen am 8. Februar 2019 .