Zum Forum
Passwort vergessen?
Noch keinen Account?
lexikon
Hauptseite
Zufälliger Artikel
Diskussion
Diskussion : Java (Programmiersprache)
Links
Forum
Portale
Reisen
Versicherung
Inhaltsverzeichnis
Hauptmenü
Home
Editorial
Bildung
E-Learning
Fremdsprachen
Magazin
Wissen
Wörterbücher
Enzyklopädien
Expertendienste
Wissenswertes
Praktische Ratgeber
--------------------------
Biologie
Chemie
Computer
Film/ Theater
Geografie
Geschichte
Jura
Kunst
Literatur
Mathematik
Medizin
Musik
Philosophie
Physik/ Astronomie
Politik
Psychologie
Religionen
Sport
Umwelt
Wirtschaft
Reisen
Lexikon
Versicherung
Suchen
Schnellsuche
Suchmaschinen
Metasuchmaschinen
Webkataloge
News
Treffpunkt
Chat
Forum
Suche
Schnellsuche
Sitemap
Kontakt
Impressum
Java (Programmiersprache)
Stichpunkte
Allgemein
Java ist eine objektorientierte
plattformunabhängige Programmiersprache. Üblicherweise benötigen Java-Programme zur Ausführung eine spezielle Umgebung (Java Virtual Machine)
dass nur diese Umgebung an verschiedene Computer und Betriebssysteme angepasst werden muss
Der Vorteil ist
"Verbergen") 1 Geschichte 1.1 Versionen 2 Grundkonzepte der Sprache 2.1 Objektorientierung 2.2 Attributorientierung 2.3 Plattformunabhängigkeit 2.4 Modulare Ausführung auf fernen Computern 3 Merkmale der Sprache 4 Syntax 4.1 Grunddatentypen 4.2 Reservierte Wörter 5 Unterschiede zu ähnlichen Sprachen 5.1 JavaScript 5.2 C++ 5.3 C# 6 APIs 6.1 Core Java Technology 6.2 Desktop Java Technology 7 Entwicklungsumgebungen 8 Compiler 8.1 Bytecode-Compiler 8.2 Nativecode-Compiler 8.3 Wrapper 9 Literatur 10 Tutorien 11 Siehe 12 Weblinks [Bearbeiten]
Sobald dies geschehen ist laufen auf der Plattform alle Java-Programme ohne Anpassungsarbeiten. Inhaltsverzeichnis showTocToggle("Anzeigen"
Geschichte
Die Urversion von Java
Mike Sheridan und James Gosling
wurde in einem Zeitraum von 18 Monaten vom Frühjahr 1991 bis Sommer 1992 unter dem Projektnamen "The Green Project" von Patrick Naughton
sowie neun weiteren Entwicklern im Auftrag des US-amerikanischen Computerherstellers Sun Microsystems entwickelt
Bill Joy
auch Oak genannt
Einer der Urväter und Hauptentwickler der Sprache war dabei James Gosling. Überbleibsel aus dem Green-Projekt ist der "Duke" von Joe Palrang
der zum bekannten Symbol bzw
Maskottchen geworden ist
für unterschiedlichste Einsatzzwecke
Das ursprüngliche Ziel bei der Entwicklung von Java war aber nicht lediglich die Entwicklung einer weiteren Programmiersprache
inklusive virtueller CPU
sondern die Entwicklung einer vollständigen Betriebssystemumgebung
Die Entwicklung fand in einem unauffälligen Bürogebäude in der Sand Hill Road in Menlo Park statt
Während dieser abgeschiedenen Entwicklungsphase kam es zu keinem Austausch mit Sun Microsystems
handheld home-entertainment device controller with an animated touchscreen user interface"
Im Sommer 1992 schließlich war die erste Oak-basierte Anwendung fertiggestellt – "an interactive
Diese Technologiedemonstration einer Touchscreen-basierten Gerätesteuerung mit animierter Benutzeroberfläche (GUI) hatte den Namen *7 ("StarSeven")
Nach der Vorführung von StarSeven
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 die Firma "FirstPerson"
Aus dem Büro wurde ein Bürohaus in der 100 Hamilton Avenue in Palo Alto
Da die Belegschaft inzwischen von 13 Entwicklern auf 70 Mitarbeiter wuchs und die Zeit für interaktive digitale Mehrwertdienste im Bereich des Kabelfernsehens noch nicht reif war
suchte sich die junge Firma neue Betätigungsfelder
wurde ein um Java erweiterter Browser geschaffen – der "WebRunner" (nach dem Film "The Blade Runner")
James Gosling
Wayne Rosing und Eric Schmidt in "The Inn at Squaw Creek" bei Lake Tahoe war schnell klar: Das Internet war das neue Betätigungsfeld. Bild nicht gefunden HotJava 3.0 unter Mac OS 9.2.2 Auf Basis des Urvaters aller grafischen Webbrowser
Patrick Naughton
Mosaic
Nach einem dreitägigen Gruppentreffen von John Gage
Bill Joy
Später wurde aus "WebRunner" dann der offiziell bekannte HotJava-Browser
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
wurde Java dann erstmals offiziell der Öffentlichkeit vorgestellt
in der "San Jose Mercury News"
Mai 1995
dem Erfinder und Begründer von Netscape
Der Durchbruch für Java kam mit der Integration von Java in den Browser Netscape – besiegelt durch einen Handschlag zwischen Eric Schmidt und George Paolini von Sun Microsystems und Marc Andreessen
Ort und Zeit: 4 Uhr morgens in einem Hotelzimmer des Sheraton Palace Hotels in der Nähe des Convention Centers
Heutzutage wird Java hingegen hauptsächlich zur Entwicklung von Webanwendungen eingesetzt
wohingegen Java-Applets eine untergeordnete Rolle spielen
Der Name Oak hat seinen Ursprung in einer Eiche (engl
Oak)
die vor dem Fenster des Entwicklers James Gosling stand
Dieser Name musste jedoch aufgrund rechtlicher Probleme (es gab bereits eine Software dieses Namens) verworfen werden
die speziell für Espresso Verwendung findet (Java-Bohne) und von den Entwicklern bevorzugt getrunken wurde. [Bearbeiten]
Man entschied sich für den Namen Java nach dem Namen einer starken Kaffee-Sorte
Versionen
die in späteren Versionen schnell anwuchs: java.lang: elementare Klassen
Die 1996 erschienene Java-Version 1.0 enthielt noch eine überschaubare Menge von Standardpaketen
z
BO
bject und System java.io: Ein- und Ausgabe java.util: zB
die Syntax wurde um das Konzept der inneren Klassen erweitert
Datenstrukturen und eine Datumsklasse java.net: einfache TCP/IP-Klassen java.awt: grundlegende Klassen für grafische Benutzeroberflächen java.applet: eine Klasse für die bekannten Applets. Eine Spracherweiterung wurde 1997 mit Java 1.1 vorgenommen
Dies ging auch einher mit einem Umbau der Ereignisbehandlung hin zu einem Callback-System mit sogenannten Listenern
die Java-Beans das Dateiformat JAR für die Paketierung ganzer Bibliotheken oder Anwendungen als Java-Archive Klassen für numerisches Rechnen (BigInteger und BigDecimal) ein Protokoll für verteilte Programme
die Remote Method Invocation (RMI) Objektserialisierung für die persistente (d. h. dauerhafte) Speicherung von Objekten
z
Außerdem wurde die Standardbibliothek erweitert: Klassen für die Internationalisierung (so genannte "Ressourcenbündel") Java-Komponenten
B. in Dateien JDBC für den Zugriff auf relationale Datenbanken Sicherheitsfunktionen
z
B. zum Signieren von JAR-Dateien und Applets Java 2 (JDK 1.2) erschien im Jahr 1998
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 Runtime-Bibliothek benötigt.) Die Programme sind aber weiterhin lediglich "vorkompiliert"
die den Garbage-Collector nicht daran hindern
das referenzierte Objekt zu entfernen Im Jahr 1998 wurde auch der Java Community Process (JCP) eingeführt
also Datenstrukturen wie Listen
Die Geschwindigkeit vollständig kompilierter Programme wird nicht erreicht. Erneut wurde die Standardbibliothek erweitert: neue Schnittstellen und Implementierungen für Collections
Mengen und Maps die Oberflächen-Bibliothek Swing neue Grafik-Funktionen (die Java 2D-API) Drag and Drop-Funktionalität verbesserte Audio-Funktionen eine CORBA-Schnittstelle schwache Referenzen - das sind solche Referenzen
Diese Organisation steuert seitdem Änderungen an der Spezifikation von Java
der verschiedene Phasen durchläuft
die API wurde erneut erweitert
Für vorgeschlagene Änderungen wird ein Java Specification Request (JSR) erstellt
bevor die Änderungen in Java Einzug halten. (Homepage des Java Community Process (http://www.jcp.org)) 2000 erschien J2SE 1.3 als nächster Evolutionsschritt
Des weiteren wurde eine Engine mit Hotspot-Optimierung eingeführt
Das bedeutet
sondern nur häufig benutzte Stellen (Hotspots)
dass nicht mehr der gesamte Bytecode sofort kompiliert wird
so dass die häufig benutzten Stellen immer schneller ausgeführt werden
Codesegmente die sehr häufig ausgeführt werden
werden sogar weiter optimiert
was zuletzt bei Version 1.1. geschah
Erst 2002 wurde mit Erscheinen von J2SE 1.4 wieder die Sprache selbst erweitert
In dieser Version wurde eine Unterstützung für Assertions hinzugefügt
Auch die API wurde wieder erweitert
Blackdown Java 5.0 erschien am 30
Java Web Start
JavaDoc
J2ME
Java Server Pages
Siehe auch: Servlet
J2EE
September 2004 als Nachfolger der Version 1.4 – ursprünglich sollte die Version 1.5.0 lauten
In dieser Version gibt es umfangreiche Änderungen an der Sprache selbst sowie weitere API-Erweiterungen (Liste der Änderungen (http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html)): 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 für attributorientierte Programmierung Syntaktische Unterstützung für Aufzählungswerte ("Enumerations") Statischer Import von Klassen Erweiterte Look and Feels Hilfsklassen für nebenläufige Programmierung im neuen Paket java.util.concurrent Die für Java 1.5 (jetzt 5.0) geplante Erweiterung der Ein-/Ausgabefunktionen (JSR 203 (http://www.jcp.org/en/jsr/detail?id=203)) wurde auf Java 1.6 verschoben
Es sind Anzeichen dafür erkennbar
dass sich Java im Laufe der Zeit zu einer aspektorientierten Programmiersprache wandeln könnte
Dieses Ziel wird vor allem durch die Spracherweiterung AspectJ verfolgt. [Bearbeiten]
Grundkonzepte der Sprache
Der Entwurf der Sprache verfolgte vier Hauptziele: Objektorientierung Plattformunabhängigkeit (d. h
Unabhängigkeit vom Betriebssystem und von Hardware) Vernetzbarkeit Sichere Ausführung auf fernen Computern [Bearbeiten]
Objektorientierung
Die Sprache Java ist objektorientiert aufgebaut
Die Grundidee der objektorientierten Programmierung ist die softwaretechnische Abbildung in einer Art und Weise
wie wir Menschen auch Dinge der realen Welt erfahren
und sowohl die Qualität von Software zu erhöhen als auch Fehler zu minimieren
große Softwareprojekte einfacher verwalten zu können
Die Absicht dahinter ist
Ein weiteres Ziel der Objektorientierung ist ein hoher Grad der Wiederverwendbarkeit von Softwaremodulen
die keine Objekte sind (siehe auch Kapitel weiter unten)
boolean usw.)
in der Praxis jedoch stets Verwendung finden. [Bearbeiten]
gibt es einige wenige Grunddatentypen (int
Obwohl Java vollständige Objektorientierung unterstützt
Attributorientierung
Die Sprache Java ermöglicht auch Attributorientierte Programmierung
sondern speziellen Verarbeitungswerkzeugen ausgewertet werden
die nicht vom Compiler
Grundlage dafür sind Hinweise im Quelltext
die von Doclets wie z
Bislang wurden in Java dafür ausschließlich Javadoc-Kommentare mit speziellen JavaDoc-Tags verwendet
B. dem XDoclet ausgewertet wurden
Seit Java 5.0 existiert eine eigens dafür vorgesehene Syntax-Erweiterung namens Annotationen
Sinn der attributorientierten Programmierung ist die automatische Erzeugung von Code und anderen in der Software-Entwicklung wichtigen Dateien für wiederkehrende Muster anhand möglichst kurzer Hinweise im Quelltext. [Bearbeiten]
Plattformunabhängigkeit
Java wird als plattformunabhängige Programmiersprache bzw. plattformunabhängiges System bezeichnet
Linux
der Java-Plattform
dem so genannten Java Runtime Environment (JRE). Die Java Runtime Environment existiert für weit verbreitete Betriebssysteme wie Microsoft Windows
Die Plattformunabhängigkeit erreicht Java durch die Definition einer eigenen Plattform
Solaris
Mac OS X
die auf den gewünschten Zielsystemen meist durch eine so genannte Java Virtual Machine (kurz: Java VM oder JVM) implementiert wird
AIX und viele andere
wie Auto und TV
sowie Smartcards und andere technische Plattformen
Daneben gibt es eine JRE nicht nur für Server- und Desktopbetriebssysteme
sondern auch für viele Embedded Systeme wie Mobiltelefone
PDAs
Die Plattformunabhängigkeit endet jedoch für solche Systeme
für die keine Java Virtual Machine existiert
zumeist ältere oder sehr exotische Systeme
den Maschinencode der Java-Plattform
Java-Programme werden im Normalfall in einen nicht direkt ausführbaren Bytecode übersetzt
die Java-Quelltexte oder Java-Bytecode in normalen Maschinencode übersetzen können
sowie Prozessoren
Es gibt auch Compiler für Java
die Java-Bytecode als Maschinensprache verstehen und somit direkt ausführen können
der zur Laufzeit nativen Code für häufig benutzte Codeteile erzeugt
Zudem benutzen viele Virtuelle Maschinen einen JIT-Compiler
Damit kann die Ausführungsgeschwindigkeit unter Umständen stark gesteigert werden. [Bearbeiten]
Modulare Ausführung auf fernen Computern
Java bietet die Möglichkeit
Klassen zu schreiben
die in unbekannten Containern ablaufen
ausführen
die Java unterstützen
Beispielsweise lassen sich Applets in Webbrowsern
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)
Portlets
Translets
Midlets
Beispiele für Java Container-Module sind Applets
Servlets
Doclets und Enterprise JavaBeans. [Bearbeiten]
Merkmale der Sprache
dass die VM keinen ungültigen Bytecode ausführen kann. den Class-Loadern
das aus drei Schichten besteht: dem Code-Verifier
für die entsprechende Rechte vorhanden sind. Der Objektzugriff in Java ist über Referenzen genannte Zeiger implementiert
dass nur Zugriff auf Programmobjekte erlaubt wird
Wichtigstes Merkmal von Java ist sein Sicherheitskonzept
die sicher stellen
der sicherstellt
aus Sicherheitsgründen ist es deshalb nicht möglich
die die sichere Zuführung von Klasseninformationen zum Interpreter steuern. den Security-Managern
mit ihnen zu rechnen oder sie sogar zu modifizieren
So genannte Pointerarithmetik ist mit der Sprache also ausgeschlossen
Per Design können so häufig auftretende Fehler während des Entwicklungsprozesses von vorneherein ausgeschlossen werden
können die Klassen zu Paketen (englisch packages) zusammengefasst werden
Um große Projekte strukturieren zu können und saubere Schnittstellen zu Bibliotheken zu schaffen
Die Zugriffe auf Klassen und Methoden eines fremden Packages können – ähnlich wie innerhalb einer Klasse unter anderem durch private und public – geregelt werden
der nicht (mehr) referenzierte Objekte aus dem Speicher entfernt
Weiter unterstützt die Sprache Threads (gleichzeitig ablaufende Programmteile) und Ausnahmen (englisch exception) und Java beinhaltet auch einen Garbage-Collector
Bemerkenswert ist auch die explizite Unterscheidung von Schnittstellen und Klassen
hat aber stets genau eine Basisklasse
Eine Klasse kann beliebig viele Schnittstellen implementieren
Alle Klassen sind – direkt oder indirekt – von der Wurzelklasse Object abgeleitet
Zu Java gehört eine umfangreiche Klassenbibliothek
API) angeboten
Schnittstelle (Application programming interface
vom zugrunde liegenden Betriebssystem unabhängige
Dem Programmierer wird damit eine einheitliche
Mit Java 1.1 wurden die Java Foundation Classes (JFC) eingeführt
die u. a
bereitstellen. [Bearbeiten]
Swing
das zur Erzeugung plattformunabhängiger grafischer Benutzerschnittstellen (GUI) dient und auf AWT basiert
Syntax
Ein Beispielprogramm
das eine Meldung auf der Konsole ausgibt: public class HelloWorld { public static void main(String[] args) { System.out.println("Hallo Welt!"); } } Die Grammatik von Java ist in der Java Language Specification dokumentiert. [Bearbeiten]
Grunddatentypen
die keine Objekte sind
Grunddatentypen
sind in Java die einzigen Datenstrukturen
die auch als 'primitive' oder 'elementare' Datentypen bezeichnet werden
weil sie stets im Big Endian-Format gespeichert werden
Sie sind ebenfalls plattformunabhängig
Um dennoch auch primitive Datentypen als echte Objekte behandeln zu können
existiert für jeden einzelnen eine entsprechende Wrapperklasse. Datentyp Größe¹ Wrapper-Klasse Wertebereich Beschreibung boolean 8 bit java.lang.Boolean true / false Boolescher Wahrheitswert char 16 bit java.lang.Character 0 ..
65.535 (z
B. 'A') Unicode-Zeichen (UTF-16) byte 8 bit java.lang.Byte -128 ..
127 Zweierkomplement-Wert short 16 bit java.lang.Short -32.768 ..
32.767 Zweierkomplement-Wert int 32 bit java.lang.Integer -2.147.483.648 ..
2.147.483.647 Zweierkomplement-Wert long 64 bit java.lang.Long -9.223.372.036.854.775.808 ...9.223.372.036.854.775.807 Zweierkomplement-Wert float 32 bit java.lang.Float +/-1
4E+38 Gleitkommazahl (IEEE 754) double 64 bit java.lang.Double +/-4
9E-324 ... +/-1
7E+308 Gleitkommazahl doppelter Genauigkeit (IEEE 754) ¹: minimaler Speicherverbrauch [Bearbeiten]
4E-45 ... +/-3
Reservierte Wörter
const und goto sind zwar reserviert
also keine Schlüsselwörter im eigentlichen Sinn
aber ohne Funktion
false und null sind Literale
jedoch ebenfalls eigentlich keine Schlüsselwörter im engeren Sinn
Sie dienen lediglich dem Compiler zur Ausgabe sinnvoller Fehlermeldungen für Umsteiger von C++ oder C. true
dass dem betreffenden Member Implementierung fehlt
final
d.h. die Definition einer Methode derselben Signatur in einer Subklasse gilt nicht als Überschreiben. abstract
Mit assert werden Assertions realisiert. private
static sind Polymorphie-Modifizierer. static kann vor allen Membern außer Konstruktoren stehen und bedeutet
dass der betreffende Member im Kontext der Klasse verwendbar ist und kein Objekt benötigt. abstract kann vor Klassen und Methoden stehen und bedeutet
protected und public sind Zugriffsmodifizierer (access modifier): Die Klasse selbst Paket-Klassen/innere Klassen Unterklassen SonstigeKlassen private Ja Nein Nein Nein (ohne) Ja Ja Nein Nein protected Ja Ja Ja Nein public Ja Ja Ja Ja Private Methoden sind von der Polymorphie ausgenommen
dass der betreffende Member nicht mehr verändert werden darf
sich selbst als abstrakt zu deklarieren oder die fehlende Implementierung zu liefern. final kann vor allen Membern außer Konstruktoren stehen und bedeutet
Unterklassen sind gezwungen
Finale Variablen sind ähnlich wie Konstanten
finale Methoden dürfen von Subklassen nicht überschrieben werden und von finalen Klassen darf man erst gar keine Subklassen bilden
Zugriffe auf finale Variablen
deren Wert dem Compiler bekannt ist
dürfen vom Compiler durch den Wert der Variable ersetzt werden
Aufrufe finaler Methoden dürfen vom Compiler durch eingebundenen Code (Inlining) ersetzt werden
long
notwendig
char
um Methoden ohne Rückgabewerte zu kennzeichnen
short
int
sondern einer anderen Programmiersprache geschrieben wurde
und von der virtuellen Maschine über eine Laufzeitbibliothek gelinkt werden muss. strictfp kennzeichnet Klassen und Methoden
double und void sind Typen. void ist der Nichtstyp
Private Methoden sind automatisch final. native kann nur vor Methoden stehen und bedeutet
so dass sie ohne voll qualifizierten Namen verwendet werden können. boolean
deren enthaltene Fließkommaoperationen streng nach IEEE ablaufen müssen. package deklariert die Paket-Zugehörigkeit der nicht-geschachtelten Top-Level-Klassen einer Quelltextdatei. import importiert Symbole (vorher nur Typen
ab 5.0 auch statische Member von Klassen)
byte
dass die Implementierung der betreffenden Methode nicht in Java
float
throw
Für die primitiven Typen: siehe oben. class
catch
interface
engl. typesafe enumeration) und Annotations für Metadaten. enum und @interface sind mit Java 5.0 in die Sprache aufgenommen worden. try
finally
Interfaces (Schnittstellen für Klassen)
Enums (Aufzählungstyp für typsichere Aufzählung
throws beziehen sich auf die Ausnahmebehandlung (englisch exception handling)
enum (ab 5.0) und @interface (ab 5.0) dienen zur Deklaration eigener Typen: Klassen
Mit throw wird eine Ausnahme ausgelöst
müssen mit throws in der Deklaration der Methode (Signatur) angegeben werden
Alle eventuell ausgelösten Ausnahmen einer Methode
die nicht von RuntimeException oder Error abstammen
Es handelt sich also um so genannte checked exceptions
in dem eventuell eine Ausnahme auftreten könnte
Mit try umschließt man einen Block
mit finally hängt man an einen try- oder catch-Block einen Block für Aufräumarbeiten an (z
Mit catch fängt man nach einem try-Block die dort aufgetretene Ausnahme ab
BS
chließen von Dateien). extends und implements dienen der Vererbung: extends der genetischen Erweiterungsvererbung von Klasse zu Klasse oder Interface zu Interface und implements der Implementierungsvererbung von Interface zu KlasseA
ußerdem wird extends bei Generics für Typerweiterung verwendet. super und this beziehen sich im Objekt-Kontext auf das aktuelle Objekt in seinem tatsächlichen Morph (this) bzw. im Morph der Superklasse (super). this wird verwendet
um in Konstruktoren überladene Konstruktoren aufzurufen und um in Membern auf verdeckte Member äußerer Strukturen zu verweisen. super wird in Konstruktoren zum Aufruf des Superklassenkonstruktors und in überschreibenden Methoden zum Aufruf der überschriebenen Methode verwendetA
for
switch
break
while
ußerdem wird super bei Generics für Typeingrenzung verwendet. new reserviert Speicher für neue Objekte (inklusive Arrays) auf dem Heap. if
case
do
weil mehrere Threads sie gleichzeitig verwenden könnten (insbesondere im Kontext nativer Methoden). synchronized verwendet ein Objekt als Semaphor mit Lock-Pool und sorgt so dafür
dass jeglicher mit synchronized an denselben Semaphor gebundener Code nur ein einziges Mal gleichzeitig ausgeführt werden kannA
default
continue dienen der Bedingungsprüfung und Schleifensteuerung und bedienen sich einer imperativen Syntax. return liefert Werte aus einer Methode an die aufrufende Methode zurück. volatile ist ein Modifizierer für nicht-lokale Variablen und verbietet dem JIT-Compiler Registeroptimierungen auf diese Variable
else
lle anderen Threads
bis der Semaphor wieder frei istD
werden solange blockiert
die solche Code-Blöcke ausführen möchten
es weiteren dient es auch der Synchronisation eventuell vorhandener lokaler Caches bei Multiprozessormaschinen. transient kennzeichnet nicht-persistente Variablen
die nicht serialisiert werden dürfen. instanceof ist ein Java-Operator
der prüft
ob ein Objekt Instanz eines Typs oder Subtyps ist. [Bearbeiten]
Unterschiede zu ähnlichen Sprachen
[Bearbeiten]
JavaScript
die ebenfalls in Web-Browsern verwendet wird
Java ist nicht mit der reinen Skriptsprache JavaScript zu verwechseln
Sie hat eine ähnliche Syntax
kennt aber keine Vererbung
Objekte werden in JavaScript prototypenbasiert definiert
aber auch unabhängige Ausführungsumgebungen sind vorhanden. [Bearbeiten]
Es gibt Implementierungen vor allem in Web-Browsern
C++
Im Gegensatz zu C++ fanden komplexe Konstrukte
wie Mehrfachvererbung oder die fehleranfällige Zeigerarithmetik keinen Einzug
Auch die interne Speicherverwaltung wird dem Java-Entwickler in der Regel abgenommen: Dies erledigt der so genannte Garbage-Collector
Deshalb ist Java in vielen Fällen leichter zu handhaben als C++
Spätestens beim Einsatz von Java in Embedded Systems
z
B. über OSGi muss sich allerdings auch hier der Programmierer entsprechende Gedanken machen. [Bearbeiten]
C#
C# (gesprochen: "ßie-scharp") kann als Kampfansage von Microsoft an Sun Microsystems zu Java gesehen werden
im Rahmen seiner .NET-Strategie
hat Microsoft versucht
den Spagat zu schaffen zwischen dem kompletten Neuanfang einer Sprache und der leichten Integration bisher bestehender Komponenten
Mit der Spezifikation von C#
Die Syntax von C# entspricht in großen Teilen der Syntax von Java
ein Konzept
das am ehesten mit Funktionszeigern vergleichbar ist
hierbei kommt ein Beobachter-Entwurfsmuster zum Einsatz – Objekte können sich für Ereignisse registrieren bzw. diese delegieren
konzeptionelle Unterschiede bestehen insbesondere in der Unterstützung von Delegaten (engl. "delegates")
C# kennt ebenso wie Java eine Unterscheidung zwischen Werttypen (engl. "value types"; z
z
B. int
struct) und Referenztypen (engl. "reference types"
B. class)
allerdings sind auch die elementaren Datentypen objektbasiert
Des weiteren unterstützt C# so genannte Attribute ("attributes")
die Funktionalität der Sprache über Metadaten im Code zu erweitern (eine ähnliche Funktionalität gibt es seit Java 5.0)
die es erlauben
C# enthält auch Bestandteile der Sprachen VisualBasic (z
BE
igenschaften bzw. properties) sowie C++ (zB
. enums)U
auch so genannten unsicheren unmanaged code zu verwendenS
besteht in .NET die Möglichkeit
m auch systemnahe Programmierung zu ermöglichen
omit können API-Aufrufe des Systems ausgeführt werden
aber der Programmierer ist für die Ressourcenverwaltung verantwortlichA
ußerdem wird hierdurch die theoretische Plattformunabhängigkeit eingeschränkt bzw. unmöglichB
islang werden außer Microsoft-eigenen Betriebssystemen (ab Windows NT 4 SP 6) von Microsoft offiziell keine weiteren Betriebssysteme unterstütztD
ie Projekte Mono (von Ximian-Technik-Guru Miguel de Icaza) und DotGNU versuchen seit längerem weitere Plattformen zu erreichen
wobei das Mono-Projekt mittlerweile in den wichtigsten Teilbereichen eine Unterstützung bietet (zB
ASP.NET und die BCL). [Bearbeiten]
APIs
Java stellt eine Reihe von Programmierschnittstellen (APIs) zur Realisierung von Softwareprojekten bereit. Core Java Technology (http://java.sun.com/j2se/corejava/) Desktop Java Technology (http://java.sun.com/j2se/desktopjava/) [Bearbeiten]
Core Java Technology
Sicherheit Java Cryptography Extension (JCE) Java Authentication and Authorization Service (JAAS) Java Secure Socket Extension (JSSE) Datenbank-Technologie Java Database Connectivity (JDBC) Debugging-Technologie Java Platform Debugger Architecture (JPDA) Dokumentations-Technologie JavaDoc Andere Core J2SE-Technologien Internationalization Java Remote Method Invocation (RMI) Java Native Interface (JNI) Java Naming and Directory Interface (JNDI) Optionale Java-Packages und verwandte Technologie Java Management Extensions (JMX) JMX Remote Java Communications Java Telephony [Bearbeiten]
Desktop Java Technology
d.h. automatisierte Software-Verteilung und Installation Java Runtime Environment (JRE) Java Plug-in Java Web Start Komponenten Java Beans GUI Java Foundation Classes (JFC/Swing) Accessibility Java 2D Internationalization Sound Java Sound Optionale Java-Packages und verwandte Technologien Java Media Framework (JMF) Java 3D Java Advanced Imaging (JAI) Java Speech Java Help System Java Shared Data Toolkit (JSDT) [Bearbeiten]
Deployment
Entwicklungsumgebungen
sowohl kommerzielle als auch freie (Open Source)
Bild nicht gefunden Eclipse Java-Perspective Es gibt eine große Vielfalt von Entwicklungsumgebungen für Java
Die meisten Entwicklungsumgebungen für Java sind selbst ebenfalls in Java geschrieben
In Form von z
BO
die verschiedene Konzepte von Java unabhängig hiervon weiterentwickeln - Eclipse basiert beispielsweise auf OSGiD
SGi finden sich inzwischen auch eigenständige Entwicklungsframeworks
ie bekanntesten Open-Source-Umgebungen sind Eclipse
jEdit und NetBeansU
nter den kommerziellen Entwicklungsumgebungen sind das auf Netbeans basierende Sun ONE Studio (http://wwws.sun.com/software/sundev/jde/) von Sun
IntelliJ IDEA (http://www.jetbrains.com/idea/) von JetBrains (http://www.jetbrains.com/index.html) und JBuilder von Borland am verbreitetsten
sowie JCreator (http://www.jcreator.com/)A
ußerdem gibt es noch eine
die von IBM unter dem Namen WebSphere Studio Application Developer (http://www-306.ibm.com/software/awdtools/studioappdev/) ("WSAD") vertrieben wurde und seit Version 6.0 Rational Application Developer (http://www-306.ibm.com/software/awdtools/developer/application/index.html) ("RAD") heißt. Wer lieber einen Texteditor verwendet findet in Emacs zusammen mit der JDEE (http://jdee.sunsite.dk/) (Java Development Environment for Emacs) ein mächtiges WerkzeugF
um einige hundert Plugins erweiterte
Version von Eclipse
ür andere Editoren wie Vim oder Jed (http://www.jedsoft.org/jed/) gibt es ebenfalls entsprechende ModesS
Jogl [Bearbeiten]
iehe auch: Cocoon
Compiler
Mit einem Java-Compiler ist es möglich Java-Sourcecode (*.java Dateiendung) in einen ausführbaren Code zu kompilieren
Grundsätzlich unterscheidet man zwischen Bytecode- und Nativecode-Compilern
Des weiteren verwenden einige Java-Laufzeitumgebungen einen JIT-Compiler um Bytecode häufig genutzter Programmteile in nativen Maschinencode zu übersetzten während das Programm läuft. [Bearbeiten]
Bytecode-Compiler
Java-Programme werden im Normalfall in einen nicht direkt ausführbaren Bytecode (Dateiendung .class) übersetzt
den Maschinencode der Java Plattform der mit der Java Runtime Environment (JRE) interpretiert wird. Javac (http://java.sun.com/j2se/1.5.0/download.jsp) ist der wohl bekannteste Bytecode-Compiler von der Firma Sun Microsystems
Er ist ein Bestandteil des JDK. Jikes (http://www-124.ibm.com/developerworks/opensource/jikes/) ist die schnellere Alternative von IBM
Ein weiterer wichtiger Vorteil ist
dass Jikes Open Source ist. [Bearbeiten]
Nativecode-Compiler
sogenannte Ahead-Of-Time-Compiler
Es existieren auch Compiler für Java
die Java Quelltexte oder Java Bytecode in normalen Maschinencode übersetzen können
Nativ kompilierte Programme haben den Vorteil keine JavaVM mehr zu benötigen aber auch den Nachteil nicht mehr plattformunabhängig zu sein
run anywhere" nicht mehr zu. GCJ (http://gcc.gnu.org/java) (GNU Compiler for the Java Programming Language) ist ein Teil der GNU Compiler Collection
Hier trifft die Bezeichnung "write once
GCJ ist sowohl ein Bytecode-Compiler als auch ein Nativecode-Compiler
Er kann Java-Sourcecode zu Java-Bytecode und Java-Byte/Sourcecode zu nativen Maschinencode kompilieren
GCJ benutzt dabei nicht die Klassenbibliotheken von Sun sondern die freie Java-Implentierungen von GNU Classpath
Aufgrund dessen kann es bei manchen Java Programmen zu Problemen kommen weil noch nicht alle Klassen von Sun implementiert sind. MinGW (Minimalist GNU for Windows) ist eine Softwareportierung der GNU-Entwicklerwerkzeuge (GCC
GDB) auf die Windows-Plattform mit der man u. a
Java Programme (*.exe Dateiendung) für Windows erzeugen kann. Cygwin ist auch eine Softwareportierung der GNU-Entwicklerwerkzeuge (GCC
die unter Windows bestimmte Funktionen einer UNIX-Umgebung bereitstellt. Excelsior JET (http://www.excelsior-usa.com/jet.html) ist ein kommerzieller Java to Nativecode Compiler
GDB)
Voraussetzung für die Kompilierung ist eine installierte JDK in der Version 1.3/1.4
JET 3 unterstützt alle Java 2 SE-Pakete inklusive AWT/Swing
JNI und Invocation-API. [Bearbeiten]
Wrapper
Ein Wrapper ist ein ausführbares Programm
welches als Ersatz für eine jar Datei dient
wo er eine JavaVM herunterladen kann
Er sucht selbständig nach einer installierten JavaVM
falls noch keine installiert ist
um das Programm zu starten und informiert den Benutzer darüber
Es ist also immer noch eine Laufzeitumgebung nötig
um das Programm starten zu können. JSmooth (http://jsmooth.sourceforge.net/) ist ein freier unter der GPL-Lizenz stehender Wrapper. [Bearbeiten]
Literatur
Gilad Bracha: The Java Language Specification
James Gosling
Guy Steele
Bill Joy
Second Edition. David Flanagan: Java in a Nutshell (Deutsche Ausgabe)
O'Reilly
ISBN 3-89721-332-X Guido Krüger: Handbuch der Java-Programmierung
2002
2002
Addison-Wesley
ISBN 3-8273-1949-8 (Freier Download (http://www.javabuch.de/)) Christian Ullenboom (http://www.java-tutor.com/): Java ist auch eine Insel
ISBN 3-89842-365-4 (Online-Buch (http://www.galileocomputing.de/openbook/javainsel4/)) Friedrich Esser: Java 2 – Designmuster und Zertifizierungswissen
mitp
ISBN 0-1310-0287-2 (Online-Buch (http://www.mindview.net/Books/TIJ/)
ISBN PDF-3-8272-6242-9
ISBN 3-519-00506-9 [Bearbeiten]
ISBN 0201310058 Dietrich Boles
2004
2000
ISBN 3-8266-0574-8 Ralph Steyer (http://www.softwareacademy.de/content/unternehmen/mitarbeiter/m4.php): Java 2 - MAGNUM
2001
2002
2004
Addison-Wesley
Teubner
Cornelia Boles: Objektorientierte Programmierung spielend gelernt mit dem Java-Hamster-Modell
Markt und Technik
Englisch) Hans-Georg Schumann: Java für Kids
Prentice-Hall
Galileo Computing
2001
(Online-Buch (http://www.softwareacademy.de/JAVA/Java%20Magnum.htm)) Java 2 Magnum Inhalt Joshua Bloch: Effective Java Programming Language
2001
ISBN 3-9343-5866-7 (Online-Buch (http://www.galileocomputing.de/openbook/java2/)) Boris Schäling: Programmieren in Java (Online-Buch (http://www.highscore.de/)) Bruce Eckel: Thinking in Java
Galileo Computing
Tutorien
Struts Tiles
einsteigerfreundliche Einführung in Java Das Java Tutorial von Sun The Java Tutorial (http://java.sun.com/docs/books/tutorial/) (engl.) LaLiLuna Tutorials Anleitungen zu Struts Webframework
EJB (Enterprise Java Beans) (http://www.laliluna.de) (deutsch/englisch) [Bearbeiten]
Bradley Kjells interaktives Java Tutorial (http://gailer-net.de/tutorials/java/java-toc.html) (dt./engl.)
Java Server Faces
JSP und Servlets
Hibernate
Siehe
Programmiersprachen
die sich an Java anlehnen und Bytecode generieren: Groovy Nice [Bearbeiten]
Weblinks
beachte aber die Java-Falle (http://www.gnu.org/philosophy/java-trap.html) Javali (http://www.iti.br/twiki/bin/view/Main/PressRelease2004Jul01A) Byte-/Nativ-Code-Compiler javac (http://java.sun.com/j2se/1.5.0/download.jsp) Jikes (http://www-124.ibm.com/developerworks/opensource/jikes/) GCJ (http://gcc.gnu.org/java) Excelsior JET (http://www.excelsior-usa.com/jet.html) ar:جاÙ?ا bg:Java ca:Java cs:Java da:Java (programmeringssprog) en:Java programming language eo:Java es:Lenguaje de programación Java fi:Java fr:Java (langage) he:Java hu:Java programozási nyelv is:Forritunarmálið Java it:Java (linguaggio) ja:Java言語 lt:Java (kalba) nl:Programmeertaal Java pl:Java pt:Linguagem de programação Java ru:Java sv:Java (programsprÃ¥k) th:ภาษาจาวา tr:Java uk:Мова програмуваннÑ? Java vi:Java zh:Java编程è¯è¨€
Java-Abteilung von Sun Microsystems (http://java.sun.com) (Englisch) Download Java (http://java.sun.com/j2se/downloads.html) (Englisch) Download Java (http://www.java.com/de/) – Automatisierter Download des JRE (deutsch) Kaffee & Kuchen (http://java.seite.net) Deutsche Java-Seite mit News & Workshops Entwicklung einer Java-VM für .NET (http://www.ikvm.net/) Für Entwickler The Java Language Specification Download (http://java.sun.com/docs/books/jls/) (Englisch) J2SE 1.4.2 API Beschreibung (http://java.sun.com/j2se/1.4.2/docs/api/) (Englisch) J2SE 1.5 API Beschreibung (http://java.sun.com/j2se/1.5/docs/api/) (Englisch) Jakarta Projekt (http://jakarta.apache.org) Kostenlos als html zu lesendes Java-"OpenBook" von Galileo Computing (http://www.galileocomputing.de/openbook/javainsel4/) deutschsprachige Java-Foren JAVAForen.de (http://www.javaforen.de/) java-forum.net (http://www.java-forum.org/de/) www.java.de (http://www.java.de/forum/forumlist/1/) Java User Group Deutschland Online-Magazin Java Magazin (http://www.javamagazin.de/) Aktuelle News und Artikel rund um Java Link-Sammlungen Java Link Base (http://www.JavaLinkBase.de/) Deutscher Eintrag bei Open Directory (http://dmoz.org/World/Deutsch/Computer/Programmieren/Sprachen/Java/) Englischer Eintrag bei Open Directory (http://dmoz.org/Computers/Programming/Languages/Java/) Freie Java-Implentierungen Kaffe (http://www.kaffe.org/) freie JavaVM Projekt GNU Classpath (freie Klassenbibliotheken) (http://www.gnu.org/software/classpath/classpath.html)
[X] Schliessen
Dieser Artikel basiert auf dem Artikel
Java (Programmiersprache)
aus der freien Enzyklopädie
wikipedia
und steht unter der
GNU Lizenz für freie Dokumentation
. In der wikipedia ist eine
Liste der Autoren
verfügbar.
Platon
Pulp Fiction
Poltergeist
PK-Effekt
Pendeln
Poltergeist
Partei
Pyrenäen
Polen
[ Zurück ]
Inhalt Lexikon:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
1
2
3
4
5
6
7
8
9
Chat
|
Lexikon
|
Reisen
|
Versicherung
|
Forum
|
Kontakt