Studium, Ausbildung und Beruf

web uni-protokolle.de
 powered by
NachrichtenLexikonProtokolleBücherForenSonntag, 20. Oktober 2019 

Java (Programmiersprache)


Dieser Artikel von Wikipedia ist u.U. veraltet. Die neue Version gibt es hier.
Java ist eine objektorientierte plattformunabhängige Programmiersprache .

Die Urversion von Java auch Oak wurde in einem Zeitraum von 18 Monaten Frühjahr 1991 bis Sommer 1992 unter dem Projektnamen "The Green Project" Patrick Naughton Mike Sheridan und James Gosling sowie zehn weiteren Entwicklern im Auftrage amerikanischen Computerherstellers Sun Microsystems entwickelt. Einer der Urväter und Hauptentwickler Sprache war dabei James Gosling.

Das ursprüngliche Ziel bei der Entwicklung Java war aber nicht die Entwicklung einer Programmiersprache sondern die Entwicklung einer geräteunabhängigen Entwicklungs-Plattform Geräte aus dem Unterhaltungsbereich allen voran digitalen Settop-Boxen für den Empfang von interaktiven Mehrwertdiensten Kabelfernsehen .

Die Entwicklung fand in einem anonymen in der Sand Hill Road in Menlo statt. Während dieser abgeschiedenen Entwicklungsphase kam es keinem Austausch mit Sun Microsystems . Im Sommer 1992 schließlich war die Oak-basierte Anwendung fertiggestellt - "an interactive handheld device controller with an animated touchscreen user Diese Technologiedemonstration einer Touchscreen -basierten Gerätesteuerung mit animierter Benutzeroberfläche ( GUI ) hatte den Namen *7 ("StarSeven"). Der Oak hat den Ursprung übrigens in einer Eiche die vor dem Fenster des Entwicklers Gosling stand (Oak engl. für Eiche).

Nach der Vorführung von StarSeven mit zahlreiche Geräte interaktiv gesteuert werden konnten wurden aus der Kabelfernseh-Branche aufmerksam und aus dem "The Green Project" entstand die Firma "FirstPerson". dem Büro wurde ein Bürohaus in der Hamilton Avenue in Palo Alto .

Da die Belegschaft inzwischen von 13 auf 70 Mitarbeiter wuchs und die Zeit interaktive digitale Mehrwertdienste im Bereich des Kabelfernsehens nicht reif war suchte sich die junge neue Betätigungsfelder. Nach einem dreitägigen Gruppentreffen von Gage James Gosling Bill Joy Patrick Naughton Rosing und Eric Schmidt in "The Inn Squaw Creek" bei Lake Tahoe war schnell klar - das Internet war das neue Betätigungsfeld.

Auf Basis des Urvaters aller Webbrowser Mosaic wurde ein um Java erweiterter Browser geschaffen - der "WebRunner" (nach dem "The Blade Runner "). Später wurde aus "WebRunner" dann der bekannte HotJava -Browser.

Im März 1995 wurde die erste (1.0a2) des Java-Quellcodes für die Öffentlichkeit freigegeben die Downloadzahlen explodierten. Wenig später am 23. Mai 1995 wurde Java dann erstmals offiziell der vorgestellt in der "San Jose Mercury News".

Der Durchbruch für Java kam mit Integration von Java in den Browser Netscape besiegelt durch einen Handschlag zwischen Eric Schmidt George Paolini von Sun Microsystems und Marc Andreessen dem Erfinder und Begründer von Netscape . Ort und Zeit: 4 Uhr morgens einem Hotelzimmer des Sheraton Palace Hotels in Nähe des Convention Centers. Der Name Java seinen Ursprung übrigens im Namen einer starken Kaffee -Sorte die speziell für Espresso Verwendung findet ( Java-Bohne ) und von den Entwicklern bevorzugt getrunken

Inhaltsverzeichnis

Grundkonzepte der Sprache

