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