Sie sind auf Seite 1von 12

Java (Programmiersprache)

1 of 12

zim://A/Java_(Programmiersprache).html

Java (Programmiersprache)
aus Wikipedia, der freien Enzyklopdie

Java

Java ist eine objektorientierte Programmiersprache und eine


eingetragene Marke des Unternehmens Sun Microsystems
(2010 von Oracle aufgekauft). Die Programmiersprache ist ein
Bestandteil der Java-Technologie diese besteht
grundstzlich aus dem Java-Entwicklungswerkzeug (JDK)
zum Erstellen von Java-Programmen und der
Java-Laufzeitumgebung (JRE) zu deren Ausfhrung. Die
Laufzeitumgebung selbst umfasst die virtuelle Maschine
(JVM) und die mitgelieferten Bibliotheken.
Die Programmiersprache Java dient innerhalb der
Java-Technologie vor allem dem Formulieren von
Programmen. Diese liegen zunchst als reiner,
menschenverstndlicher Text vor, als sogenannter Quellcode.
Dieser Quellcode ist nicht direkt ausfhrbar; erst der
Java-Compiler, der Teil des Entwicklungswerkzeugs ist,
bersetzt ihn in einen maschinenverstndlichen Code, den
sogenannten Java-Bytecode. Die Maschine, die diesen
Bytecode ausfhrt, ist jedoch typischerweise virtuell das
heit, der Code wird meist nicht direkt durch Hardware (etwa
einen Mikroprozessor) ausgefhrt, sondern durch
entsprechende Software auf der Zielplattform.

Basisdaten
Paradigmen:

Objektorientierte
Programmiersprache

Erscheinungsjahr: 1995[1]
Entwickler:

Sun Microsystems (seit 2010


Tochterunternehmen von
Oracle)

Aktuelle Version: 8 Update 25[2]

(14. Oktober 2014[3])

Typisierung:

stark, statisch

Beeinflusst von:

C++, Smalltalk, Objective-C,


C#

Zweck dieser Virtualisierung ist Plattformunabhngigkeit: Das


Programm soll ohne weitere nderung auf jeder
Rechnerarchitektur laufen knnen, wenn dort eine passende Beeinflusste:
Laufzeitumgebung installiert ist. Oracle selbst bietet
Laufzeitumgebungen fr die Betriebssysteme Linux, OS X,
Betriebssystem:
Solaris und Windows an. Andere Hersteller lassen eigene
Lizenz:
Java-Laufzeitumgebungen fr ihre Plattform zertifizieren.
Auch in Autos, HiFi-Anlagen und anderen elektronischen
Gerten wird Java verwendet.

Groovy, Clojure, C#, Scala,


Vala, ActionScript
plattformunabhngig
GNU General Public
License/Java Community
Process

oracle.com/technetwork/java/

Um die Ausfhrungsgeschwindigkeit zu erhhen, werden


Konzepte wie die Just-in-time-Kompilierung und die Hotspot-Optimierung verwendet. In Bezug auf den
eigentlichen Ausfhrungsvorgang kann die JVM den Bytecode also interpretieren, ihn bei Bedarf jedoch auch
kompilieren und optimieren.
Nach dem TIOBE-Index ist Java nach C die zweitpopulrste Programmiersprache.
Programmiersprachenindex liegt Java gleichauf mit JavaScript auf Platz eins. [5]

[4]

Nach dem RedMonk-

Grundkonzepte

2/1/2015 4:35 PM

Java (Programmiersprache)

2 of 12

zim://A/Java_(Programmiersprache).html