Der Entwurf der Sprache verfolgte vier Hauptziele :

  1. Objektorientierung
  2. Plattformunabhängigkeit (d.h. Unabhängigkeit vom Betriebssystem und von
  3. Vernetzbarkeit
  4. Sichere Ausführung auf fernen Computern

Objektorientierung

Die Sprache Java ist objektorientiert aufgebaut. Die Grundidee der objektorientierten Programmierung die softwaretechnische Abbildung in einer Art und wie wir Menschen auch Dinge der realen erfahren. Die Absicht dahinter ist große Softwareprojekte managen zu können und sowohl die Qualität Software zu erhöhen als auch Fehler zu Ein weiteres Ziel der Objektorientierung ist ein Grad der Wiederverwendung von Softwaremodulen.

Plattformunabhängigkeit

Java ist plattformunabhängig d. h. Java-Programme laufen unabhängig vom und der eingesetzten Hardware . Java-Programme laufen nicht nur auf einem einer Workstation oder einem Server sondern auch Organizern und Handies. Dies wird dadurch erreicht es sich bei einem kompilierten Java-Programm nicht um direkt ausführbaren Maschinencode handelt sondern um maschinenunabhängigen Bytecode . Zum Ausführen von Java-Programmen wird eine Laufzeitumgebung ( runtime environment ) auf Softwarebasis benötigt die so genannte Java VM (Java Virtual Machine ). Es gibt mittlerweile aber auch Hardware-Lösungen Prozessoren deren Maschinensprache selbst der Java- Bytecode ist oder Betriebssysteme in denen Java Bestandteil ist (z. B. MacOS X ).

Modulare Ausführung auf fernen Computern

Java bietet die Möglichkeit Klassen zu die in unbekannten Containern ablaufen. Beispielsweise lassen sich Applets in Web-Browsern die Java unterstützen ausführen. Sicherheitskonzept von Java kann dazu eingesetzt werden unbekannte Klassen dabei keinen Schaden anrichten können vor allem bei Applets wichtig ist. Beispiele für Java Container-Module

Merkmale der Sprache

Wichtigstes Merkmal von Java ist sein das aus 3 Schichten besteht:

  • dem Code Verifier der sicherstellt dass die keinen ungültigen Bytecode ausführen kann.
  • den Class Loadern die die sichere Zuführung Klasseninformationen zum Interpreter steuern.
  • den Security Managern die sicher stellen dass Zugriff auf Programmobjekte erlaubt wird für die Rechte vorhanden sind.

Um die Sicherheit des Speichers sicher stellen sind Pointer in Java nicht implementiert. Statt dessen Objektzugriff über eine Referenz implementiert.

Um große Projekte strukturieren zu können saubere Schnittstellen zu Bibliotheken zu schaffen können Klassen zu Paketen (englisch packages ) zusammengefasst werden. Die Zugriffe auf Klassen Methoden eines fremden Packages können - ähnlich innerhalb einer Klasse unter anderem durch private und public - geregelt werden.

Weiter unterstützt die Sprache Threads (gleichzeitig ablaufende Programmteile) und Ausnahmen (englisch exception ) und Java beinhaltet auch einen Garbage-Collector der nicht (mehr) referenzierte Objektinstanzen aus Speicher entfernt.

Bemerkenswert ist auch die explizite Unterscheidung Schnittstellen und Klassen . Eine Klasse kann beliebig viele Schnittstellen ist aber stets die Spezialisierung genau einer

Zu Java gehört eine umfangreiche Klassenbibliothek. Programmierer wird damit eine einheitliche vom zugrunde Betriebssystem unabhängige Schnittstelle (Application programming interface API ) angeboten.

Mit Java 1.1 wurden die Java Foundation Classes (JFC) eingeführt die u. a. Swing das zur Erzeugung plattformunabhängiger graphischer Benutzerschnittstellen (GUI) dient und auf AWT basiert bereitstellen.

Syntax

Ein Beispielprogramm das eine Meldung auf Konsole ausdruckt:

/**
 * Kommentar
 */
public class HelloWorld {

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

}

Grunddatentypen

Grunddatentypen die auch als 'primitive' oder 'elementare' bezeichnet werden sind in Java die einzigen die keine Objekte sind. Sie sind ebenfalls (sie werden stets im Big Endian -Format gespeichert wenn sie größer als 8 Bit sind):
Datentyp Größe Wrapper-Klasse Wertebereich Beschreibung
boolean 1 bit java.lang.Boolean true oder false Boolescher Wahrheitswert
byte 8 bit java.lang.Byte -128 bis 127 Zweierkomplement mit Vorzeichen
char 16 bit java.lang.Character 0 bis 65.535 (z. B. 'A') Unicode -Zeichen ohne Vorzeichen
double 64 bit java.lang.Double +/-4 9E-324 bis +/-1 7E+308 Gleitkommazahl ( IEEE 754 )
float 32 bit java.lang.Float +/-1 4E-45 bis +/-3 4E+38 Gleitkommazahl (IEEE 754)
int 32 bit java.lang.Integer -2.147.483.648 bis 2.157.583.647 Zweierkomplement mit Vorzeichen
long 64 bit java.lang.Long -9.223.372.036.854.775.808 bis
9.223.372.036.854.775.807
Zweierkomplement mit Vorzeichen
short 16 bit java.lang.Short -32.768 bis 32.767 Zweierkomplement mit Vorzeichen

Liste der reservierten Wörter

abstract assert boolean break byte case catch class const continue default do double else false final finally float for goto if import instanceof int interface long native new package private protected public return short static super switch synchronized this throw throws transient try void volatile while

Funktion der reservierten Wörter

const und goto sind zwar reserviert aber ohne Funktion keine Schlüsselwörter im eigentlichen Sinn. Sie dienen dem Compiler zur Ausgabe sinnvoller Fehlermeldungen für von C / C++.

true false und null sind Literale jedoch ebenfalls eigentlich keine im engeren Sinn.

Mit assert werden Assertions realisiert.

private protected und public sind Zugriffsmodifizierer (access modifier):
Die Klasse selbst
innere Klassen
Klassen im
selben Package
Unterklassen Sonstige
Klassen
private Ja Nein Nein Nein
default Ja Ja Nein Nein
protected Ja Ja Ja Nein
public Ja Ja Ja Ja

abstract final static sind Polymorphie -Modifizierer. static kann vor allen Membern außer Konstruktoren stehen und bedeutet dass der betreffende im Kontext der Klasse verwendbar ist und kein Objekt benötigt. abstract kann vor Klassen und Methoden stehen und bedeutet dass dem betreffenden Implementierung fehlt. Unterklassen sind gezwungen sich selbst als abstrakt deklarieren oder die fehlende Implementierung zu liefern. final kann vor allen Membern außer Konstruktoren und bedeutet dass der betreffende Member nicht verändert werden darf. Finale Variablen sind ähnlich wie Konstanten finale Methoden dürfen von Subklassen nicht werden und von finalen Klassen darf man gar keine Subklassen bilden.

native kann nur vor Methoden stehen und dass die Implementierung der betreffenden Methode nicht Java sondern einer anderen Programmiersprache geschrieben wurde von der Virtuellen Maschine über eine Laufzeitbibliothek oder SO) gelinkt werden muss.

