Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
software:java:start [2010-10-15 14:10] zueger1software:java:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1
Zeile 1: Zeile 1:
-====== Java ====== 
-{{  .:java-logo.png?120px&nolink|Java-Logo}} 
-**Java** ist eine objektorientierte Programmiersprache welche in den 90iger-Jahren von der Firma Sun Microsystems entworfern wurde. Sie ist Bestandteil der Java-Technologie und wird an der NTB als primäre Programmiersprache in der Lehre verwendet. 
  
-Java-Programme werden üblicherweise nicht in Maschinen- sondern Bytecode übersetzt, welcher anschliessend in einer speziellen Umgebung - der //Java Runtime Environment// oder //Java Platform// - ausgeführt wird. Dabei wird der Bytecode von der //Java Virtual Machine// interpretiert und bei bedarf kompiliert (Just-in-time-Kompilierung). Dadurch sind Java-Anwendungen plattformunabhängig und laufen somit ohne Anpassungen auf verschiedenen Computerarchitekturen und Betriebssystemen, sofern dafür eine Java-Laufzeitumgebung existiert. Sun bietet Laufzeitumgebungen für Windows (x86-32), Linux (x86-32 und x86-64) sowie Solaris (x86-32, x86-34, SPARC und SPARC64) an. Für weitere Plattformen gibt es Java-Umgebungen von anderen Herstellern, wie z.B. von Apple für Mac OS X oder IBM für AIX, Linux und Windows. 
- 
-Auf sämtlichen Computern am NTB ist das //Sun Java Development Kit// (kurz JDK) installiert, welches neben der JRE auch die notwendigen Entwicklungswerkzeuge enthält. Für die Java-Entwicklung wird am Besten [[software_entwicklung:eclipse:start|Eclipse]] verwendet, welches ebenfalls auf allen Rechnern verfügbar ist. 
- 
-===== Eigenschaften und Merkmale ===== 
-Java wurde mit dem Ziel entworfen, im Vergleich zu anderen objektorientierten Programmiersprachen einfach zu sein. Dazu wurde der Sprachumfang im Vergleich zu C++ reduzierten. So besitzt Java beispielsweise //Operator Overloading//, keine //Pointer// und auch //Mehrfachvererbung// wird nicht unterstützt. Dennoch wurde die Syntax in vielen Bereichen an C++ angelehnt, so dass das ein Umstieg einfacher wird. Im gegensatz zu C++ oder Smalltalk wird in Java explizit zwischen Schnittstellen und Klassen unterschieden. Da eine Klasse zwar nicht von mehreren Basisklassen erben kann, aber belibig viele Interfaces implementieren kann, können die meisten der entsprechenen Probleme trotzdem elegant gelöst werden. Dabei ist jedoch zu beachten, dass Schnittstellen nur die Methodensignaturen an die implementierende Klasse weitergeben können, nicht jedoch Attribute oder bereits implementierte Methoden. 
- 
-Weitere wichtige Eigenschaften von Java sind die starke Typisierung, die automatische Garbage Collection, die verwendung von Referenzen statt Pointern sowie das Exception Handling. 
- 
- 
- 
-Weiter wurde beim Entwurf von Java auf ei   Javas Klassenbibliothek bietet eine Reihe einfacher Möglichkeiten für Netzwerkkommunikation, von TCP/IP-Protokollen über Remote Method Invocation 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, Referenzen statt Pointer, Exception Handling. 
- 
-Sicherheit 
-    Dafür stehen Konzepte wie der Code-Verifier, der sicherstellt, dass die Java Virtual Machine keinen ungültigen Bytecode ausführen kann, 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 jeder beliebigen Computerhardware läuft, unabhängig von ihrem Prozessor oder anderen Hardwarebestandteilen. 
- 
-Portabilität 
-    Zusätzlich zur Architekturneutralität ist Java auch 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 float immer ein IEEE 754 Float von 32 Bit. Dasselbe gilt auch für die Klassenbibliothek, die beispielsweise unabhängig vom Betriebssystem dasselbe GUI erzeugen kann. 
- 
-Leistungsfähigkeit 
-    Java ist insbesondere auf Grund der dynamischen Optimierungen der Virtual Machine eine der effizientesten Programmiersprachen und liefert ähnliche Geschwindigkeiten wie C++- oder C#-Programme. 
- 
-Interpretierbarkeit 
-    Java ist eine interpretierbare Sprache. Die Java Virtual Machine interpretiert auch Java-Bytecode, bevor sie ihn aus Performancegründen compiliert und optimiert. 
- 
-Parallelisierbarkeit 
-    Java unterstützt Multithreading, also den parallelen Ablauf von eigenständigen Programmmabschnitten. Dazu bietet die Sprache selbst die Keywords synchronized und volatile – Konstrukte, die das „Monitor & Condition Variable Paradigma“ von C. A. R. Hoare[6] unterstützen. Die Klassenbibliothek enthält weitere Unterstützungen für parallele Programmierung mit Threads. 
- 
-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) 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 [Bearbeiten] 
- 
-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 interface und class ausgedrü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.[7] 
-Reflection [Bearbeiten] 
- 
-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 [Bearbeiten] 
- 
-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 Software-Entwicklung 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 [Bearbeiten] 
- 
-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 Java Beans. 
- 
- 
- 
-Der Objektzugriff in Java ist über Referenzen implementiert. Aus Sicherheitsgründen ist es nicht möglich, deren Speicheradresse zu modifizieren. So genannte Zeigerarithmetik ist mit der Sprache also 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 Strukturierung von größeren Projekten sowie eine Trennung des Namensraums für 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 zugrunde liegenden 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. 
- 
- 
- 
----- 
- 
-Dieser Text basiert auf den Wikipedia-Artikeln //Java,Java-Syntax, ...