Der Entwurf der Programmiersprache Java strebte hauptschlich fnf Ziele an:[6][7]
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 leistungsfhig 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 Operatorberladung und Mehrfachvererbung
nicht untersttzt.
Objektorientierung
Java gehrt zu den objektorientierten Programmiersprachen.
Verteilt
Javas Klassenbibliothek bietet eine Reihe einfacher Mglichkeiten fr Netzwerkkommunikation, von
TCP/IP-Protokollen ber Remote Method Invocation bis zu Webservices.
Vertrautheit
Wegen der syntaktischen Nhe zu C++, der ursprnglichen hnlichkeit der Klassenbibliothek zu
Smalltalk-Klassenbibliotheken und der Verwendung von Entwurfsmustern in der Klassenbibliothek zeigt
Java fr 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
Dafr stehen Konzepte wie der Class-Loader, der die sichere Zufhrung von Klasseninformationen zur
Java Virtual Machine steuert, und Security-Manager, die sicherstellen, dass nur Zugriff auf
Programmobjekte erlaubt wird, fr die entsprechende Rechte vorhanden sind.
Architekturneutralitt
Java wurde so entwickelt, dass dieselbe Version eines Programms prinzipiell auf einer beliebigen
Computerhardware luft, unabhngig von ihrem Prozessor oder anderen Hardwarebestandteilen.
Portabilitt
Zustzlich zur Architekturneutralitt ist Java portabel. Das heit, dass primitive Datentypen sowohl in
ihrer Gre und internen Darstellung als auch in ihrem arithmetischen Verhalten standardisiert sind.
Beispielsweise ist ein float immer ein IEEE 754 Float von 32 Bit. Dasselbe gilt fr die
Klassenbibliothek, die beispielsweise unabhngig vom Betriebssystem dasselbe GUI erzeugen kann.
Leistungsfhigkeit
Java hat aufgrund der Optimierungsmglichkeit zur Laufzeit das Potential, eine bessere Performance als
auf Kompilezeit-Optimierungen begrenzte Sprachen (C++, etc) zu erreichen. Dem entgegen steht der

2/1/2015 4:35 PM

Java (Programmiersprache)

3 of 12

zim://A/Java_(Programmiersprache).html

Overhead durch die Java-Laufzeitumgebung, sodass die Leistungsfhigkeit von beispielsweise


C++-Programmen in einigen Kontexten bertroffen,[8][9] in anderen aber nicht erreicht wird.[10]
Interpretierbarkeit
Java wird in maschinenunabhngigen Bytecode kompiliert, dieser wiederum kann auf der Zielplattform
interpretiert werden. Die Java Virtual Machine der Firma Oracle (frher Sun) interpretiert Java-Bytecode,
bevor sie ihn aus Performancegrnden kompiliert und optimiert.
Parallelisierbarkeit
Java untersttzt Multithreading, also den parallelen Ablauf von eigenstndigen Programmabschnitten.
Dazu bietet die Sprache selbst die Schlsselwrter synchronized und volatile Konstrukte, die das
Monitor & Condition Variable Paradigma von C. A. R. Hoare[11] untersttzen. Die Klassenbibliothek
enthlt weitere Untersttzungen fr 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 lsst. Da die
Module erst zur Laufzeit gelinkt werden, knnen beispielsweise Teile der Software (etwa Bibliotheken)
neu ausgeliefert werden, ohne die restlichen Programmteile anpassen zu mssen. Interfaces knnen als
Basis fr die Kommunikation zwischen zwei Modulen eingesetzt werden; die eigentliche
Implementierung kann aber dynamisch und beispielsweise auch whrend der Laufzeit gendert werden.

Objektorientierung
Die Grundidee der objektorientierten Programmierung ist, Daten und zugehrige Funktionen mglichst eng in
einem sogenannten Objekt zusammenzufassen und nach auen hin zu kapseln (Abstraktion). Die Absicht
dahinter ist, groe Softwareprojekte einfacher zu verwalten und die Qualitt der Software zu erhhen. Ein
weiteres Ziel der Objektorientierung ist ein hoher Grad der Wiederverwendbarkeit von Softwaremodulen.
Ein neuer Aspekt von Java gegenber den objektorientierten Programmiersprachen C++ und Smalltalk ist die
explizite Unterscheidung zwischen Schnittstellen und Klassen, die durch entsprechende Schlsselwrter
interface und class ausgedrckt wird. Java untersttzt kein Erben von mehreren unabhngigen Basisklassen
(sogenannte Mehrfachvererbung wie in C++ oder Eiffel), wohl aber das Implementieren einer beliebigen Zahl
von Schnittstellen, womit sich viele der entsprechenden Probleme ebenfalls lsen lassen. Dabei werden nur die
Methodensignaturen an die abgeleiteten Klassen weitergegeben, jedoch keine Attribute und keine
Implementierungen der Methoden.
Java ist nicht vollstndig 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 fr den Programmierer
transparent mittels Autoboxing in die entsprechenden Objekttypen und umgekehrt umgewandelt. [12]

