Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
software:java:start [2010-10-15 14:10] – zueger1 | software:java:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Java ====== | ||
- | {{ .: | ||
- | **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// | ||
- | |||
- | Auf sämtlichen Computern am NTB ist das //Sun Java Development Kit// (kurz JDK) installiert, | ||
- | |||
- | ===== 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//, | ||
- | |||
- | Weitere wichtige Eigenschaften von Java sind die starke Typisierung, | ||
- | |||
- | |||
- | |||
- | Weiter wurde beim Entwurf von Java auf ei Javas Klassenbibliothek bietet eine Reihe einfacher Möglichkeiten für Netzwerkkommunikation, | ||
- | |||
- | 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: | ||
- | |||
- | Sicherheit | ||
- | Dafür stehen Konzepte wie der Code-Verifier, | ||
- | |||
- | 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, | ||
- | |||
- | 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# | ||
- | |||
- | Interpretierbarkeit | ||
- | Java ist eine interpretierbare Sprache. Die Java Virtual Machine interpretiert auch Java-Bytecode, | ||
- | |||
- | Parallelisierbarkeit | ||
- | Java unterstützt Multithreading, | ||
- | |||
- | 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, | ||
- | |||
- | Java ist nicht vollständig objektorientiert, | ||
- | Reflection [Bearbeiten] | ||
- | |||
- | Java bietet eine Reflection-API als Bestandteil der Laufzeitumgebung. Damit ist es möglich, zur Laufzeit auf Klassen und Methoden zuzugreifen, | ||
- | 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, | ||
- | |||
- | |||
- | |||
- | 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, | ||
- | |||
- | 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, | ||
- | |||
- | Zu Java gehört eine umfangreiche Klassenbibliothek. Dem Programmierer wird damit eine einheitliche, | ||
- | |||
- | Mit Java 1.2 wurden die Java Foundation Classes (JFC) eingeführt, | ||
- | |||
- | |||
- | |||
- | ---- | ||
- | |||
- | Dieser Text basiert auf den Wikipedia-Artikeln // |