Liste Programmieren – Java Überblick 1 2 3 4 5 6 7 8 9 10 11 Was ist Java? Klassen und Objekte Vererbung Schnittstellen Innere Klassen Exceptions Funktionsbibliothek Datenstrukturen und Algorithmen Ein-/Ausgabe Threads GUI-Programmierung mit SWING © Prof. Dr. Björn Dreher Liste Programmieren - Java 11 Liste Programmieren – Java Überblick: 1. Was ist Java? 1.1 1.2 1.3 Historie Prinzipien Änderungen gegenüber C++ © Prof. Dr. Björn Dreher Liste Programmieren - Java 12 1 1. Was ist Java? 1.1 Historie Ursprünge in 1990 (Bill Joy) James Gosling Vorgänger Oak: Sprache für TV Set-Top Boxen 1993: Aus Oak wird Java Entwickelt von Sun Microsystems „The Network is the Computer“ Erste Alpha-Version 1995 Zunächst um Applets zu schreiben Ziel: Maschinen-unabhängige Programmiersprache Von Applet-Programmierung zur vollständigen Programmiersprache für breite Anwendungsgebiete Sehr umfangreiche Klassenbibliotheken Swing zur Programmierung graphischer Benutzerschnittstellen Netzprogrammierung, Verteilte Anwendungen (Servlets, Enterprise Java Beans) © Prof. Dr. Björn Dreher Liste Programmieren - Java 13 Liste Programmieren – Java Überblick: 1. Was ist Java? 1.1 1.2 1.3 Historie Prinzipien Änderungen gegenüber C++ © Prof. Dr. Björn Dreher Liste Programmieren - Java 14 2 1. Was ist Java? 1.2 Prinzipien Architektur Java wird sowohl interpretiert als auch kompiliert Java Quellcode wird in maschinen-unabhängigen Code kompiliert Instruktionen für eine virtuelle Maschine (Java Virtual Machine – JVM) Java byte code Wird von Java runtime interpreter ausgeführt Virtuelle Maschine Stack-basierter Instruktionssatz Verwaltet Speicher (heap) Primitive Datentypen Verwaltet Speicherblöcke (dynamischer Speicher) Offengelegte Spezifikation Kann von jedermann implementiert werden Nichts ist implementierungsabhängig © Prof. Dr. Björn Dreher Liste Programmieren - Java 15 1. Was ist Java? 1.2 Prinzipien Virtuelle Maschine (fortgesetzt) Interpreter ist relativ leichtgewichtig und klein Oft in C oder C++ implementiert Kann separate Anwendung oder in einen Browser eingebettet sein Stellt hohe Portabilität von Java Code sicher Fundamentale Einheit ist die Klasse (class) Übersetzte Klasse enthält Java byte code und Informationen über die Klasse Wird zur Laufzeit dynamisch gefunden und geladen © Prof. Dr. Björn Dreher Liste Programmieren - Java 16 3 1. Was ist Java? 1.2 Prinzipien Virtuelle Maschine (fortgesetzt) Fundamentale Klassen Architektur-abhängig Native methods In kompilierter Programmiersprache geschrieben Schnittstelle zu Betriebssystem, Dateisystem, etc. Sonstige Klassen Voll in Java geschrieben Portabel Dazu gehört auch der Compiler und die Laufzeitumgebung für Web-Browser © Prof. Dr. Björn Dreher Liste Programmieren - Java 17 1. Was ist Java? 1.2 Prinzipien Virtuelle Maschine (fortgesetzt) Laufzeitverhalten Bei Interpretern üblicherweise schlecht Aber: Java interpretiert bereits übersetzten byte code Zusätzlich: Just-In-Time (JIT) Compiler Annähernd so schnell wie direkt in Maschinencode übersetzter Code Plus: Suns HotSpot Technologie © Prof. Dr. Björn Dreher Adaptive Compilierung Liste Programmieren - Java 18 4 1. Was ist Java? 1.2 Prinzipien Sicherheit Verschiedene Sicherheitsebenen Java class loader Lädt byte code der übersetzten Klassen Bildet Schutz um nicht vertrauenswürdige Klassen Basis für security policies Im Detail später © Prof. Dr. Björn Dreher Liste Programmieren - Java 19 Liste Programmieren – Java Überblick: 1. Was ist Java? 1.1 1.2 1.3 Historie Prinzipien Änderungen gegenüber C++ © Prof. Dr. Björn Dreher Liste Programmieren - Java 20 5 1. Was ist Java? 1.3 Änderungen gegenüber C++ Kein Operator Overloading Kein Präprozessor Keine #defines Keine bedingte Kompilierung Package Struktur Ausnahme: + Operator (String Verkettung) Organisation der Klassen in hierarchische Struktur Fixiert in Verzeichnisstruktur Zusätzliche Sichtbarkeitsebene Übernimmt Teile des make-Prozesses Keine Header-Dateien Sämtliche Typinformationen für Attribute und Methoden sind in class Files enthalten Quellcode ist einfacher zu lesen! © Prof. Dr. Björn Dreher Liste Programmieren - Java 21 1. Was ist Java? 1.3 Änderungen gegenüber C++ Keine Mehrfacherbung Strenge statische Typdefinition Zur Übersetzungszeit bekannt Bei Zuweisung geprüft Prüfung auf nicht initialisierte Variablen Typprüfung auch zur Laufzeit Stattdessen: Schnittstellen (interfaces) Rein abstrakte Klassen Eine Klasse kann mehrere Interfaces implementieren Polymorphe Objekte Typumwandlung durch Type Casting Inspection von Objekten zur Laufzeit Späte Bindung Methoden entsprechen – bis auf wenige Ausnahmen – immer den virtuellen Methoden in C++ © Prof. Dr. Björn Dreher Liste Programmieren - Java 22 6 1. Was ist Java? 1.3 Änderungen gegenüber C++ Dynamische Speicherverwaltung Nur für Variablen von simplen Datentypen (int, float, ...) wird mit der Deklaration auch der Speicher im Sinne von C++ definiert Alle anderen Variablen sind Objekte und müssen dynamisch allokiert werden Mit dem new Operator Auch Arrays sind Objekte Kennen Typ und Größe Das Vernichten von dynamisch allokiertem Speicher übernimmt die garbage collection! Es gibt keinen delete Operator Programmierer muss sich darum nicht kümmern! Es gibt keine Speicherlecks! Generische Programmierung (Templates) erst ab Java 5 © Prof. Dr. Björn Dreher Liste Programmieren - Java 23 1. Was ist Java? 1.3 Änderungen gegenüber C++ Zeiger in Java Referenzen „Es gibt keine Zeiger in Java “ ist nicht ganz richtig ... Dynamisch allokierte Objekte werden über (konstante) Zeiger referenziert Variablenname eines Objektes bezeichnet eigentlich die Referenz auf das Objekt Streng typisierter Verweis auf das Objekt Automatische Dereferenzierung wie in C++ Keine Zeigerarithmetik wie in C/C++ Wertzuweisung ist möglich! Damit können beliebige Datenstrukturen typsicher aufgebaut werden Als Parameter werden Referenzen als Werte übergeben Nur eine Ebene der Indirection © Prof. Dr. Björn Dreher Liste Programmieren - Java 24 7 1. Was ist Java? 1.3 Änderungen gegenüber C++ Zeiger auf Methoden Gibt es nicht in Java Es gibt andere Wege, die Methode bei einem Aufruf dynamisch zu wählen Java reflection Mechanismus Arrays Normale Objekte Werden dynamisch allokiert Kennen ihren Typ und Größe © Prof. Dr. Björn Dreher Liste Programmieren - Java 25 1. Was ist Java? 1.3 Änderungen gegenüber C++ Fehlerbehandlung Ausnahmebehandlung (exception handling) Ähnlich wie neuerdings auch in C++ Compiler verlangt, dass Methode entweder die exception fängt und behandelt oder diese als möglich deklariert Vergleichbar mit Schnittstellenbeschreibung für Parametertypen und -anzahl Nebenläufige Verarbeitung Threads Synchronisation © Prof. Dr. Björn Dreher Liste Programmieren - Java 26 8 1. Was ist Java? 1.3 Änderungen gegenüber C++ Sicherheitssystem Ein Stück C++ Code // C++ code class Finanzen { private: char kreditKartenNummer[16]; ... }; main() { Finanzen f; // Ein Zeiger, um in das Objekt zu sehen char *kartenNum = (char *) &f; printf("Karten Nummer = %s\n", kartenNum); } Das Sicherheitssystem von Java würde dies nicht zulassen © Prof. Dr. Björn Dreher Liste Programmieren - Java 27 1. Was ist Java? 1.3 Änderungen gegenüber C++ Mehrschichtiges Sicherheitssystem System Resources Security Manager Class Loader Verifier Nicht vertrauenswürdige Quelle Java Binary Bytecode Verifier Stellt sicher, dass der byte code sich „anständig verhält“ (is wellbehaved) Sicherheit gegenüber Manipulation des übersetzten Codes Z.B.: © Prof. Dr. Björn Dreher Code verletzt nicht die Zugriffsdefinitionen einer Klasse Keine illegalen Casts Liste Programmieren - Java 28 9 1. Was ist Java? 1.3 Änderungen gegenüber C++ Mehrschichtiges Sicherheitssystem Class Loader Bringt die übersetzten Klassen in den Interpreter Lädt ggf. auch über ein Netzwerk Klasse bleibt mit ihrem Class Loader verknüpft Getrennte Namensräume basierend auf Herkunft der Klasse Referenzen zu anderen Klassen müssen durch denselben Class Loader aufgelöst werden Suche nach Java Klassen beginnt immer bei den „eingebauten“ Klassen (Javas Classpath) Diese Klassen werden nur einmal geladen und können nicht durch Klassen von anderen Ursprüngen ersetzt werden © Prof. Dr. Björn Dreher Liste Programmieren - Java 29 1. Was ist Java? 1.3 Änderungen gegenüber C++ Mehrschichtiges Sicherheitssystem Security Manager Kann installiert sein Entscheidet über Berechtigungen der Anwendung auf SystemRessourcen Dateisystem, Netzwerk-Ports, andere Prozesse Typisch für Applets in Web-Browsern © Prof. Dr. Björn Dreher Liste Programmieren - Java 30 10 1. Was ist Java? 1.3 Änderungen gegenüber C++ Kommentare Wie in C++ javadoc Kommentare Automatische Generierung von HTML-Dokumentation Hilfsprogramm javadoc Struktur: /** * Das ist eine tolle Klasse * <p> * Alles weitere folgt ... * * @see Klasse1 * @see Klasse2 * @author Hans Alleskoenner * @version 0.95, 19 Dez 2002 */ © Prof. Dr. Björn Dreher 31 Liste Programmieren - Java 1. Was ist Java? 1.3 Änderungen gegenüber C++ Tags in javadoc Kommentaren Tag Beschreibung Anwendbar bei ... @see Verweis auf andere Klasse Klasse, Methode, Attribut @author Name des Autors Klasse @version Versionsbezeichnung Klasse @param Parametername und –beschreibung Methode @return Rückgabewert Methode @exception Name der geworfenen Exception und Beschreibung Methode @deprecated Sollte nicht mehr verwendet werden; veraltet Klasse, Methode, Attribut © Prof. Dr. Björn Dreher Liste Programmieren - Java 32 11