Reflection
Java bietet eine Reflection-API als Bestandteil der Laufzeitumgebung. Damit ist es mglich, zur Laufzeit auf
Klassen und Methoden zuzugreifen, deren Existenz oder genaue Ausprgung zur Zeit der Programmerstellung
nicht bekannt war. Hufig wird diese Technik im Zusammenhang mit dem Entwurfsmuster Fabrikmethode
(Factory Method) angewandt.

2/1/2015 4:35 PM

Java (Programmiersprache)

4 of 12

zim://A/Java_(Programmiersprache).html

Annotationen
Mit Java 5 hat Sun die Programmiersprache um Annotationen erweitert. Annotationen erlauben die Notation
von Metadaten und ermglichen 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 fr wiederkehrende Muster anhand mglichst kurzer Hinweise im
Quelltext. Bislang wurden in Java dafr ausschlielich Javadoc-Kommentare mit speziellen JavaDoc-Tags
verwendet, die von Doclets wie zum Beispiel dem XDoclet ausgewertet wurden.
Annotationen knnen auch in den kompilierten Class-Dateien enthalten sein. Der Quelltext wird also fr ihre
Verwendung nicht bentigt. Insbesondere sind die Annotationen auch ber die Reflection-API zugnglich. So
knnen sie zum Beispiel zur Erweiterung des Bean-Konzeptes verwendet werden.

Modulare Ausfhrung auf fernen Computern


Java bietet die Mglichkeit, Klassen zu schreiben, die in unterschiedlichen Ausfhrungsumgebungen ablaufen.
Beispielsweise lassen sich Applets in Webbrowsern, die Java untersttzen, ausfhren. Das Sicherheitskonzept
von Java kann dazu eingesetzt werden, dass unbekannte Klassen dabei keinen Schaden anrichten knnen, was
vor allem bei Applets wichtig ist (siehe auch Sandbox). Beispiele fr in entsprechenden
Ausfhrungsumgebungen ausfhrbare Java-Module sind Applets, Servlets, Portlets, Midlets, Xlets, Translets,
und Enterprise JavaBeans.

Merkmale
Der Objektzugriff in Java ist ber Referenzen implementiert, die den aus C oder C++
bekannten Zeigern hneln.[13] Die Sprachdefinition (Java Language Specification)
bezeichnet sie als Reference Values um deutlich zu machen, dass sie als Call by value
bergeben werden.[14] Aus Sicherheitsgrnden erlauben diese weder den Verweis auf
Methoden oder andere Referenzen, noch die tatschliche Speicheradresse zu erkennen oder
zu modifizieren. So genannte Zeigerarithmetik ist in Java somit ausgeschlossen. Per
Design kann so ein hufiger Typ von Fehlern, die in anderen Programmiersprachen
auftreten, von vornherein ausgeschlossen werden.
Zusammengehrige Klassen werden in Paketen (englisch packages) zusammengefasst.
Duke, das
Diese Pakete ermglichen die Einschrnkung der Sichtbarkeit von Klassen, eine
Java-Maskottchen
Strukturierung von greren Projekten sowie eine Trennung des Namensraums fr
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 mssen nur innerhalb eines Paketes eindeutig sein. Hierdurch ist es
mglich, 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 fr Klassen des eigenen Paketes sichtbar oder fr alle Pakete.
Weiter untersttzt die Sprache Threads (nebenlufig ablaufende Programmteile) und Ausnahmen (englisch
exception). Java beinhaltet auch eine automatische Speicherbereinigung (englisch garbage collector), die nicht
(mehr) referenzierte Objekte aus dem Speicher entfernt.

2/1/2015 4:35 PM

Java (Programmiersprache)

5 of 12

zim://A/Java_(Programmiersprache).html

