Java (Programmiersprache)

Werbung
10.12.12
Jav a (Programmiersprache) – Wikipedia
Java (Programmiersprache)
aus Wikipedia, der freien Enzyklopädie
Java ist eine objektorientierte Programmiersprache und
eine eingetragene Marke des Unternehmens Sun
Microsystems (seit 2010 Oracle). Die
Programmiersprache ist ein Bestandteil der JavaTechnologie – diese besteht grundsätzlich aus dem
Java-Entwicklungswerkzeug (JDK) zum Erstellen von
Java-Programmen und der Java-Laufzeitumgebung (JRE)
zu deren Ausführung. Die Laufzeitumgebung besteht
selbst aus der virtuellen Maschine (JVM) sowie den
mitgelieferten Bibliotheken der Java-Laufzeitumgebung.
Die Programmiersprache Java dient innerhalb der JavaTechnologie vor allem dem Formulieren von
Programmen. Diese liegen zunächst als reiner,
menschenverständlicher Text vor, als sogenannter
Quellcode. Quellcode ist nicht direkt ausführbar; erst der
Java-Compiler, der Teil des Entwicklungswerkzeugs ist,
übersetzt ihn in einen maschinenverständlichen Code, den
sogenannten Java-Bytecode. Die Maschine, die diesen
Bytecode ausführt, ist jedoch typischerweise virtuell –
das heißt, der Code wird meist nicht direkt durch
Hardware (etwa einen Mikroprozessor) ausgeführt,
sondern durch entsprechende Software auf der
Zielplattform.
Zweck dieser Virtualisierung ist Plattformunabhängigkeit:
Das Programm soll ohne weitere Änderung auf jeder
Rechnerarchitektur laufen können, wenn dort eine
passende Laufzeitumgebung installiert ist. Oracle selbst
bietet Laufzeitumgebungen für die Betriebssysteme Linux,
Solaris und Windows an. Andere Hersteller lassen eigene
Java-Laufzeitumgebungen für ihre Plattform zertifizieren.
Auch in Autos, HiFi-Anlagen und anderen elektronischen
Geräten wird Java verwendet.[4]
Java
Basisdaten
Paradigmen:
Objektorientierte
Programmiersprache
Erscheinungsjahr: 1995[1]
Entwickler:
Sun Microsystems (seit 2010
Tochterunternehmen von Oracle)
Aktuelle Version: 7.0.9[2] (16. Oktober 2012[3])
Typisierung:
stark, statisch
Beeinflusst von:
C++, Smalltalk, Objective-C, C#
Beeinflusste:
Groovy, Clojure, C#, Scala, Vala,
ActionScript
Betriebssystem:
plattformunabhängig
Lizenz:
GNU General Public
License/Java Community
Process
oracle.com/technetwork/java/
(http://www.oracle.com/technetwork/java/index.html)
Um die Ausführungsgeschwindigkeit zu erhöhen, werden hochentwickelte JVM-Konzepte wie die Just-in-timeKompilierung und die Hotspot-Optimierung verwendet. In Bezug auf den eigentlichen Ausführungsvorgang kann
die JVM den Bytecode also interpretieren, ihn bei Bedarf jedoch auch kompilieren und optimieren.
Inhaltsverzeichnis
1 Grundkonzepte der Sprache
1.1 Objektorientierung
de.wikipedia.org/wiki/Jav a_(Programmiersprache)
1/13
10.12.12
Jav a (Programmiersprache) – Wikipedia
1.2 Reflection
1.3 Annotationen
1.4 Modulare Ausführung auf fernen Computern
2 Merkmale der Sprache
3 Syntax
4 Entstehung und Weiterentwicklung der Sprache
4.1 Entstehung
4.2 Sun und JCP
4.3 Java als freie Software
5 Unterschiede zu ähnlichen Sprachen
5.1 JavaScript
5.2 Smalltalk
5.3 C++
5.4 C#
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 Literatur
10 Weblinks
11 Einzelnachweise
Grundkonzepte der Sprache
Der Entwurf der Programmiersprache Java strebte hauptsächlich fünf Ziele an:[5][6]
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.
Einfachheit
Java ist im Vergleich zu anderen objektorientierten Programmiersprachen wie C++ oder C# einfach, da
es einen reduzierten Sprachumfang besitzt und beispielsweise Operatorüberladung und
Mehrfachvererbung nicht unterstützt.
Objektorientierung
Java gehört zu den objektorientierten Programmiersprachen.
Verteilt
de.wikipedia.org/wiki/Jav a_(Programmiersprache)
2/13
10.12.12
Jav a (Programmiersprache) – Wikipedia
Javas Klassenbibliothek bietet eine Reihe einfacher Möglichkeiten für Netzwerkkommunikation, von
TCP/IP-Protokollen über Remote Method Invocation bis zu Webservices.
Vertrautheit
Wegen der syntaktischen Nähe zu C++, der ursprünglichen Ähnlichkeit der Klassenbibliothek zu
Smalltalk-Klassenbibliotheken und der Verwendung von Entwurfsmustern in der Klassenbibliothek zeigt
Java für den erfahrenen Programmierer keine unerwarteten Effekte.
Robustheit
Viele der Designentscheidungen bei der Definition von Java reduzieren die Wahrscheinlichkeit ungewollter
Systemfehler; zu nennen sind die starke Typisierung, Garbage Collection, Ausnahmebehandlung sowie
Verzicht auf Zeigerarithmetik.
Sicherheit
Dafür stehen Konzepte wie der Class-Loader, der die sichere Zuführung von Klasseninformationen zur
Java Virtual Machine steuert, und Security-Manager, die sicherstellen, dass nur Zugriff auf
Programmobjekte erlaubt wird, für die entsprechende Rechte vorhanden sind.
Architekturneutralität
Java wurde so entwickelt, dass dieselbe Version eines Programms prinzipiell auf einer beliebigen
Computerhardware läuft, unabhängig von ihrem Prozessor oder anderen Hardwarebestandteilen.
Portabilität
Zusätzlich zur Architekturneutralität ist Java portabel. Das heißt, dass primitive Datentypen sowohl in ihrer
Größe und internen Darstellung als auch in ihrem arithmetischen Verhalten standardisiert sind.
Beispielsweise ist ein floatimmer ein IEEE 754 Float von 32 Bit. Dasselbe gilt für die
Klassenbibliothek, die beispielsweise unabhängig vom Betriebssystem dasselbe GUI erzeugen kann.
Leistungsfähigkeit
Java hat aufgrund der Optimierungsmöglichkeit zur Laufzeit das Potential, eine bessere Performance als
auf Kompilezeit-Optimierungen begrenzte Sprachen (C++, etc) zu erreichen. Dem entgegen steht der
Overhead durch die Java-Laufzeitumgebung, so das die Leistungsfähigkeit von beispielsweise C++Programmen in einigen Kontexten übertroffen,[7][8] in anderen aber nicht erreicht wird.[9]
Interpretierbarkeit
Java wird in maschinenunabhängigen Bytecode kompiliert, dieser wiederum kann auf der Zielplattform
interpretiert werden. Die Java Virtual Machine der Firma Oracle (früher Sun) interpretiert JavaBytecode, bevor sie ihn aus Performancegründen kompiliert und optimiert.
Parallelisierbarkeit
Java unterstützt Multithreading, also den parallelen Ablauf von eigenständigen Programmabschnitten.
Dazu bietet die Sprache selbst die Keywords synchronizedund volatile– Konstrukte, die das
„Monitor & Condition Variable Paradigma“ von C. A. R. Hoare[10] unterstützen. Die Klassenbibliothek
enthält weitere Unterstützungen für 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 ändernde Rahmenbedingungen anpassen lässt. Da die
Module erst zur Laufzeit gelinkt werden, können beispielsweise Teile der Software (etwa Bibliotheken)
de.wikipedia.org/wiki/Jav a_(Programmiersprache)
3/13
10.12.12
neu ausgeliefert werden, ohne die restlichen Programmteile anpassen zu müssen. Interfaces können als
Basis für die Kommunikation zwischen zwei Modulen eingesetzt werden; die eigentliche Implementierung
kann aber dynamisch und beispielsweise auch während der Laufzeit geändert werden.
Objektorientierung
Die Grundidee der objektorientierten Programmierung ist, Daten und zugehörige Funktionen möglichst eng in
einem sogenannten Objekt zusammenzufassen und nach außen hin zu kapseln (Abstraktion). Die Absicht
dahinter ist, große Softwareprojekte einfacher zu verwalten und die Qualität der Software zu erhöhen. Ein
weiteres Ziel der Objektorientierung ist ein hoher Grad der Wiederverwendbarkeit von Softwaremodulen.
Ein neuer Aspekt von Java gegenüber den objektorientierten Programmiersprachen C++ und Smalltalk ist die
explizite Unterscheidung zwischen Schnittstellen und Klassen, die durch entsprechende Schlüsselwörter
interfaceund classausgedrückt wird. Java unterstützt kein Erben von mehreren unabhängigen Basisklassen
(sogenannte „Mehrfachvererbung“ wie in C++ oder Eiffel), wohl aber das Implementieren einer beliebigen Zahl
von Schnittstellen, womit sich viele der entsprechenden Probleme ebenfalls lösen lassen. Dabei werden nur die
Methodensignaturen an die abgeleiteten Klassen weitergegeben, jedoch keine Attribute und keine
Implementierungen der Methoden.
Java ist nicht vollständig objektorientiert, da die Grunddatentypen (int, boolean usw.) keine Objekte (siehe auch
unter Java-Syntax) sind. Sie werden allerdings ab Java 1.5 bei Bedarf automatisch und für den Programmierer
transparent mittels Autoboxing in die entsprechenden Objekttypen und umgekehrt umgewandelt.[11]
Reflection
Java bietet eine Reflection-API als Bestandteil der Laufzeitumgebung. Damit ist es möglich, zur Laufzeit auf
Klassen und Methoden zuzugreifen, deren Existenz oder genaue Ausprägung zur Zeit der Programmerstellung
nicht bekannt war. Häufig wird diese Technik im Zusammenhang mit dem Entwurfsmuster Fabrikmethode
(Factory Method) angewandt.
Annotationen
Mit Java 5 hat Sun die Programmiersprache um Annotationen erweitert. Annotationen erlauben die Notation
von Metadaten und ermöglichen bis zu einem gewissen Grad benutzerdefinierte Spracherweiterungen. Sinn der
Annotationen ist unter anderem die automatische Erzeugung von Code und anderen in der SoftwareEntwicklung wichtigen Dokumenten für wiederkehrende Muster anhand möglichst kurzer Hinweise im Quelltext.
Bislang wurden in Java dafür ausschließlich Javadoc-Kommentare mit speziellen JavaDoc-Tags verwendet, die
von Doclets wie zum Beispiel dem XDoclet ausgewertet wurden.
Annotationen können auch in den kompilierten Class-Dateien enthalten sein. Der Quelltext wird also für ihre
Verwendung nicht benötigt. Insbesondere sind die Annotationen auch über die Reflection-API zugänglich. So
können sie zum Beispiel zur Erweiterung des Bean-Konzeptes verwendet werden.
Modulare Ausführung auf fernen Computern
Java bietet die Möglichkeit, Klassen zu schreiben, die in unterschiedlichen Ausführungsumgebungen ablaufen.
Beispielsweise lassen sich Applets in Webbrowsern, die Java unterstützen, ausführen. Das Sicherheitskonzept
von Java kann dazu eingesetzt werden, dass unbekannte Klassen dabei keinen Schaden anrichten können, was
vor allem bei Applets wichtig ist (siehe auch Sandbox). Beispiele für in entsprechenden Ausführungsumgebungen
ausführbare Java-Module sind Applets, Servlets, Portlets, Midlets, Xlets, Translets, und Enterprise JavaBeans.
de.wikipedia.org/wiki/Jav a_(Programmiersprache)
4/13
10.12.12
Jav a (Programmiersprache) – Wikipedia
Merkmale der Sprache
Der Objektzugriff in Java ist über Referenzen implementiert, die den aus C oder C++
bekannten Zeigern ähneln.[12] Die Sprachdefinition (Java Language Specification)
bezeichnet sie als „Reference Values“ um deutlich zu machen, dass sie als Call by value
übergeben werden.[13] Aus Sicherheitsgründen erlauben diese weder den Verweis auf
Methoden oder andere Referenzen, noch die tatsächliche Speicheradresse zu erkennen
oder zu modifizieren. So genannte Zeigerarithmetik ist in Java somit ausgeschlossen. Per
Design kann so ein häufiger Typ von Fehlern, die in anderen Programmiersprachen
auftreten, von vornherein ausgeschlossen werden.
Zusammengehörige Klassen werden in Paketen (englisch packages) zusammengefasst.
Diese Pakete ermöglichen die Einschränkung der Sichtbarkeit von Klassen, eine
Duke, das JavaStrukturierung von größeren Projekten sowie eine Trennung des Namensraums für
Maskottchen
verschiedene Entwickler. Die Paketnamen sind hierarchisch aufgebaut und beginnen meist
mit dem (umgekehrten) Internet-Domainnamen des Entwicklers. (Pakete, die von Sun
erstellt werden, beginnen z. B. mit „com.sun.“) Klassennamen müssen nur innerhalb eines Paketes eindeutig sein.
Hierdurch ist es möglich, 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 für Klassen des eigenen Paketes sichtbar oder für alle
Pakete.
Weiter unterstützt die Sprache Threads (nebenläufig 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 unterstützt kein direktes Erben von mehreren
Klassen (sogenannte „Mehrfachvererbung“), jedoch die Vererbung über mehrere Hierarchie-Ebenen (Klasse
Kind erbt von Klasse Vater, die ihrerseits von Klasse Großvater 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 gehört eine umfangreiche Klassenbibliothek. Dem Programmierer wird damit eine einheitliche, vom
zugrundeliegenden Betriebssystem unabhängige Schnittstelle (Application programming interface, API)
angeboten.
Mit Java 1.2 wurden die Java Foundation Classes (JFC) eingeführt, die unter anderem Swing bereitstellen, das
zur Erzeugung plattformunabhängiger grafischer Benutzerschnittstellen (GUI) dient und auf dem Abstract
Window Toolkit basiert.
Syntax
→ 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!“ auf dem Ausgabemedium aus.
de.wikipedia.org/wiki/Jav a_(Programmiersprache)
5/13
10.12.12
Jav a (Programmiersprache) – Wikipedia
public class HalloWelt {
public static void main(String[] args) {
System.out.println("Hallo Welt!");
}
}
Entstehung und Weiterentwicklung der Sprache
Entstehung
Herkunft und Entwicklung der Programmiersprache Java sowie mit ihr verwandter Technik sind im Artikel Java
(Technik) beschrieben.
Sun und JCP
Neben Sun kümmert sich eine Vielzahl von Einzelpersonen, kleiner und großer 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
Sun hat zugesichert, sein JDK unter der GNU General Public License zu veröffentlichen. Am 13. November
2006 wurden bereits mit dem Compiler javac und der Hotspot Virtual Machine erste Teile als Open Source
veröffentlicht. Zudem wurde mit OpenJDK eine Community-Seite eröffnet, mit deren Hilfe die Entwicklung
koordiniert werden soll.[14] Am 8. Mai 2007 folgten dann große Teile des „Java-SE“-Quellcodes zum Erstellen
eines JDK. Eine Ausnahme stellt solcher Code dar, für den Sun nicht die nötigen Rechte besitzt, um ihn
freizugeben. Dieser liegt somit nur in kompilierter Form vor.[15] Ebenfalls kündigte Sun an, dass Entwicklungen
auf Grundlage des OpenJDK das „Java Compatible“-Logo führen dürfen, wenn sie nach dem „Technical
Compatibility Kit“ (JCK) zertifiziert sind.
Zuvor wurde der Quelltext von Java unter anderem bei jedem JDK mitgeliefert und ermöglichte so zwar
Einsicht, er durfte aber nicht beliebig modifiziert werden. Deswegen gibt es neben den offiziellen JCP auch
diverse unabhängige Vereinigungen, die es sich zum Ziel gesetzt haben, ein unter eine freie Open-Source-Lizenz
gestelltes Java bereitzustellen. Die bekanntesten dieser Projekte sind Apache Harmony, Kaffe und das GNUClasspath-Projekt.
Unterschiede zu ähnlichen Sprachen
JavaScript
Java darf nicht mit der Skriptsprache JavaScript verwechselt werden. JavaScript wurde von Netscape
entwickelt, hieß früher LiveScript und wurde im Zuge einer Kooperation zwischen Netscape und Sun
Microsystems in JavaScript umgenannt.[16]
Javascript ist eine dynamisch typisierte, objektbasierte, aber klassenlose Skriptsprache mit einer ähnlichen
Syntax wie C, Perl oder Java, unterscheidet sich jedoch in vielerlei Hinsicht von Java. Trotz der Ähnlichkeit der
Namen der beiden Programmiersprachen unterscheidet sich Java stärker von JavaScript als zum Beispiel von
C++ oder C#. JavaScript wird vornehmlich in HTML-Seiten zur eingebetteten Programmierung verwendet, um
interaktive Webapplikationen zu ermöglichen.
de.wikipedia.org/wiki/Jav a_(Programmiersprache)
6/13
10.12.12
Jav a (Programmiersprache) – Wikipedia
Smalltalk
Smalltalk ist eine der ältesten objektorientierten Programmiersprachen überhaupt. Java erbt von Smalltalk die
grundsätzliche Konzeption eines Klassenbaumes, in den alle Klassen eingehängt werden. Dabei stammen alle
Klassen entweder direkt oder indirekt von der Klasse java.lang.Objectab. Außerdem wurden die
Konzepte der automatischen Speicherbereinigung (garbage collector) und der virtuellen Maschine
übernommen 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 übernommen, primitive Datentypen werden aber ab Java 1.5
mittels Autoboxing bei Bedarf in die entsprechenden Objekttypen und umgekehrt umgewandelt.[11]
C++
Java lehnt seine Syntax an die der Programmiersprache C++ an. Im Gegensatz zu C++ fanden jedoch
komplexe Konstrukte wie Mehrfachvererbung oder die fehleranfällige Zeigerarithmetik keinen Einzug. Klassen
können 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 möglichen abstrakten Klassen
verwendet. Die interne Speicherverwaltung wird dem Java-Entwickler weitgehend abgenommen; dies erledigt
die automatische Speicherbereinigung. Deshalb ist Java in vielen Fällen leichter zu handhaben als C++.
Allerdings garantiert auch dieser Mechanismus nicht den vollständigen Ausschluss von Speicherlecks. Letztlich
muss der Programmierer dafür sorgen, dass nicht mehr verwendete Objekte von keinem laufenden Thread mehr
referenziert werden. Sich gegenseitig referenzierende Objekte, die von keinem Thread aus mehr über
Referenzen erreichbar sind, werden ebenfalls freigegeben, wobei es dem Garbage Collector (GC) obliegt, wann
und ob überhaupt diese Objekte freigegeben werden. Jede Objektklasse besitzt zusätzlich eine Methode
namens finalize, die vom GC aufgerufen werden kann, um zusätzliche „Aufräumarbeiten“ durchzuführen. 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 möglich, Operatoren (zum Beispiel arithmetische Operatoren wie +
und -, logische Operatoren wie &&und ||, oder den Index-Operator []) zu überladen, das heißt in einem
bestimmten Kontext mit neuer Bedeutung zu versehen. Dies sorgt einerseits für eine Vereinfachung der Sprache
an sich und verhindert, dass Quellcodes mit Operatoren, die mit schwer nachvollziehbarer Semantik überladen
werden, unleserlich gemacht werden. Andererseits würden benutzerdefinierte Typen mit überladenen
Operatoren in C++ eher wie eingebaute Typen erscheinen können – vor allem numerischer Code wäre so
mitunter einfacher nachzuvollziehen. Die Sprachdefinition von Java definiert jedoch typabhängiges Verhalten der
Operatoren +(Addition bei arithmetischen Operanden, andernfalls zur Verkettung von Zeichenketten „string
concatenation“) sowie &, |und ^(logisch für boolean und bitweise für arithmetische Operanden). Das lässt
diese Operatoren zumindest wie teilweise überladene Operatoren erscheinen.
Das C++-Konstrukt der „Templates“, die es erlauben, Algorithmen oder sogar ganze Klassen unabhängig von
den darin verwendeten Datentypen zu definieren, wurde in Java nicht übernommen. Seit Version 1.5 unterstützt
Java aber sogenannte „Generics“, die zwar keinerlei Metaprogrammierung erlauben, aber ähnlich wie C++Templates typsichere Container und ähnliches ermöglichen.
In Java wurde das Schlüsselwort constreserviert, hat aber keine Funktion. Die Alternative zu const(und
Präprozessor-Direktiven) ist final. Im Gegensatz zu constwird final in einer Methodensignatur nicht vererbt
7/13
10.12.12
Jav a (Programmiersprache) – Wikipedia
und hat somit nur im aktuellen Scope Gültigkeit. 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 unüberschreibbar wird) besitzen.
C#
Die von Microsoft entwickelte Programmiersprache C# 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. C#
implementiert hierzu die Unterstützung von Delegaten (englisch delegates), einem Konzept, das mit
Funktionszeigern vergleichbar ist. In Java kommt hingegen das Beobachter-Entwurfsmuster zum Einsatz.
Des Weiteren unterstützt C# so genannte Attribute (attributes), die es erlauben, die Funktionalität der Sprache
über Metadaten im Code zu erweitern (eine ähnliche Funktionalität wurde in Form der oben beschriebenen
Annotations in Java 5.0 übernommen). C# enthält auch Bestandteile der Sprachen VisualBasic, zum Beispiel
Eigenschaften (properties), sowie Konzepte aus C++.
In C# ist es ebenso wie in Java möglich, Ausnahmen (exceptions) zu einer Methode zu deklarieren. In Java
können Ausnahmen so deklariert werden, dass sie auch verarbeitet werden müssen (checked exception).
Systembefehle können in .NET über platform invoke aufgerufen werden. Dies ist in Java von der Syntax her
nicht möglich, kann aber über die Klassenbibliothek mittels Runtime.exec()und
java.lang.ProcessBuilderbeziehungsweise Jakarta Commons Exec bewerkstelligt werden.
Geschwindigkeitskritische Programmteile können in C# in so genanntem unsicheren unsafe code geschrieben
werden, was ähnlich zu Inline-Assembler in C-Programmen zu sehen ist. Java kennt hierfür in der Sprache aus
Sicherheits-, Stabilitäts- und Plattformunabhängigkeitsgründen keine Entsprechung. Java bietet allerdings mittels
Java Native Interface die Möglichkeit, C- und C++-Code in Javapakete einzubetten und außerhalb der Java
Virtual Machine laufen zu lassen. Darüber hinaus bietet Java die Möglichkeit aus Java-Code heraus
verschiedene Skriptsprachen auszuführen. 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,[17] wurde auch die Unterstützung für dynamische
„Fremdsprachen“ durch die Virtual Machine verbessert.[18]
Anwendungsarten
Mit Java können zahlreiche verschiedene Arten von Anwendungen erstellt werden.
Java Webanwendungen
Java Webanwendungen sind Java-Programme, welche auf einem Webserver geladen und gestartet werden, und
beim Benutzer in einem Webbrowser ablaufen bzw. dargestellt werden. Üblicherweise läuft ein Teil der
Webanwendung auf dem Server (die Geschäftslogik und Persistenz) und ein anderer Teil am Webbrowser (die
Logik der Grafischen Benutzeroberfläche). Der Serverteil wird üblicherweise vollständig in Java geschrieben,
der Browserteil üblicherweise in HTML und Javascript. Es ist jedoch auch möglich Java Webanwendungen
inklusive GUI Logik vollständig in Java zu schreiben (siehe z.B. Google Web Toolkit oder Rich Ajax Platform).
Bekannte Beispiele für Java Webanwendungen sind Jira, Jenkins oder Gmail (welches nicht vollständig, aber zu
großen Teilen in Java geschrieben ist).
de.wikipedia.org/wiki/Jav a_(Programmiersprache)
8/13
10.12.12
Jav a (Programmiersprache) – Wikipedia
Java Desktop-Anwendungen
Unter Desktop-Anwendungen oder Applikationen werden normale Desktop-Programme zusammengefasst.
Sowohl Internet-Kommunikations-Programme, wie auch Spiele oder Office-Anwendungen die auf einem
normalen PC laufen werden so genannt. Bekannte Beispiele für Java Desktop Anwendungen sind die Integrierte
Entwicklungsumgebung Eclipse, das Filesharingprogramm Vuze oder das Computerspiel Minecraft.
Java Applets
Java-Applet sind Java Anwendungen, welche normalerweise in einem Webbrowser ausgeführt werden. Sie sind
üblicherweise auf einen durch ein spezielles HTML Tag definierten Bereich einer Webseite beschränkt.
Voraussetzung für die Ausführung von Java Applets ist ein Java-fähiger Browser. Beispiele für Java Applets sind
dynamische Darstellungen von Börsenkursen.
Apps
Apps sind kleinere Applikationen für mobile Geräte wie Handys, Smartphones, PDAs oder Tablets. Sie laufen
üblicherweise auf speziellen für die Ausführung von Java Anwendungen auf mobilen Geräten optimierten Java
Plattformen wie die Java Platform, Micro Edition oder Android.
Entwicklungsumgebungen
Es gibt eine große Vielfalt von Entwicklungsumgebungen für Java, sowohl proprietäre als auch freie (Open
Source). Die meisten Entwicklungsumgebungen für Java sind selbst ebenfalls in Java geschrieben.
Die bekanntesten Open-Source-Umgebungen sind das von der Eclipse Foundation bereitgestellte Eclipse und
das von Sun entwickelte NetBeans.
Unter den kommerziellen Entwicklungsumgebungen sind das auf NetBeans basierende Sun ONE Studio von
Sun, IntelliJ IDEA von JetBrains, JBuilder von Borland sowie JCreator am verbreitetsten. Außerdem gibt es
noch eine, um einige hundert Plugins erweiterte Version von Eclipse, die von IBM unter dem Namen
WebSphere Studio Application Developer („WSAD“) vertrieben wurde und seit Version 6.0 Rational
Application Developer („RAD“) heißt.
Apple liefert mit Mac OS X ab Version 10.3 die Entwicklungsumgebung Xcode aus, die verschiedene
Programmiersprachen unterstützt und einen Schwerpunkt auf Java setzt.
Wer lieber einen Texteditor verwendet, findet in Emacs zusammen mit der JDEE (Java Development
Environment for Emacs) ein mächtiges Werkzeug. Ein vielseitiger und erweiterbarer in Java geschriebener Editor
ist jEdit. Für andere Editoren wie Vim, Jed oder TextPad gibt es ebenfalls entsprechende Modi.
Für Einsteiger und Ausbildungszwecke konzipiert ist BlueJ, wo unter anderem die Beziehungen zwischen den
verschiedenen Klassen graphisch in Form von Klassendiagrammen dargestellt werden.
Compiler
Ein Java-Compiler übersetzt Java-Quellcode (Dateiendung „.java“) in einen ausführbaren Code. Grundsätzlich
unterscheidet man zwischen Bytecode- und Nativecode-Compilern. Einige Java-Laufzeitumgebungen
verwenden einen JIT-Compiler, um zur Laufzeit den Bytecode häufig genutzter Programmteile in nativen
Maschinencode zu übersetzen.
de.wikipedia.org/wiki/Jav a_(Programmiersprache)
9/13
10.12.12
Jav a (Programmiersprache) – Wikipedia
Bytecode-Compiler
Im Normalfall übersetzt der Java-Compiler die Programme in einen nicht direkt ausführbaren Bytecode
(Dateiendung „.class“), den die Java Runtime Environment (JRE) später ausführt. Die aktuelle HotSpotTechnologie kompiliert den Bytecode zur Laufzeit in nativen Prozessorcode und optimiert diesen abhängig von
der verwendeten Plattform. Diese Optimierung findet dabei nach und nach statt, so dass der Effekt auftritt, dass
Programmteile nach mehrmaliger Abarbeitung schneller werden. Andererseits führt diese Technik, die ein
Nachfolger der Just-In-Time-Compilierung ist, dazu, dass Java-Bytecode theoretisch genau so schnell wie
native, kompilierte Programme ausgeführt werden könnte.
Die HotSpot-Technik ist seit der JRE Version 1.3 verfügbar und wurde seitdem stetig weiter verbessert.
Beispiele für Bytecode-Compiler sind javac (Teil des JDK) und Jikes von IBM.
Native Compiler
Es existieren auch Compiler für Java, die Java-Quelltexte oder Java-Bytecode in „normalen“ Maschinencode
übersetzen können, so genannte Ahead-of-time-Compiler. Nativ kompilierte Programme haben den Vorteil,
keine JavaVM mehr zu benötigen, aber auch den Nachteil, nicht mehr plattformunabhängig zu sein.
Beispiele für native Java Compiler sind Excelsior JET sowie GNU Compiler for Java (GCJ) wie MinGW,
Cygwin oder JavaNativeCompiler (JNC).
Wrapper
→ Hauptartikel: Wrapper (Software)
Als weitere Möglichkeit kann das Java-Programm in ein anderes Programm „eingepackt“ (englisch to wrap)
werden; diese äußere Hülle dient dann als Ersatz für ein Java-Archiv. Sie sucht selbständig nach einer
installierten Java-Laufzeitumgebung, um das eigentliche Programm zu starten, und informiert den Benutzer
darüber, wo er eine Laufzeitumgebung herunterladen kann, sofern noch keine installiert ist. Es ist also immer
noch eine Laufzeitumgebung nötig, um das Programm starten zu können, aber der Anwender erhält eine
verständliche Fehlermeldung, die ihm weiterhilft.
Java Web Start ist ein etwas eleganterer und standardisierter Ansatz für diese Lösung – er ermöglicht die
einfache Aktivierung von Anwendungen mit einem einzigen Mausklick und garantiert, dass immer die neueste
Version der Anwendung ausgeführt wird. Dadurch werden komplizierte Installations- oder
Aktualisierungsprozeduren automatisiert.
Beispiele für Java-Wrapper sind JSmooth oder Launch4J. JBuilder von Borland und NSIS sind ebenfalls in der
Lage, einen Wrapper für Windows zu erstellen.
Literatur
Florian Siebler: Einführung in Java mit BlueJ
(http://www.galileocomputing.de/katalog/buecher/titel/gp/titelID-2411?
GalileoSession=01662833A5.OijR.M6k) . Galileo Computing, 2011, ISBN 978-3-8362-1630-2.
Christian Ullenboom: Java ist auch eine Insel (http://openbook.galileocomputing.de/javainsel9/) . 9.
Auflage. Galileo Computing, 2010, ISBN 978-3-8362-1506-0.
Joachim Goll: JAVA als erste Programmiersprache – vom Einsteiger zum Profi. 6. Auflage,
Dezember 2010. Teubner, ISBN 978-3-8348-0656-7.
10/13
10.12.12
Jav a (Programmiersprache) – Wikipedia
Thorsten Leimbach et al.: Roberta – Programmieren mit Java. Fraunhofer IRB, 2009, ISBN 978-38167-8045-8
Guido Krüger, Thomas Stark: Handbuch der Java-Programmierung (http://www.javabuch.de/) . 6.
Auflage. Addison-Wesley, München 2009, ISBN 978-3-8273-2874-8.
Gottfried Wolmeringer: Java 6 lernen mit Eclipse. 2. Auflage. Galileo, Bonn 2007, ISBN 3-89842872-9.
Hubert Partl: Programmieren mit Java. (http://www.boku.ac.at/javaeinf/EinfProgJava.pdf) (PDF)
Zentraler Informatikdienst, Universität für Bodenkultur Wien, Wien 2007.
Dirk Louis, Peter Müller: Java 7. Das Handbuch. Markt & Technik, München 2011, ISBN 978-38272-4353-9.
James Gosling, Bill Joy, Guy Steele, Gilad Bracha: The Java Language Specification 3. Auflage.
Addison-Wesley, München 2005, ISBN 0-321-24678-0. (docs.oracle.com
(http://docs.oracle.com/javase/specs/) Download/Online, mit SE 7 Edition)
Weblinks
Wikiversity: Java (Programmiersprache) – Kursmaterialien, Forschungsprojekte und wissenschaftlicher
Austausch
Commons: Java (programming language)
(//commons.wikimedia.org/wiki/Category:Java_(programming_language)?uselang=de) – Sammlung
von Bildern, Videos und Audiodateien
Java-Homepage (http://www.oracle.com/technetwork/java/index.html) bei Oracle (englisch)
Umfangreiches Wiki zu Java (http://javawiki.sowas.com/) (deutsch)
Java-Download (http://java.com/de/download/index.jsp)
java.net Java-community (http://java.net/) Projekte-Blogs etc. (englisch)
Programmierrichtlinien für Java (http://www.oracle.com/technetwork/java/codeconvtoc-136057.html)
von Sun Microsystems/Oracle (englisch)
Kenndaten JDK 7 (http://openjdk.java.net/projects/jdk7/features/) (englisch)
Java-API von Oracle (http://download.oracle.com/javase/7/docs/api/) (englisch)
Einzelnachweise
1. Jon Byous: Java Technology: The Early Years.
(http://web.archive.org/web/20100105045840/http://java.sun.com/features/1998/05/birthday.html) Sun
Microsystems, 2003, archiviert vom Original (http://java.sun.com/features/1998/05/birthday.html) ,
abgerufen am 22. Dezember 2009 (englisch): „On May 23, 1995, John Gage, director of the Science
Office for Sun Microsystems, and Marc Andreessen, cofounder and executive vice president at
Netscape, stepped onto a stage and announced to the SunWorldTM audience that JavaTM technology
was real, it was official, and it was going to be incorporated into Netscape NavigatorTM, the world’s
portal to the Internet.“
2. Release Notes der aktuellen Java Version (http://www.oracle.com/technetwork/java/javase/7u9relnotes-1863279.html)
3. Java Download Seite (http://www.oracle.com/technetwork/java/index.html)
4. Installationsbildschirm unter Microsoft Windows
5. James Gosling, Henry McGilton: The Java Language Environment. 1.2 Design Goals of the Java
Programming Language. (http://java.sun.com/docs/white/langenv/Intro.doc2.html) Mai 1996.
6. The Java Language: An Overview. (http://java.sun.com/docs/overviews/java/java-overview-1.html)
1995 Sun Whitepaper
de.wikipedia.org/wiki/Jav a_(Programmiersprache)
11/13
10.12.12
Jav a (Programmiersprache) – Wikipedia
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
1995 Sun Whitepaper
Hajo Schulz: Daniel Düsentrieb, C#, Java, C++ und Delphi im Effizienztest. Teil 1. In: c't. Nr. 19,
Heise Zeitschriften Verlag, Hannover 2003, S. 204–207 (heise.de
(http://www.heise.de/kiosk/archiv/ct/2003/19/204_C-,-Java,-C-und-Delphi-im-Effizienztest,-Teil-1) ,
abgerufen am 21. Oktober 2010).
Hajo Schulz: Daniel Düsentrieb, C#, Java, C++ und Delphi im Effizienztest. Teil 2. In: c't. Nr. 21,
Heise Zeitschriften Verlag, Hannover 2003, S. 222–227 (heise.de
(http://www.heise.de/kiosk/archiv/ct/2003/21/222_C-,-Java,-C-und-Delphi-im-Effizienztest,-Teil-2) ,
abgerufen am 21. Oktober 2010).
J.P.Lewis, Ulrich Neumann: Java pulling ahead?
(http://www.idiom.com/~zilla/Computer/javaCbenchmark.html) Performance of Java versus C++.
Computer Graphics and Immersive Technology Lab, University of Southern California, 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 (27. April 2011): Loop Recognition in C++/Java/Go/Scala (https://days2011.scalalang.org/sites/days2011/files/ws3-1-Hundt.pdf) (englisch). Scala Days 2011. 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“
C. A. R. Hoare: Monitors: an operating system structuring concept.
(http://cacm.acm.org/magazines/1974/10/11658-monitors/pdf?dl=no) (PDF) In: Communications of
the ACM. 17, Nr. 10, 1974, S. 549–557.
Autoboxing in Java
(http://download.oracle.com/javase/7/docs/technotes/guides/language/autoboxing.html) (englisch)
Scott Stanchfield: Java is Pass-by-Value, Dammit! (http://javadude.com/articles/passbyvalue.htm)
JavaDude.com, abgerufen am 5. November 2010 (englisch).
Types, Values, and Variables.
(http://docs.oracle.com/javase/specs/jls/se5.0/html/typesValues.html#4.3.1) In: Java Language
Specification. Sun Microsystems, abgerufen am 6. November 2010 (englisch).
Community-Seite zur Entwicklung des Open-Source-JDKs von Sun (http://openjdk.java.net/)
Sun Microsystems Presseankündigung vom 8. Mai 2007
(http://web.archive.org/web/20080511090905/http://www.sun.com/aboutsun/pr/200705/sunflash.20070508.3.xml) (englisch)
Brendan Eich: JavaScript at Ten Years
(http://web.archive.org/web/20070528020012/http://www.mozilla.org/js/language/ICFP-Keynote.ppt) ,
2005, im Internet Archive.
Roadmap JDK 7 (http://openjdk.java.net/projects/jdk7/) (englisch)
JDK 7 Features – JSR 292: VM support for non-Java languages (InvokeDynamic)
(http://openjdk.java.net/projects/jdk7/features/#f353) (englisch)
Normdaten (Sachbegriff): GND: 4401313-9
Von „http://de.wikipedia.org/w/index.php?title=Java_(Programmiersprache)&oldid=111516084“
Kategorien: Wikipedia:Gesprochener Artikel Programmiersprache Programmiersprache Java
Programmiersprache für die JVM Freies Programmierwerkzeug
Diese Seite wurde zuletzt am 10. Dezember 2012 um 16:03 Uhr geändert.
de.wikipedia.org/wiki/Jav a_(Programmiersprache)
12/13
10.12.12
Jav a (Programmiersprache) – Wikipedia
Abrufstatistik
Der Text ist unter der Lizenz „Creative Commons Attribution/Share Alike“ verfügbar; zusätzliche
Bedingungen können anwendbar sein. Einzelheiten sind in den Nutzungsbedingungen beschrieben.
Wikipedia® ist eine eingetragene Marke der Wikimedia Foundation Inc.
13/13
Herunterladen