strictfp kennzeichnet Klassen und Methoden deren enthaltene streng nach IEEE ablaufen müssen.

package deklariert die Paket-Zugehörigkeit der nicht-geschachtelten Top-Level-Klassen Quelltextdatei.

import importiert Symbole (derzeit nur Klassen ab auch statische Member).

boolean char byte short int long float double und void sind Typen. void ist der Nichtstyp notwendig um Methoden Rückgabewerte zu kennzeichnen. Für die primitiven Typen: oben.

try catch finally throw throws beziehen sich auf die Ausnahmebehandlung (englisch exception handling ). Mit throw wird eine Ausnahme ausgelöst. Alle eventuell Ausnahmen einer Methode die nicht von RuntimeException oder Error abstammen müssen mit throw s in der Deklaration der Methode (Signatur) werden. Mit try umschließt man einen Block in dem eine Ausnahme auftreten könnte. Mit catch fängt man nach einem try -Block die dort aufgetretene Ausnahme ab mit finally hängt man an einen try oder catch -Block einen Block für Aufräumarbeiten an (z. Schließen von Dateien).

class und interface dienen zur Deklaration eigener Typen: Klassen Interfaces.

extends und implements dienen der Vererbung: extends der genetischen Erweiterungsvererbung von Klasse zu oder Interface zu Interface und implements der Implementierungsvererbung von Interface zu Klasse.