Java unterscheidet explizit zwischen Schnittstellen und Klassen. Eine Klasse kann beliebig viele Schnittstellen
implementieren, hat aber stets genau eine Basisklasse. Java untersttzt kein direktes Erben von mehreren
Klassen (Mehrfachvererbung), jedoch die Vererbung ber mehrere Hierarchie-Ebenen (Klasse Kind erbt von
Klasse Vater, die ihrerseits von Klasse Grovater 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 gehrt eine umfangreiche Klassenbibliothek. Dem Programmierer wird damit eine einheitliche, vom
zugrundeliegenden Betriebssystem unabhngige Schnittstelle (Application programming interface, API)
angeboten.
Mit Java 1.2 wurden die Java Foundation Classes (JFC) eingefhrt, die unter anderem Swing bereitstellen, das
zur Erzeugung plattformunabhngiger 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.

public class HalloWelt {


public static void main(String[] args) {
System.out.println("Hallo Welt!");
}
}

Entstehung und Weiterentwicklung


Entstehung
Herkunft und Entwicklung der Programmiersprache Java sowie mit ihr verwandter Technik sind im Artikel Java
(Technik) beschrieben.

Sun und JCP


Neben Sun kmmert sich eine Vielzahl von Einzelpersonen, kleiner und groer 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


2/1/2015 4:35 PM

Java (Programmiersprache)

6 of 12

zim://A/Java_(Programmiersprache).html

Sun hat zugesichert, sein JDK unter der GNU General Public License zu verffentlichen. Am 13. November
2006 wurden bereits mit dem Compiler javac und der Hotspot Virtual Machine erste Teile als Open Source
verffentlicht. Zudem wurde mit OpenJDK eine Community-Seite erffnet, mit deren Hilfe die Entwicklung
koordiniert werden soll.[15] Am 8. Mai 2007 folgten dann groe Teile des Java-SE-Quellcodes zum Erstellen
eines JDK. Eine Ausnahme stellt solcher Code dar, fr den Sun nicht die ntigen Rechte besitzt, um ihn
freizugeben. Dieser liegt somit nur in kompilierter Form vor.[16] Ebenfalls kndigte Sun an, dass Entwicklungen
auf Grundlage des OpenJDK das Java Compatible-Logo fhren drfen, wenn sie nach dem Technical
Compatibility Kit (JCK) zertifiziert sind.
Zuvor wurde der Quelltext von Java unter anderem bei jedem JDK mitgeliefert und ermglichte so zwar
Einsicht, er durfte aber nicht beliebig modifiziert werden. Deswegen gibt es neben den offiziellen JCP auch
diverse unabhngige Vereinigungen, die es sich zum Ziel gesetzt haben, ein unter eine freie Open-SourceLizenz gestelltes Java bereitzustellen. Die bekanntesten dieser Projekte sind Apache Harmony, Kaffe und das
GNU-Classpath-Projekt.

Unterschiede zu hnlichen Sprachen


Darber hinaus bietet Java die Mglichkeit aus Java-Code heraus verschiedene Skriptsprachen auszufhren.
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 Untersttzung fr dynamische Fremdsprachen durch die Virtual Machine
verbessert.[18]

JavaScript
Java darf nicht mit der Skriptsprache JavaScript verwechselt werden. JavaScript wurde von Netscape
Communications entwickelt, hie frher LiveScript und wurde im Zuge einer Kooperation zwischen Netscape
und Sun Microsystems in JavaScript umbenannt.[19]
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 strker von JavaScript als zum Beispiel von
C++ oder C#. JavaScript wird vornehmlich in HTML-Seiten zur eingebetteten Programmierung verwendet, um
interaktive Webapplikationen zu ermglichen.

Smalltalk
Smalltalk ist eine der ltesten objektorientierten Programmiersprachen berhaupt. Java erbt von Smalltalk die
grundstzliche Konzeption eines Klassenbaumes, in den alle Klassen eingehngt werden. Dabei stammen alle
Klassen entweder direkt oder indirekt von der Klasse java.lang.Object ab. Auerdem 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. [12]

2/1/2015 4:35 PM

Java (Programmiersprache)

7 of 12

zim://A/Java_(Programmiersprache).html

C++
Java lehnt seine Syntax an die der Programmiersprache C++ an. Im Gegensatz zu C++ fanden jedoch komplexe
Konstrukte wie Mehrfachvererbung oder die fehleranfllige Zeigerarithmetik keinen Einzug. Klassen knnen
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 mglichen abstrakten Klassen verwendet. Die interne
Speicherverwaltung wird dem Java-Entwickler weitgehend abgenommen; dies erledigt die automatische
Speicherbereinigung. Deshalb ist Java in vielen Fllen leichter zu handhaben als C++. Allerdings garantiert
auch dieser Mechanismus nicht den vollstndigen Ausschluss von Speicherlecks. Letztlich muss der
Programmierer dafr 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 zustzlich eine Methode namens
finalize, die vom GC aufgerufen werden kann, um zustzliche Aufrumarbeiten durchzufhren. 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 mglich, Operatoren (zum Beispiel arithmetische Operatoren wie +
und -, logische Operatoren wie && und ||, oder den Index-Operator []) zu berladen, das heit in einem
bestimmten Kontext mit neuer Bedeutung zu versehen. Dies sorgt einerseits fr eine Vereinfachung der Sprache
an sich und verhindert, dass Quellcodes mit Operatoren, die mit schwer nachvollziehbarer Semantik berladen
werden, unleserlich gemacht werden. Andererseits wrden benutzerdefinierte Typen mit berladenen
Operatoren in C++ eher wie eingebaute Typen erscheinen knnen vor allem numerischer Code wre so
mitunter einfacher nachzuvollziehen. Die Sprachdefinition von Java definiert jedoch typabhngiges Verhalten
der Operatoren + (Addition bei arithmetischen Operanden, andernfalls zur Verkettung von Zeichenketten string
concatenation) sowie &, | und ^ (logisch fr boolean und bitweise fr arithmetische Operanden). Das lsst
diese Operatoren zumindest wie teilweise berladene Operatoren erscheinen.
Das C++-Konstrukt der Templates, die es erlauben, Algorithmen oder sogar ganze Klassen unabhngig von
den darin verwendeten Datentypen zu definieren, wurde in Java nicht bernommen. Seit Version 1.5 untersttzt
Java aber sogenannte Generics, die zwar keinerlei Metaprogrammierung erlauben, aber hnlich wie
C++-Templates typsichere Container und hnliches ermglichen.
In Java wurde das Schlsselwort const reserviert, hat aber keine Funktion. Die Alternative zu const (und
Prprozessor-Direktiven) ist final. Im Gegensatz zu const wird final in einer Methodensignatur nicht vererbt
und hat somit nur im aktuellen Scope Gltigkeit. 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 unberschreibbar wird) besitzen.

