- Java (Technik)
-
Die Java-Technik (englisch Java Technology) ist eine ursprünglich von Sun entwickelte Sammlung von Spezifikationen, die einerseits die Programmiersprache Java und andererseits verschiedene Laufzeitumgebungen für Computerprogramme definieren. Diese Computerprogramme werden meistens in Java geschrieben.
Die Java-Technik besteht aus den folgenden Bestandteilen:
- die Java-Plattform – eine standardisierte Software-Plattform
- die Programmiersprache Java, um Programme zu formulieren
- das „Java Development Kit“ – ein Entwicklungswerkzeug das grundlegende Teile, wie einen Übersetzer und Bibliotheken, enthält
- die Java-Laufzeitumgebung, um die entwickelten Programme (auf der Plattform) ausführen zu können
Inhaltsverzeichnis
Bestandteile
Die Java-Technik besteht aus den folgenden Teilen:
Aufbau der Java-Technik Programmier-
spracheJava Quelltext (.java) JDK Entwicklungswerkzeuge
Java-Compiler, …Java Bytecode (.class, .jar) JRE Java Programmierschnittstelle (API) Java Virtual Machine (JVM)
mit Just-in-time-CompilierungBetriebs-
systemWindows, Linux, Solaris, Mac OS X, … Programmiersprache Java
Java ist eine objektorientierte Programmiersprache und eingetragenes Warenzeichen der Firma Sun Microsystems. Der Entwurf der Programmiersprache Java strebte im Wesentlichen fünf Ziele an:[1][2]
- 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 leistungsfähig sein.
- Sie soll interpretierbar, parallelisierbar und dynamisch sein.
Java-Plattform
Die Java-Plattform definiert die Java-Laufzeitumgebung (JRE) und Programmierschnittstellen der Java-Technik. Durch die Java-Plattform werden Programme weitgehend unabhängig vom darunter liegenden Betriebssystem ausgeführt. Sie definiert die Anwendungsprogrammierschnittstellen (APIs) eindeutig und maschinenunabhängig.
Programme für die Java-Plattform werden in der Regel mit Hilfe der Programmiersprache Java erstellt. Die Verwendung anderer Programmiersprachen ist möglich, z. B. Nice oder Groovy.
Es wird zwischen den folgenden Java-Plattformen unterschieden:
- Java Platform Java Card
- Erlaubt es Java-Card-Applets, einem reduzierten Java-Standard folgende Java-Applets, auf Chipkarten auszuführen.
- Java Platform, Micro Edition (Java ME)
- Plattform für so genannte embedded consumer products wie etwa Mobiltelefone oder PDAs.
- Java Platform, Standard Edition (Java SE)
- Sammlung von Java-Programmierschnittstellen für den generellen Einsatz auf PCs, Servern oder ähnlichen Geräten. Die Java SE dient als Grundlage für die Java-EE- und Java-ME-Technologien.
- Java Platform, Enterprise Edition (Java EE)
- Java SE, angereichert um Programmierschnittstellen für die transaktionsbasierte Ausführung von mehrschichtigen Unternehmens- und Web-Anwendungen.
Geschichte
Die Urversion von Java – auch Oak (Object Application Kernel) genannt – wurde in einem Zeitraum von 18 Monaten vom Frühjahr 1991 bis Sommer 1992 unter dem Namen The Green Project von Patrick Naughton, Mike Sheridan, James Gosling und Bill Joy sowie neun weiteren Entwicklern im Auftrag des US-amerikanischen Computerherstellers Sun Microsystems entwickelt. James Gosling war der Hauptentwickler. Ein Überbleibsel aus dem Green-Projekt ist der Duke von Joe Palrang, der zum bekannten Symbol bzw. Maskottchen geworden ist.
Der Name Oak hatte seinen Ursprung in einer Eiche (englisch oak), die vor dem Fenster von James Gosling stand. Der Name musste jedoch aufgrund rechtlicher Probleme (es gab bereits eine Software dieses Namens) verworfen werden. Man entschied sich für den Namen Java nach einer starken Kaffee-Sorte, die speziell für Espresso Verwendung findet (Java-Bohne) und die von den Entwicklern bevorzugt getrunken wurde.
Das Ziel war nicht nur die Entwicklung einer weiteren Programmiersprache, sondern einer vollständigen Betriebssystemumgebung, inklusive virtueller CPU, für unterschiedlichste Einsatzzwecke. Das System sollte – der Legende nach – beispielsweise eine Kaffeemaschine steuern können.
Die Entwicklung fand in einem unauffälligen Bürogebäude in der Sand Hill Road in Menlo Park statt. Während der abgeschiedenen Entwicklungsphase kam es zu keinem Austausch mit Sun Microsystems. Im Sommer 1992 schließlich war die erste Oak-basierte Anwendung fertig gestellt – „an interactive, handheld home-entertainment device controller with an animated touchscreen user interface“. Diese Technikdemonstration einer Touchscreen-basierten Gerätesteuerung mit animierter grafischer Benutzeroberfläche hatte den Namen *7 (Star Seven).
Nach der Vorführung von Star Seven, mit dem zahlreiche Geräte interaktiv gesteuert werden konnten, wurden Unternehmen aus der Kabelfernseh-Branche aufmerksam und aus dem Hinterzimmer-Projekt The Green Project entstand das Unternehmen FirstPerson. Aus dem Büro wurde ein Bürohaus in der 100 Hamilton Avenue in Palo Alto.
Da die Belegschaft inzwischen von 13 auf 70 Mitarbeiter gewachsen und die Zeit für interaktive digitale Mehrwertdienste im Bereich des Kabelfernsehens noch nicht reif war, suchte sich das junge Unternehmen neue Betätigungsfelder. Nach einem dreitägigen Treffen von John Gage, James Gosling, Bill Joy, Patrick Naughton, Wayne Rosing und Eric Schmidt in „The Inn at Squaw Creek“ bei Lake Tahoe war schnell klar: das Internet sollte es sein.
Auf Basis des Urvaters aller grafischen Webbrowser, Mosaic, wurde also ein um Java erweiterter Webbrowser geschaffen – der WebRunner (nach dem Film Blade Runner). Später wurde WebRunner in HotJava umbenannt.
Im März 1995 wurde die erste Alphaversion (1.0a2) des Java-Quellcodes für die Öffentlichkeit freigegeben, und die Downloadzahlen explodierten. Wenig später, am 23. Mai 1995, wurde Java erstmals offiziell der Öffentlichkeit vorgestellt, in den „San Jose Mercury News“.
Der Durchbruch kam mit der Integration von Java in den Browser Netscape Navigator – besiegelt durch einen Handschlag zwischen Eric Schmidt und George Paolini von Sun Microsystems sowie Marc Andreessen von Netscape. Ort und Zeit: 4 Uhr morgens in einem Zimmer des Sheraton-Palace-Hotels in der Nähe des Convention-Centers.
Der Name Java
Der Name für die neue Technik war schnell gefunden: die meisten Programmierer bevorzugten das Straßencafé „Java City – roasters of fine coffee“ in Menlo Park, unweit ihres Bürogebäudes, wohin sie ab und zu in der Mittagspause gingen, um nach dem Essen noch einen Kaffee zu trinken. Die beliebteste Kaffeesorte unter den Programmierern war Java. So war der Name für die neue Technik gefunden. Auch der Name „JavaBeans“ leitet sich aus dieser Begebenheit ab.
Versionen
Legende: Ältere Version; nicht mehr unterstützt Ältere Version; noch unterstützt Aktuelle Version Zukünftige Version Versionen und Codenamen[3] Version Codename Veröffentlichung JDK 1.1.4 Sparkler 12. September 1997 JDK 1.1.5 Pumpkin 3. Dezember 1997 JDK 1.1.6 Abigail 24. April 1998 JDK 1.1.7 Brutus 28. September 1998 JDK 1.1.8 Chelsea 8. April 1999 J2SE 1.2 Playground 4. Dezember 1998 J2SE 1.2.1 (keiner) 30. März 1999 J2SE 1.2.2 Cricket 8. Juli 1999 J2SE 1.3 Kestrel 8. Mai 2000 J2SE 1.3.1 Ladybird 17. Mai 2001 J2SE 1.4.0 Merlin 13. Februar 2002 J2SE 1.4.1 Hopper 16. September 2002 J2SE 1.4.2 Mantis 26. Juni 2003 J2SE 5.0 (1.5.0) Tiger 29. September 2004 JSE 6.0 (Mustang)[4] 11. Dezember 2006 JSE 7.0 (Dolphin)[4] 28. Juli 2011 JSE 8.0 - Ende 2012 Version 1
Die 1996 erschienene Java-Version 1.0 enthielt noch eine überschaubare Menge von Standardpaketen, die in späteren Versionen schnell anwuchs:
java.lang
: elementare Klassen, z. B.Object
undSystem
java.io
: Ein- und Ausgabejava.util
: z. B. Datenstrukturen und eine Datumsklassejava.net
: einfache Internetprotokoll-Klassenjava.awt
: grundlegende Klassen für grafische Benutzeroberflächenjava.applet
: eine Klasse für die bekannten Applets.
Obwohl diese neue Sprache primär zum Entwickeln von Applets gedacht war, bot sie schon in der ersten Version Möglichkeiten, die weit darüber hinaus reichten.
Version 1.1
Eine Spracherweiterung wurde 1997 mit Java 1.1 vorgenommen, die Syntax wurde um das Konzept der inneren Klassen erweitert. Dies ging auch einher mit einem Umbau der Ereignisbehandlung hin zu einem Callback-System mit so genannten Listenern.
Außerdem wurde die Standardbibliothek erweitert:
- Klassen für die Internationalisierung (so genannte „Ressourcenbündel“)
- Java-Komponenten, die Java Beans
- das Dateiformat JAR für die Paketierung ganzer Bibliotheken oder Anwendungen als Java-Archive
- Klassen für numerisches Rechnen (
BigInteger
undBigDecimal
) - ein Protokoll für verteilte Programme, die Remote Method Invocation (RMI)
- Objektserialisierung für die persistente Speicherung von Objekten, z. B. in Dateien
- JDBC für den Zugriff auf relationale Datenbanken
- Sicherheitsfunktionen, z. B. zum Signieren von JAR-Dateien und Applets
In den Versionen ab 1.1.5 war bereits Swing verfügbar – jedoch zählte dieses Framework noch nicht zum offiziellen Java. Besonders problematisch war, dass Swing mit Erscheinen von 1.2 eine andere Paketstruktur aufwies und eine Portierung notwendig machte.
Version 1.2
Java 2 (JDK 1.2) erschien im Jahr 1998.[5] Mit Erscheinen dieser Version sprach Sun von Java 2, dementsprechend heißen die Pakete Java 2 Platform, Standard Edition (J2SE) und statt Java Development Kit (JDK) heißt es Java 2 Software Development Kit (J2SDK).
In dieser Version wurden Just-In-Time-Compiler eingeführt, womit die Ausführung von Java-Programmen deutlich beschleunigt werden konnte. (Für jedes Betriebssystem wird eine eigene Laufzeit-Bibliothek benötigt.) Die Programme sind aber weiterhin lediglich „vorkompiliert“. Die Geschwindigkeit vollständig kompilierter Programme wird nicht erreicht.
Erneut wurde die Standardbibliothek erweitert:
- neue Schnittstellen und Implementierungen für Collections, also Datenstrukturen wie Listen, Mengen und Maps (Assoziativlisten)
- die Oberflächen-Bibliothek Swing
- neue Grafik-Funktionen (Java 2D)
- Drag and Drop-Funktionalität
- verbesserte Audio-Funktionen
- eine CORBA-Schnittstelle
- schwache Referenzen – das sind solche Referenzen, die den Garbage-Collector nicht daran hindern, das referenzierte Objekt zu entfernen
Im Jahr 1998 wurde auch der Java Community Process (JCP) eingeführt. Diese Organisation steuert seitdem Änderungen an der Spezifikation von Java. Für vorgeschlagene Änderungen wird ein Java Specification Request (JSR) erstellt, der verschiedene Phasen durchläuft, bevor die Änderungen in Java Einzug halten.
Version 1.3
2000 erschien J2SE 1.3 als nächster Evolutionsschritt, die API wurde erneut erweitert. Des Weiteren wurde eine Engine mit Hotspot-Optimierung eingeführt. Das bedeutet, dass häufig benutzte Codefragmente (Hotspots) vom Bytecode zur Laufzeit in nativen Maschinencode übersetzt werden. Resultat war die deutlich gesteigerte Performance.
API-Erweiterungen:
- Java Naming and Directory Interface (JNDI)
- Java Sound API
Version 1.4
Erst 2002 wurde mit Erscheinen von J2SE 1.4 wieder die Sprache selbst erweitert, was zuletzt bei Version 1.1 geschah. Ihr wurde eine Unterstützung für Assertions hinzugefügt. Auch die API wurde wieder erweitert, was insbesondere die Serverprogrammierung erleichtern soll.
Siehe auch: Servlet, Java Web Start, JSP, J2EE, J2ME, Javadoc, Blackdown
Version 5.0
Java 5.0 erschien am 30. September 2004 als Nachfolger der Version 1.4. Bei dem augenscheinlichen Versionssprung von 1.x auf 5 handelt es sich um die Einführung einer sog. Produktnummer. Diese Produktnummern sollen in Zukunft die Java-Versionen nach außen hin repräsentieren. Intern sollte dieselbe Produktversion nach der bekannten, traditionellen Versionsnummer bezeichnet werden. Java 5.0 entspricht also der internen Versionsnummer 1.5, Java 6.0 entsprechend 1.6, etc.[6] Die „2“ z. B. aus J2EE verschwand somit ebenfalls ab Version 5.0 der Java Enterprise Edition und wird als JEE 5 bezeichnet.
In der Version 5 gab es umfangreiche Änderungen an der Sprache sowie weitere API-Erweiterungen:
- Generische Typen (Generics)
- Vereinfachte Syntax für die Iteration über Collections, Maps und Arrays
- Autoboxing/-unboxing (d. h. implizite Umwandlung von primitiven Datentypen in Objekte und zurück)
- Metadaten mit Hilfe von Annotationen
- Syntaktische Unterstützung für Aufzählungswerte („Enumerations“)
- Unterstützung für variable Argumentenlisten von Methoden
- Statischer Import von Klassen
- Erweiterte Look and Feels
- Hilfsklassen für nebenläufige Programmierung im neuen Paket
java.util.concurrent
- kovariante Ergebnistypen bei Methoden
Die zunächst für Java 5 („Tiger“-Release) geplanten Erweiterungen der Ein-/Ausgabefunktionen (JSR 203) wurden erst auf Java 6 („Mustang“-Release) und Anfang 2006 dann auf Java 7 („Dolphin“-Release) verschoben.
Die letzte Version von Java 5 war Java 1.5.22.
Version 6
Die Java-Version 6 wurde am 11. Dezember 2006 veröffentlicht. Besonderes Augenmerk wurde in dieser Version auf Diagnose, Überwachung und Management gelegt. So wurde ein Framework zur Zusammenarbeit mit diversen Skriptsprachen, wie z. B. PHP, Python, Ruby und JavaScript eingeführt.
Weitere Neuerungen sind eine verbesserte Darstellung von Desktop-Anwendungen sowie die Integration von Java DB, einer in Java implementierten relationalen Datenbank, die auf Apache Derby basiert.
Das im Oktober 2008 veröffentlichte Update auf Version 6u10 brachte nicht, wie sonst üblich, ausschließlich Fehlerbeseitigungen, sondern diverse Änderungen der JVM, mit denen nicht bis zum Erscheinen von Java 7 gewartet wurde. Zu den wichtigsten Neuerungen, die im Vorfeld bereits gefordert wurden, gehörten unter anderem:
- ein „Next Generation Java Plugin“, das dem Website-Betreiber mehr Möglichkeiten über eingebundene Applets anbietet [7]
- der für Webapplikationen gedachte Java-Kernel, der bei Bedarf eine minimale JVM installiert und nur die nötigen Pakete herunterlädt und lokal speichert [8]
- der Java Quick Starter, mit dessen Hilfe die Startzeit von Java-Applikationen deutlich verringert wird. [9]
Eine vollständige Liste sowie detaillierte Beschreibungen sind der Ankündigung zum Update 10 zu entnehmen.[10] Weitere Verbesserungen an der Virtuellen Maschine, die ursprünglich für Java 7 geplant waren, wurden in Java 6 integriert und in mehreren Updates ab Java 6 Update 14 ausgeliefert.
Version 7
Die Java-Version 7 wurde am 28. Juli 2011 fertiggestellt.
Es wurden vor allem Verbesserungen und Erweiterungen bestehender Funktionalitäten eingebaut. Diese sind unter anderem:
- Eine neue Filesystem-API (NIO.2), die die Geschwindigkeit von Dateisystemoperationen verbessert, bessere Möglichkeiten zum Kopieren und Verschieben von Dateien bietet, Methoden zum Traversieren von Verzeichnisstrukturen enthält und die zuverlässige Erkennung und Behandlung von symbolischen Links erlaubt.
- Bibliotheken für die Netzwerkprotokolle Stream Control Transmission Protocol (SCTP), Sockets Direct Protocol (SDP) und TLS 1.2. Des Weiteren wird unter Windows nach Möglichkeit nun ein aktuellerer IPv6-Netzwerkstack verwendet.
- Aktualisierung der Unicode-Unterstützung auf Unicode 6.0 (von Unicode 4.0 in Java 6), der Datenbankschnittstelle JDBC und der Gebietsschemaparameter (Locale), die nun die Standards IETF BCP 47 und UTR 35 implementiert.
- Das mit Java 6 Update 10 eingeführte Look-and-Feel Nimbus wird fester Bestandteil der Spezifikation.
- Eine XRender-Pipeline für Java 2D, die die Darstellung von grafischen Elementen auf Linux beschleunigt.
- Verbesserte Unterstützung des Java Bytecodes für dynamische Programmiersprachen.
- Kleinere Sprachverbesserungen im Rahmen des Project Coin wie die Nutzbarkeit von Strings in switch-Anweisungen.[11]
Eine Liste sowie detaillierte Beschreibungen der mit Java 7 umgesetzten Funktionalitäten sind Dokumentation des OpenJDK-Projektes Java 7 zu entnehmen.[12]
Version 8
Geplant ist mit Java 8 ursprünglich für Java 7 geplante Neuerungen nachzureichen:
- Modularisierung des Java-Frameworks (Projekt Jigsaw). Dies verbessert die Startzeit und reduziert die Speicheranforderungen von Java-Anwendungen.
- Closures, deren genaue Ausgestaltung allerdings noch unklar ist.
- Weitere kleinere Sprachverbesserungen im Rahmen des Project Coin und Annotationen für Java-Typen.
Lizenz
Am 13. November 2006 gab Sun bekannt, dass bis Ende des zweiten Quartals 2007 die komplette Java-Technik unter den Lizenzbestimmungen der GPL Version 2 veröffentlicht werden soll.[13][14] Am 8. Mai 2007 teilte man mit, dass dies für den Großteil der Technik geschehen sei.[15]
Ein Problem für Entwickler freier Software bestand bis dahin darin, dass Java zwar kostenlos war, jedoch nicht die Richtlinien für freie Software erfüllte. Probleme entstanden in diesem Rahmen vor allem dann, wenn beim Erstellen von Programmen „unfreie“ Klassen von Sun verwendet wurden, die freie Java-Compiler oder Java-Laufzeitumgebungen nicht verwenden können. Anwender von freien JVMs waren in diesen Fällen gezwungen, auf die JVM von Sun zurückzugreifen. In diesem Zusammenhang wurde auch von der „Java-Falle“ (Java Trap [16]) gesprochen.
Engagierte Entwickler haben darauf reagiert und eine beachtliche Menge an freier Software zur Interpretation, Kompilierung und Ausführung von Java-Programmen entwickelt, wie z. B. GNU Classpath, GNU Compiler for Java, Kaffe oder Harmony (von der Apache Software Foundation).
Jedoch, die Lizenzbedingungen für Oracles Java Compatibility Kit (JCK) wurden von der Apache Software Foundation[17] und der Linux Standard Base Arbeitsgruppe als bewusste Verhinderung von alternativen Implementierungen wahrgenommen, was u.a. zum Ausschluss von Java aus dem aktuellen LSB Standard 4.1 führte.[18]
Anwendungen
Java findet seinen Einsatz zum Beispiel in folgenden Bereichen:
- Im Inter-/Intranet als serverseitiger Dienst in Form eines Application Servers (z.B. Apache Tomcat, JBoss, GlassFish, u.v.m.)
- Im Inter-/Intranet als clientseitige Anwendung als Java-Applet oder Rich Internet Application, zum Beispiel durch JavaFX
- Für die Erstellung von plattformunabhängigen Desktopanwendungen (bekannte Beispiele dafür sind z.B die Entwicklungsplattformen Netbeans und Eclipse selbst).
- Anwendungen auf Chipkarten (sog. Java Cards)
- Für Anwendungen auf Mobiltelefonen basierend auf angepassten Java_Versionen wie JavaME oder Dalvik.
- Als Embedded Java in so genannten Eingebetteten Systemen, das heißt auf Computern, die in technische Geräte integriert sind und diese steuern. Dazu gehören unter anderem Steuergeräte für Maschinen, Aufzüge, Haushaltsgeräte und Geräte der Unterhaltungselektronik.
- Als Echtzeitsystem (mittels Java Real Time) beispielsweise für Verkehrssteuerungsanlagen.
Weblinks
Einzelnachweise
- ↑ The Java Language Environment – 1.2 Design Goals of the JavaTM Programming Language, James Gosling und Henry McGilton, Mai 1996
- ↑ Java Language Overview, 1995 Sun Whitepaper
- ↑ J2SE Code Names
- ↑ a b Mustang and Dolphin... we'll miss you - Verzicht auf Codenamen ab JSE 6.0, Ray Gans’s Blog, 15. August 2006 (Zugriff am 12. Oktober 2009)
- ↑ Reference: J2SE Code Names. In: Java Platform, Standard Edition (Java SE). Sun Microsystems (online, abgerufen am 25. Mai 2007).
- ↑ Version 1.5.0 or 5.0?, Java 5 Release Notes, abgerufen 5. Februar 2009
- ↑ Next-Generation Java Plug-In Technology
- ↑ Java Runtime Environment Installation for JavaSE 6u10
- ↑ JavaTM Quick Starter for JavaSE 6u10
- ↑ Java SE 6 Update 10 FAQ: JavaTM SE 6 Update Release Notes
- ↑ Java Programming Language Enhancements - Liste der Core Java Neuheiten in Versionen 5, 6, 7
- ↑ JDK 7 Features
- ↑ http://www.sun.com/2006-1113/feature/index.jsp
- ↑ http://www.sun.com/software/opensource/java/faq.jsp
- ↑ http://open.itworld.com/4915/070508opsjava/page_1.html
- ↑ Richard Stallman: Frei, aber gefesselt – die Java-Falle. 12. April 2004
- ↑ The ASF Resigns From the JCP Executive Committee, Apache Software Foundation blog, 2010-12-09
- ↑ Linux Standard Base 4.1 ohne Java. heise.de (11. März 2011). Abgerufen am 16. November 2011. „Java, im Status "Trial Use" in die Linux Standard Base 4.0 aufgenommen, wurde aus der neuen Version wieder entfernt. Grund dafür sind Lizenzierungsprobleme mit dem Java Compatibility Kit (JCK), dessen Bestehen Voraussetzung dafür ist, dass sich eine Java-Implementierung Java-kompatibel nennen darf. Die Apache Software Foundation wirft Oracle wie schon zuvor Sun vor, mit den Lizenzbedingungen des JCK konkurrierende Java-Implementierungen auszuschließen.“
Wikimedia Foundation.