super und this beziehen sich im Objekt-Kontext auf das Objekt in seinem tatsächlichen Morph ( this ) bzw. im Morph der Superklasse ( super ). this wird verwendet um in Konstruktoren überladene aufzurufen um bei Membernamenskonflikten explizit auf die weiter innen liegenden Membern verdeckten Member zu super wird in Konstruktoren zum Aufruf des und in überschreibenden Methoden zum Aufruf der Methode verwendet.

new reserviert für neue Objekte (inkl. Arrays) Speicher auf dem Heap.

if else switch case default while do for break continue sind für die imperative Syntax dienen der Bedingungsprüfung und Schleifensteuerung.

return liefert Werte an eine Methode zurück.

volatile ist ein Modifizierer für nicht-lokale Variablen verbietet dem JIT-Compiler Registeroptimierungen auf diese Variable weil mehrere sie gleichzeitig verwenden könnten.

synchronized verwendet ein Objekt als Semaphor mit Lock-Pool und sorgt so dafür jeglicher mit synchronized an denselben Semaphor gebundener Code nur einziges Mal gleichzeitig ausgeführt werden kann. Alle Threads die solche Code-Blöck ausführen möchten werden blockiert bis der Semaphor wieder frei ist.

transient kennzeichnet nicht-persistente Variablen die bei der nicht automatisch serialisiert werden dürfen.

instanceof ist ein Java-Operator der prüft ob Objekt Instanz eines Typs ist.

Abgrenzung zu anderen Sprachen

JavaScript

Java ist nicht mit der Programmiersprache JavaScript zu verwechseln die ebenfalls in Web-Browsern verwendet wird. Sie hat eine ähnliche Syntax kennt aber keine Vererbung. Objekte werden JavaScript prototypenbasiert definiert. JavaScript ist wie der sagt eine reine Skriptsprache . Es existieren Implementationen vor allem in Web-Browsern aber auch alleinstehende Ausführungsumgebungen sind vorhanden.

C++

Im Gegensatz zu C++ fanden komplexe Konstrukte wie Mehrfachvererbung oder fehleranfällige Zeigerarithmetik keinen Einzug. Auch um die braucht man sich als Java-Entwickler in der keine Gedanken zu machen dies erledigt der genannte Garbage-Collector .

C#

C# (gesprochen: ßie scharp oder auch ziss ) kann als Kampfansage von Microsoft an Sun Microsystems Java gesehen werden. der Spezifikation von C# im Rahmen seiner .NET (gesprochen: dott-net ) Strategie hat Microsoft versucht den Spagat zu schaffen zwischen kompletten Neuanfang einer Sprache und der leichten bisher bestehender Komponenten.

Die Syntax von C# entspricht in großen Teilen Syntax von Java konzeptuelle Unterschiede bestehen insbesondere der Unterstützung von "delegates" ein Konzept welches ehesten mit Funktionszeigern vergleichbar ist (so genannte callbacks ) hierbei kommt ein Observer-Pattern zum Einsatz Objekte können sich für Ereignisse registrieren bzw. delegieren. C# kennt ebenso wie Java eine zwischen Werttypen (value types) und Objekten (reference allerdings sind auch die elementaren Datentypen objektbasiert. weiteren unterstützt C# so genannte attributes die es erlauben die Funktionalität der über Metadaten im Code zu erweitern (eine Funktionalität ist für Java 1.5 geplant). Um C# möglichst viele Programmierer zu binden enthält Sprache auch Bestandteile der Sprachen VisualBasic (z.B. bzw. properties) sowie C++ (z.B. structs enums).

Um auch systemnahe Programmierung zu ermöglichen in .NET die Möglichkeit auch so genannten unmanaged code zu verwenden. Somit können API-Aufrufe des ausgeführt werden aber der Programmierer ist für Ressourcenverwaltung verantwortlich. Außerdem wird hierdurch die theoretische eingeschränkt bzw. unmöglich. Bislang werden außer Microsoft Betriebssystemen (ab Windows NT 4 SP 6) Microsoft offiziell keine weiteren Betriebssysteme unterstützt. Die Mono (von Ximian -Technik-Guru Miguel de Icaza) und DotGNU versuchen seit längerem weitere Plattformen zu wobei das Mono-Projekt mittlerweile in den wichtigsten Teilbereichen eine bietet (z.B. ASP.NET und die BCL).

Die nächsten Versionen der Sprache Java