C# (.NET)
Die .NET-Plattform von Microsoft kann als Konkurrenzprodukt zu Java gesehen werden. Mit der Spezifikation
von C# hat Microsoft im Rahmen seiner .NET-Strategie versucht, den Spagat zwischen der Schaffung einer
neuen Sprache und der leichten Integration bestehender Komponenten zu schaffen.

2/1/2015 4:35 PM

Java (Programmiersprache)

8 of 12

zim://A/Java_(Programmiersprache).html

Konzeptionelle Unterschiede zu Java bestehen insbesondere in der Umsetzung von Callback-Mechanismen. In


.NET ist hierzu die Untersttzung von Delegaten (englisch delegates) implementiert, einem Konzept, das mit
Funktionszeigern vergleichbar ist. In Java kommt hingegen meist das Beobachter-Entwurfsmuster zum Einsatz.
Des Weiteren untersttzen .NET-Sprachen sogenannte Attribute (attributes), die es erlauben, die Funktionalitt
der Sprache ber Metadaten im Code zu erweitern (eine hnliche Funktionalitt wurde in Form der oben
beschriebenen Annotations in Java 5.0 bernommen). C# enthlt auch Bestandteile der Sprachen VisualBasic,
zum Beispiel Eigenschaften (properties), sowie Konzepte aus C++.
In .NET ist es ebenso wie in Java mglich, Ausnahmen (exceptions) zu einer Methode zu deklarieren. In Java
knnen Ausnahmen so deklariert werden, dass sie auch verarbeitet werden mssen (checked exception).
Systembefehle knnen in .NET ber platform invoke aufgerufen werden. Das ist in Java nicht mglich, es
besteht mit der Java Native Interface aber die Mglichkeit, C- und C++-Code in Javapakete einzubetten und
auerhalb der Java Virtual Machine laufen zu lassen.
Programmteile, welche den Zugriff auf Speicheradressen unter Einsatz von Pointern voraussetzen, knnen in
C#, nicht aber in anderen .NET-Sprachen wie VisualBasic, in unsafe code geschrieben werden. [20] Java kennt
aus Sicherheits-, Stabilitts- und Plattformunabhngigkeitsgrnden keine Mglichkeit zur direkten Einbindung
von unsicherem oder Inline-Code.

Scala
Scala ist eine Programmiersprache, die objektorientierte und funktionale Paradigmen vereint und wie Java auf
der Java Virtual Machine ausgefhrt werden kann.
Im Gegensatz zu Java, und hnlich wie C#, ist das Typsystem vereinheitlicht und umfasst Referenz- und
Werttypen. Benutzer knnen weitere Typen definieren - in Java sind die verfgbaren Werttypen auf die fest
vordefinierten primitiven Typen (int, long, ...) beschrnkt.
Scala verwendet statt Schnittstellen (interface) sogenannte Traits (traits), die wiederverwendbare
Methodenimplementierungen enthalten knnen. Weitere Funktionalitt, die nicht in Java enthalten ist, umfasst
unter anderem Typen und Funktionen hherer Ordnung, Pattern Matching und frei whlbare Methoden- und
Klassennamen.
Wie in C# gibt es keine checked exceptions. Allerdings knnen Methoden mit einer @throws-Annotation
versehen werden. Scala entfernt unter anderem das Konzept statischer Methoden und Klassen (ersetzt durch
companion objects), Raw Types, die Notwendigkeit von Getter- und Settermethoden und die unsichere Varianz
von Arrays.
Die Varianz generischer Typen muss nicht wie in Java bei der Nutzung erfolgen (use-site variance), sondern
kann direkt bei der Deklaration angegeben werden (declaration-site variance).

Anwendungsarten
Mit Java knnen zahlreiche verschiedene Arten von Anwendungen erstellt werden.

Java-Webanwendungen

2/1/2015 4:35 PM

Java (Programmiersprache)

9 of 12

zim://A/Java_(Programmiersprache).html

Java Webanwendungen sind Java-Programme, die auf einem Webserver geladen und gestartet werden und beim
Benutzer in einem Webbrowser ablaufen bzw. dargestellt werden. blicherweise luft ein Teil der
Webanwendung auf dem Server (die Geschftslogik und Persistenz) und ein anderer Teil am Webbrowser (die
Logik der Grafischen Benutzeroberflche). Der Serverteil wird blicherweise vollstndig in Java geschrieben,
der Browserteil blicherweise in HTML und JavaScript. Es ist jedoch auch mglich, Java-Webanwendungen
inklusive GUI-Logik vollstndig in Java zu schreiben (siehe z. B. Google Web Toolkit oder die Remote
Application Platform). Bekannte Beispiele fr Java-Webanwendungen sind Twitter [21], Jira, Jenkins oder Gmail
(das nicht vollstndig, aber zu groen Teilen in Java geschrieben ist).

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

Java-Applets
Java-Applets sind Java-Anwendungen, die normalerweise in einem Webbrowser ausgefhrt werden. Sie sind
blicherweise auf einen durch ein spezielles HTML-Tag definierten Bereich einer Webseite beschrnkt.
Voraussetzung fr die Ausfhrung von Java-Applets ist ein Java-fhiger Browser.

Apps
Apps sind kleinere Applikationen fr mobile Gerte wie Handys, Smartphones, PDAs oder Tablets. Sie laufen
blicherweise auf speziellen, fr die Ausfhrung von Java-Anwendungen auf mobilen Gerten optimierten
Java-Plattformen wie Java ME oder Android.

Entwicklungsumgebungen
Es gibt eine groe Vielfalt von Entwicklungsumgebungen fr Java, sowohl proprietre als auch freie (Open
Source). Die meisten Entwicklungsumgebungen fr 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. Auerdem 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) heit.
Apple liefert mit Mac OS X ab Version 10.3 die Entwicklungsumgebung Xcode aus, die verschiedene
Programmiersprachen untersttzt und einen Schwerpunkt auf Java setzt.
Wer lieber einen Texteditor verwendet, findet in Emacs zusammen mit der JDEE (Java Development
Environment for Emacs) ein mchtiges Werkzeug. Ein vielseitiger und erweiterbarer in Java geschriebener
Editor ist jEdit. Fr andere Editoren wie Vim, Jed oder TextPad gibt es ebenfalls entsprechende Modi.

2/1/2015 4:35 PM

Java (Programmiersprache)

10 of 12

zim://A/Java_(Programmiersprache).html