Änderungen an der Spezifikation von Java durch den Java Community Process (JCP) geregelt. Für vorgeschlagene Änderungen wird Java Specification Request (JSR) erstellt der verschiedene Phasen durchläuft die Änderungen in Java Einzug halten. ( Homepage des Java Community Process )

Java 1.5 soll im Sommer 2004 seit Februar 2004 ist jedoch das Java 1.5 Beta 1 bereits erhältlich. Es wird folgende Neuerungen in der Sprache Java verfügen:

  • Generische Typen (Generics)
  • Vereinfachte Syntax für die Iteration über Collections Maps und Arrays
  • Autoboxing/-unboxing (d. h. implizite Umwandlung von Datentypen in Objekte und zurück)
  • Metadaten
  • Syntaktische Unterstützung für Aufzählungswerte ("Enumerations")
  • Statischer Import von Klassen
  • Erweiterte Look and Feels
  • Unterstützung von XAWT unter Linux
  • Erweiterungen im Bezug auf Nebenläufigkeit (java.util)

Das für Java 1.5 geplante JSR 203 wurde auf Java 1.6 verschoben.

Außerdem kann davon ausgegangen werden dass Java im Laufe der Zeit zu einer aspektorientierten Programmiersprache wandeln wird.

Versionen

  • JDK 1.0 1996 - enthielt noch überschaubare Menge von Standardpaketen die in späteren schnell anwuchs:
    • java.lang : elementare Klassen z.B. Object und System
    • java.io : Ein- und Ausgabe
    • java.util : z.B. Datenstrukturen und eine Datumsklasse
    • java.net : einfache TCP/IP -Klassen
    • java.awt : grundlegene Klassen für grafische Benutzeroberflächen
    • java.applet : eine Klasse für die bekannten Applets.
  • JDK 1.1 1997 - erweiterte die um das Konzept der inneren Klassen und erweiterte die Standardbibliothek um
    • Klassen für die Internationalisierung (so genannte "Ressourcenbündel")
    • Java- Komponenten die Java-Beans
    • das Dateiformat JAR für die Paketierung ganzer Bibliotheken oder 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.B. Dateien
    • JDBC für den Zugriff auf relationale Datenbanken
    • Sicherheitsfunktionen z.B. zum Signieren von JAR-Dateien und Applets
  • J2SDK SE 1.2 1998 (ab diesem spricht man von der Java 2 Plattform und vom Java 2 Platform Software Development Kit Standard ) - erweiterte die Standardbibliothek um
    • neue Schnittstellen und Implementierungen für Collections also Datenstrukturen wie Listen 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
    • weiche Referenzen
  • J2SDK SE 1.3 2000 (API-Erweiterungen)
  • J2SDK SE 1.4 2002 (neben dem wurde auch die Sprache selbst durch Assertions erweitert)
  • J2SDK SE 1.5 2004 (neben dem wurde auch die Sprache selbst in größerem um neue syntaktische Konstrukte bereichert)

Siehe auch: Servlet Java Web Start Java Server Pages J2EE J2ME JavaDoc Blackdown

Entwicklungsumgebungen

Es gibt eine große Vielfalt von Entwicklungsumgebungen für Java sowohl kommerzielle als auch ( Open Source ). Die meisten Entwicklungsumgebungen für Java sind ebenfalls in Java geschrieben.

Die bekanntesten Open-Source-Umgebungen sind eclipse JEdit und NetBeans .

Unter den kommerziellen Entwicklungsumgebungen sind das Netbeans basierende Sun ONE Studio von Sun IntelliJ IDEA von NetBrains und JBuilder von Borland am verbreitetsten sowie die Freeware JCreator. Außerdem gibt es noch eine einige hundert Plugins erweiterte Version von Eclipse dem Namen Websphere Application Developer.

Literatur

Tutorial

  • Bradley Kjells interaktives Java Tutorial (dt./engl.) einsteigerfreundliche Einführung in Java

Weblinks




Bücher zum Thema Java (Programmiersprache)

Dieser Artikel von Wikipedia unterliegt der GNU FDL.

ImpressumLesezeichen setzenSeite versendenSeite drucken

HTML-Code zum Verweis auf diese Seite:
<a href="http://www.uni-protokolle.de/Lexikon/Programmiersprache_Java.html">Java (Programmiersprache) </a>