Fr 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 ausfhrbaren Code. Grundstzlich
unterscheidet man zwischen Bytecode- und Nativecode-Compilern. Einige Java-Laufzeitumgebungen
verwenden einen JIT-Compiler, um zur Laufzeit den Bytecode hufig genutzter Programmteile in nativen
Maschinencode zu bersetzen.

Bytecode-Compiler
Im Normalfall bersetzt der Java-Compiler die Programme in einen nicht direkt ausfhrbaren Bytecode
(Dateiendung .class), den die Java Runtime Environment (JRE) spter ausfhrt. Die aktuelle HotSpotTechnologie kompiliert den Bytecode zur Laufzeit in nativen Prozessorcode und optimiert diesen abhngig 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 fhrt diese Technik, die ein
Nachfolger der Just-In-Time-Compilierung ist, dazu, dass Java-Bytecode theoretisch genau so schnell wie
native, kompilierte Programme ausgefhrt werden knnte.
Die HotSpot-Technik ist seit der JRE Version 1.3 verfgbar und wurde seitdem stetig weiter verbessert.
Beispiele fr Bytecode-Compiler sind javac (Teil des JDK) und Jikes von IBM.

Native Compiler
Es existieren auch Compiler fr Java, die Java-Quelltexte oder Java-Bytecode in normalen Maschinencode
bersetzen knnen, sogenannte Ahead-of-time-Compiler. Nativ kompilierte Programme haben den Vorteil,
keine JavaVM mehr zu bentigen, aber auch den Nachteil, nicht mehr plattformunabhngig zu sein.
Beispiele fr native Java Compiler sind Excelsior JET sowie GNU Compiler for Java (GCJ) wie MinGW,
Cygwin oder JavaNativeCompiler (JNC).

Wrapper
Hauptartikel: Wrapper (Software)
Als weitere Mglichkeit kann das Java-Programm in ein anderes Programm eingepackt (englisch to wrap)
werden; diese uere Hlle dient dann als Ersatz fr ein Java-Archiv. Sie sucht selbstndig nach einer
installierten Java-Laufzeitumgebung, um das eigentliche Programm zu starten, und informiert den Benutzer
darber, wo er eine Laufzeitumgebung herunterladen kann, sofern noch keine installiert ist. Es ist also immer
noch eine Laufzeitumgebung ntig, um das Programm starten zu knnen, aber der Anwender erhlt eine
verstndliche Fehlermeldung, die ihm weiterhilft.
Java Web Start ist ein etwas eleganterer und standardisierter Ansatz fr diese Lsung er ermglicht die
einfache Aktivierung von Anwendungen mit einem einzigen Mausklick und garantiert, dass immer die neueste
Version der Anwendung ausgefhrt wird. Dadurch werden komplizierte Installations- oder
Aktualisierungsprozeduren automatisiert.

2/1/2015 4:35 PM

Java (Programmiersprache)

11 of 12

zim://A/Java_(Programmiersprache).html

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

Literatur
Boris Gedat: Java Sprache & Programmierung. Open Source Press, 2013, ISBN 978-3-95539-052-5.
Christian Ullenboom: Java ist auch eine Insel. 10. Auflage. Galileo Computing, 2012, ISBN
978-3-8362-1506-0.
Christian Ullenboom: Java 7 Mehr als eine Insel. Galileo Computing, 2012, ISBN 978-3-8362-1507-7.
Florian Siebler: Einfhrung in Java mit BlueJ. Galileo Computing, 2011, ISBN 978-3-8362-1630-2.
Dirk Louis, Peter Mller: Java 7. Das Handbuch. Markt & Technik, Mnchen 2011, ISBN
978-3-8272-4353-9.
Joachim Goll: JAVA als erste Programmiersprache vom Einsteiger zum Profi. 6. Auflage, Dezember
2010. Teubner, ISBN 978-3-8348-0656-7.
Thorsten Leimbach et al.: Roberta Programmieren mit Java. Fraunhofer IRB, 2009, ISBN
978-3-8167-8045-8
Guido Krger, Heiko Hansen: Java-Programmierung. Das Handbuch zu Java 8. 8. Auflage. O'Reilly,
Kln 2014, ISBN 978-3-9556-1514-7.
Gottfried Wolmeringer: Java 6 lernen mit Eclipse. 2. Auflage. Galileo, Bonn 2007, ISBN 3-89842-872-9.
Hubert Partl: Programmieren mit Java. (PDF; 185 kB) Zentraler Informatikdienst, Universitt fr
Bodenkultur Wien, Wien 2007.
James Gosling, Bill Joy, Guy Steele, Gilad Bracha: The Java Language Specification 3. Auflage.
Addison-Wesley, Mnchen 2005, ISBN 0-321-24678-0. (docs.oracle.com Download/Online, mit SE 7
Edition)

Weblinks
Wikiversity: Java (Programmiersprache) Kursmaterialien, Forschungsprojekte und wissenschaftlicher
Austausch
Commons: Java (programming language) Sammlung von Bildern, Videos und Audiodateien
Java-Homepage bei Oracle (englisch)
Java-Download
java.net Java-community Projekte-Blogs etc. (englisch)
Programmierrichtlinien fr Java von Sun Microsystems/Oracle (englisch)
Kenndaten JDK 7 (englisch)
Java 7 API von Oracle (englisch)
Java 8 API von Oracle (englisch)
Java und Java FX Wiki & Codesammlung (deutsch)

Einzelnachweise
1. Jon Byous: Java Technology: The Early Years. Sun Microsystems, 2003, archiviert vom Original,
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
2/1/2015 4:35 PM

Java (Programmiersprache)

12 of 12

2.
3.
4.
5.
6.
7.
8.

9.

10.

11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.

zim://A/Java_(Programmiersprache).html

was official, and it was going to be incorporated into Netscape NavigatorTM, the worlds portal to the
Internet.
Release Notes der aktuellen Java-Version
Java-Downloadseite
Tiobe-Index
RedMonk Index
James Gosling, Henry McGilton: The Java Language Environment. 1.2 Design Goals of the Java
Programming Language. Mai 1996.
The Java Language: An Overview. 1995 Sun Whitepaper
Hajo Schulz: Daniel Dsentrieb, C#, Java, C++ und Delphi im Effizienztest. Teil 1. In: c't. Nr. 19,
Heise Zeitschriften Verlag, Hannover 2003, S. 204207 (heise.de, abgerufen am 21. Oktober 2010).
Hajo Schulz: Daniel Dsentrieb, C#, Java, C++ und Delphi im Effizienztest. Teil 2. In: c't. Nr. 21, Heise
Zeitschriften Verlag, Hannover 2003, S. 222227 (heise.de, abgerufen am 21. Oktober 2010).
J.P.Lewis, Ulrich Neumann: Java pulling ahead? Performance of Java versus C++. Computer Graphics
and Immersive Technology Lab, University of Southern California, 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 Javas relative performance is continuing to improve.
Robert Hundt: Loop Recognition in C++/Java/Go/Scala (englisch, PDF; 318 kB) Scala Days 2011.
27. April 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. (PDF) In: Communications of the
ACM. 17, Nr. 10, 1974, S. 549557.
12.0 12.1 Autoboxing in Java (englisch)
Scott Stanchfield: Java is Pass-by-Value, Dammit! JavaDude.com, abgerufen am 5. November 2010
(englisch).
Types, Values, and Variables. In: Java Language Specification. Sun Microsystems, abgerufen am
6. November 2010 (englisch).
Community-Seite zur Entwicklung des Open-Source-JDKs von Sun
Sun Microsystems Presseankndigung vom 8. Mai 2007 (englisch)
Roadmap JDK 7 (englisch)
JDK 7 Features JSR 292: VM support for non-Java languages (InvokeDynamic) (englisch)
Brendan Eich: JavaScript at Ten Years (MS PowerPoint; 576 kB), 2005, im Internet Archive.
MSDN: Unsicherer Code und Zeiger (C#-Programmierhandbuch), abgerufen am 10. Mrz 2014
Java Magazine Twitter

Normdaten (Sachbegriff): GND: 4401313-9


This article is issued from Wikipedia (http://de.wikipedia.org
/wiki/Java_(Programmiersprache)?oldid=136136576) - version of the Monday, November 24, 2014. The text
is available under the Creative Commons Attribution/Share Alike (http://creativecommons.org/licenses/by-sa
/3.0/) but additional terms may apply for the media files.

2/1/2015 4:35 PM