Java - ias.uni-stuttgart.de

Werbung
Universität Stuttgart
Institut für Automatisierungs- und Softwaretechnik
Prof. Dr.-Ing. Dr. h. c. P. Göhner
Java-Kurs am IAS
Java
am IAS
© 2012, IAS
1
Kursüberblick
Erster Tag
Teil 1:
 Erster Überblick
 Java Grundlagen
Teil 2:
 Grundlagen der Objektorientierung
 Klassen und Objekte in Java
Java
am IAS
© 2012, IAS
2
Erster Überblick
Was ist Java?
 ein Projekt von Sun:
• Programmierumgebung
• WWW-Browser
 die Programmierumgebung (JavaDevelopersKit) besteht
aus:
•
•
•
•
einem Java-Compiler
verschiedenen Bibliotheken
einem Laufzeitsystem
einem Debugger
 Kennzeichen der Java Programmiersprache:
•
•
•
•
•
Java
am IAS
objektorientiert
plattformunabhängig
streng typisiert
sicher in Netzen
ähnliche Syntax wie C++
© 2012, IAS
3
Erster Überblick
Geschichtliches ...
 August 1991: James Gosling (SUN) entwickelt Oak (Java)
 Entwicklungsziel: einfache Programmiersprache für
Consumer Electronics (z.B Interactive TV, Settop-Boxes)
 Anfang 1994: Nach Misserfolgen im Bereich Consumer
Electronics und zunehmendem Erfolg des WWW Neuausrichtung auf Internet
 Februar 1995: Erste Version von Oak (jetzt: Java) und
einem Java WWW-Browser (Hotjava) werden veröffentlicht
 August 1995: SUN lizensiert Java an Netscape, IBM und
Microsoft
 Dezember 1998: JDK 1.2
 aktuelle Version 7
Java
am IAS
© 2012, IAS
4
Erster Überblick
Allgemeine Konzepte
 Java wird interpretiert (schneller Entwicklungszyklus)
 Hohe Zuverlässigkeit und Robustheit durch
• Speichermanager
• Verzicht auf (herkömmliche) Zeigertechniken
• strikte Typenüberprüfung zur Kompilier- und Laufzeit
 hohe Verfügbarkeit - Code kann jederzeit über das
Netzwerk nachgeladen werden
 Portabilität - “Write once, run everywhere”
 GUI-Klassenbibliothek (AbstractWindowingToolkit)
Java
am IAS
© 2012, IAS
5
Erster Überblick
Plattformunabhängigkeit
JavaInterpreter
(Pentium)
Java-Compiler
(Pentium)
JavaBytecode
(plattformunabhängig)
JavaCode
JavaInterpreter
(SPARC)
Java-Compiler
(SPARC)
*.class
*.java
JavaInterpreter
(...)
...
Java
am IAS
© 2012, IAS
6
Erster Überblick
Vergleich mit C++ (1)
 Java baut auf C++ auf:
• größtenteils identische Syntax
• Ausnahmebehandlung (exception handling)
• Meta-Objekt-Informationen
 Java vermeidet folgende (teilweise “kritische”) C++
Elemente:
•
•
•
•
Zeiger (Pointer)
Mehrfachvererbung
Präprozessor, keine Header-Dateien
generischen Klassen, Templates
 Java enthält zusätzliche Elemente
•
•
•
•
Java
am IAS
Garbage Collection
Interface-Konzept
Unicode
Threads
© 2012, IAS
7
Erster Überblick
Vergleich mit C++ (2)
 Java ist “schlechter” als C++:
• Java ist nicht standarisiert (Sprache und Bibliotheken)
• C++ Code ist hardwarenäher
Java
am IAS
© 2012, IAS
8
Erster Überblick
Werkzeuge des JDK
 Interpreter (Java Virtual Machine): java
 Testumgebung für Applets:
appletviewer
 Java-Compiler: javac
 Generierung von HTML-Dokumentation
für Klassen: javadoc
 Java-Debugger: jdb
 Headerfile-Generator zur Einbindung
von
C-Funktionen: javah
werden im Rahmen
des Kurses nicht
behandelt!
 Disassembler für Java-Bytecode: javap
JDK kostenlos verfügbar:
http://www.oracle.com/technetwork/java/javase/downloads/
index-jsp-138363.html#javasejdk
Java
am IAS
© 2012, IAS
9
Erster Überblick
Applikation contra Applet
 Applikation:
• “normales”, Java-Programm, vergleichbar mit anderen
(interpretierten) Programmiersprachen
• Bytecode wird von einem Interpreter ausgeführt
 Applets:
• werden in HTML-Seiten eingebunden und von Web-Browsern
ausgeführt
• können über das Netz geladen werden
• unterliegen strengen Sicherheitsanforderungen
(z.B. kein Schreiben im lokalen Dateisystem)
• ermöglichen interaktive Web-Seiten
Java
am IAS
© 2012, IAS
10
Erster Überblick
HelloWorld-Applikation (1)
// Datei: HelloWorld.java
public class HelloWorld {
public static void main( String[] args ) {
System.out.println(“Hello World!”);
}
}
 das gesamte Programm befindet sich innerhalb der
Klassendefinition public class HelloWorld {}
 Java-Programm = Menge von Klassendefinitionen
 die Klassendefinition HelloWorld muss in einer
gleichnamigen Datei HelloWorld.java abgespeichert sein
 main()-Methode ist der Einstiegspunkt des Programms
 Bildschirmausgabe mit System.out.println()
Java
am IAS
© 2012, IAS
11
Erster Überblick
HelloWorld-Applikation (2)
 Übersetzung der Applikation (Compiler):
% javac HelloWorld.java
 nach fehlerfreier Übersetzung entsteht
die Bytecode-Datei: HelloWorld.class
 ausführbares Programm = Menge von .class-Dateien
 Ausführen der Applikation (Interpreter):
% java HelloWorld
 Ausgabe von “HelloWorld” auf dem Bildschirm
Java
am IAS
© 2012, IAS
12
Erster Überblick
HelloWorld-Applet (1)
// Datei: HelloWorld.java
import java.awt.Graphics;
public class HelloWorld extends java.applet.Applet {
public void paint( Graphics g ) {
g.drawString(“Hello World!”, 50, 25);
}
}
 import ermöglich Zugriff auf AWT-Bibliothek
(Abstract Windowing Toolkit, JDK)
 keine main-Methode
 Überschreiben von vorgegebenen Methoden (paint),
die in der AWT-Klasse Applet definiert sind
 Compiler-Aufruf wie bei Applikation
Java
am IAS
© 2012, IAS
13
Erster Überblick
HelloWorld-Applet (2)
// minimale HTML-Datei mit eingebundenem Applet
<HTML>
<HEAD>
<TITLE>HelloWorld Applet</TITLE>
</HEAD><BODY>
<APPLET CODE=“HelloWorld.class” WIDTH=100 HEIGHT=100>
</APPLET>
</BODY>
</HTML>
 CODE gibt Name der Appletklasse an
 WIDTH und HEIGHT bestimmen die (Pixel-)Größe des Applets
 HTML-Datei und HelloWorld.class sollten im gleichen
Verzeichnis liegen
 HTML-Datei in Java-fähigen Browser oder mit
appletviewer aufrufen
Java
am IAS
© 2012, IAS
14
Kursüberblick
Erster Tag
Teil 1:
 Erster Überblick
 Java Grundlagen
Teil 2:
 Grundlagen der Objektorientierung
 Klassen und Objekte in Java
Java
am IAS
© 2012, IAS
15
Java Grundlagen
Prinzip: Die Syntax von Java ist stark an C/C++
angelehnt und größtenteils identisch.
Anweisungen
 einzelne Java-Operationen:
•
•
•
•
•
Zuweisungen (int i = 1)
Ablaufsteuerung (if/else, do-while)
Methodenaufrufe (System.out.println(“Hallo”))
Instanziierungsaufrufe (Date today = new Date())
sonstige Anweisungen (import java.awt.Font)
 Wichtig: Anweisungen werden durch Semikolon (;)
getrennt, z.B.:
import java.awt.Font;
int i = 1;
System.out.println(“Hallo”);
Java
am IAS
© 2012, IAS
16
Java Grundlagen
Variablen (1)
 Stellen im Speicher, die Werte aufnehmen können
 bestehen aus Typ, Namen und Wert:
int i = 12;
 müssen vor der Benutzung deklariert werden:
zaehler = 7;
// Fehler: Variable zaehler unbekannt!
 Deklaration mit Anfangswerten erlaubt:
boolean muede = false;
 Mehrfachdeklarationen in einer Zeile möglich:
int i = 0, j = 3, k = 5;
 Variablennamen müssen mit einem Buchstaben, einem
Unterstreichungsstrich (_) oder einem Dollarzeichen ($)
beginnen
Java
am IAS
© 2012, IAS
17
Java Grundlagen
Variablen (2)
 Java unterscheidet Groß/Kleinbuchstaben
 aussagekräftige Variablennamen wählen!
 Variablentyp darf sein:
• primitiver Datentyp
• Klassenname
• Array
 neue (benutzerspezifische) Variablentypen können nur
durch neue Klassen erzeugt werden (kein typedef wie in
C/C++!)
Java
am IAS
© 2012, IAS
18
Java Grundlagen
Primitive Datentypen
Typ
Bedeutung
Größe
boolean
true oder false
char
Unicode-Zeichen
16 Bits
byte
Ganze Zahl mit Vorzeichen
8 Bits
short
Ganze Zahl mit Vorzeichen
16 Bits
int
Ganze Zahl mit Vorzeichen
32 Bits
long
Ganze Zahl mit Vorzeichen
64 Bits
float
IEEE 754-Fließkommazahl
32 Bits
double
IEEE 754-Fließkommazahl
64 Bits
1 Bit
 keine Implementierungsabhängigkeiten
Java
am IAS
© 2012, IAS
19
Java Grundlagen
Kommentare
 // Text Kommentar bis zum Ende der Zeile
 /* Text */ mehrzeilige Kommentare möglich, aber kein
Verschachteln von Kommentaren!
 /** Text */ spezielle Kommentare für javadoc
Zeichenketten
 keine Zeichen-Arrays sondern Objekte der Klasse String
 bestehen aus mehreren Zeichen zwischen doppelten
Anführungszeichen (“Hallo”)
 Verkettung (+) möglich (“Hallo” + “, World”)
 können Escape-Zeichen enthalten (Auszug):
neue Zeile
\b
Rückschritt
\\
Backslash
\xdd Hexadezimal
\n
Java
am IAS
\t
\r
\”
\uddd
© 2012, IAS
Tab
Return
doppeltes Anführungszeichen
Unicode-Zeichen
20
Java Grundlagen
Operatoren (1)
 Arithmetik
Operator
Bedeutung
Beispiel
+
*
/
%
Addition
Subtraktion
Multiplikation
Division
Modulo
3 + 4
5 - 7
5 * 5
14 / 7
20 % 7
 Zuweisungen
Java
am IAS
Ausdruck
Bedeutung
x
x
x
x
x
x
x
x
+=
-=
*=
/=
y
y
y
y
=
=
=
=
x
x
x
x
+
*
/
© 2012, IAS
y
y
y
y
21
Java Grundlagen
Operatoren (2)
 Inkrement/Dekrement
Ausdruck
x++
x-++x
--x
Bedeutung
x = x + 1,
x = x – 1,
x = x + 1,
x = x - 1,
Inkrementieren (postfix)
Dekrementieren (postfix)
Inkrementieren (prefix)
Dekrementieren (prefix)
postfix: Der Wert wird nach dem auslesen verändert.
prefix: Der Wert wird bevor dem auslesen verändert.
Bsp.:
int x = 5;
System.out.println(x++);
System.out.println(x);
x = 5;
System.out.println(++x);
System.out.println(x);
Java
am IAS
//
//
//
//
//
//
Initialisierung der Variable x mit dem Wert 5
Ausgabe von „5“
Ausgabe von „6“
Zuweisung des Wertes 5 an die Variable x
Ausgabe von „6“
Ausgabe von „6“
© 2012, IAS
22
Java Grundlagen
Operatoren (3)
 Vergleiche und Boolean
Operator
==
!=
<, >
<=, >=
&&
||
Java
am IAS
Bedeutung
Gleich
Ungleich
Kleiner als, Größer als
Kleiner gleich, Größer gleich
Und
Oder
© 2012, IAS
Beispiel
x == 3
x != 3
x < 3, x > 3
x <= 3, x >= 3
(x > 0) && (x < 1)
(x > 0) || (x < 1)
23
Java Grundlagen
Operatoren (3)
 Bitweise Operatoren
• Operationen auf einzelne Bits in Ganzzahlen (z.B. Verschiebungen,
Komplement, AND, OR, ...)
• spielen in diesem Kurs keine Rolle
 Operatorpräzedenz
• Reihenfolge, in der Ausdrücke mit Operatoren bewertet werden,
z.B y = 6 + 4 / 2 ist 8 und nicht 5 !
• Reihenfolge (kann durch Klammerung geändert werden):
1) Klammern ([], ()) und Methoden- und Variablenzugriffe (.)
2) Inkrement/Dekrementausdrücke (++, --)
3) Multiplikation, Division, Modulo (*, /, %)
4) Addition, Subtraktion (+, -)
5) Bitweise Operationen
6) Vergleiche (<, >, ==, !=)
7) Logische (Boolsche) Operatoren (&&, ||)
8) Zuweisungen (=, +=, -=, *=, /=, ...)
Java
am IAS
© 2012, IAS
24
Java Grundlagen
Operatoren (4)
Beispiel:
// Datei: OperatorTest.java
class OperatorTest {
public static void main(String[] args) {
int x = 6;
int y = 4;
System.out.println(“x +
System.out.println(“x /
System.out.println(“x %
System.out.println(“++x
System.out.println(“--x
y
y
y
:
:
=
=
=
“
“
“
“
“
+
+
+ (x + y));
+ (x / y));
+ (x / y));
(++x));
(--x));
//
//
//
//
//
=
=
=
=
=
10
1
2
7
6
}
}
Java
am IAS
© 2012, IAS
25
Java Grundlagen
Ablaufsteuerung (1)
 if-Anweisung
if( wert >= 1 ){
summe = summe + wert;
}
else {
wert = 0;
}
// Bedingung
// Anweisungen
// alternativer Zweig
// Anweisungen
• else-Zweig ist optional
• bei nur einem Befehl im if/else-Zweig kann die {}Klammerung weggelassen werden:
if( wert >= 1 )
summe = summe + wert;
Java
am IAS
© 2012, IAS
26
Java Grundlagen
Ablaufsteuerung (2)
 switch-Anweisung
switch( wert ){
case 1:
summe++;
case 2:
summe = summe + 2;
break;
default:
summe = 0;
// wert = 1!
// wert = 2!
// springt aus der {}-Klammer
// Vergleich immer erfüllt!
}
• zur Variablen wert passender Ausdruck und/oder DefaultAusdruck wird ausgeführt
Java
am IAS
© 2012, IAS
27
Java Grundlagen
Ablaufsteuerung (3)
 while-Schleife
while( summe >= 1 ){
summe--;
}
// Schleifen-Bedingung
// Anweisungen
• Wiederholung der Anweisungen bis Schleifen-Bedingung falsch
 do-while-Schleife
do{
summe--;
} while( summe >= 1 );
// Anweisungen
• wie while-Schleife, Anweisungen werden jedoch mindestens
einmal durchlaufen
Java
am IAS
© 2012, IAS
28
Java Grundlagen
Ablaufsteuerung (4)
 for-Schleife
for( int i = 0; i < 10; i++ ){
System.out.println(i);
}
// Anweisungen
• zunächst Ausführung der Initialisierungsanweisung (int i =
0)
• Auswertung des Boolschen Ausdrucks ( i < 10 ):
– falls wahr, wird zunächst die Anweisung
(System.out.println(i)) und dann die
Inkrementierunganweisung (i++) ausgeführt
– Ablauf wiederholen solange Boolscher Ausdruck wahr ist
• in der for-Schleife deklarierte Variablen sind nur innerhalb der
Schleife gültig
Java
am IAS
© 2012, IAS
29
Java Grundlagen
Ablaufsteuerung (5)
 continue-Anweisung
for( int i = 0; i < 10; i++ ){
if( i > 6 )
continue;
System.out.println(i);
// continue springt hierher
}
• springt an das Ende des Schleifenrumpfes
 return-Anweisung
return i;
• beendet Methode und liefert (falls vorhanden) Rückgabewert
der Methode
Java
am IAS
© 2012, IAS
30
Java Grundlagen
Zusammenfassung
 Java ist eine objektorientierte Sprache von Sun, die für den
Einsatz in Netzen konzipiert ist
 Portabilität wird durch plattformunabhängigen Bytecode
erreicht:
“Write once, run everywhere”
 Java vereinfacht C++ (Zeiger, Präprozessor) und bietet
zusätzliche Elemente (Garbage Collection)
 mit Java können sowohl “normale” Programme als auch
Applets geschrieben werden
 Anweisungen, Variablen, Operatoren und Ablaufsteuerung
sind bis auf wenige Ausnahmen mit C/C++ identisch
 das JDK ist kostenlos verfügbar
Java
am IAS
© 2012, IAS
31
Kursüberblick
Erster Tag
Teil 1:
 Erster Überblick
 Java Grundlagen
Teil 2:
 Grundlagen der Objektorientierung
 Klassen und Objekte in Java
Java
am IAS
© 2012, IAS
32
Grundlagen der Objektorientierung
Begriffe
 Objektorientierte Analyse
• OOA ist Analysemethode, Anforderungen aus der Perspektive
der Klassen und Objekte, die sich im Vokabular des
Problembereichs finden
 Objektorientiertes Design
• OOD ist Designmethode, Prozess der objektorientierten
Zerlegung
• Notation für Beschreibung der logischen und physikalischen
wie auch statischen und dynamischen Modelle des betrachteten
Systems
 Objektorientierte Programmierung
• Implementierungsmethode, Programme als Ansammlungen
von kooperierenden Objekten
• jedes Objekte ist Exemplar (Instanz) einer Klasse
• alle Klassen sind Elemente einer Klassenhierarchie, die durch
Vererbungsbeziehungen gekennzeichnet ist
Java
am IAS
© 2012, IAS
33
Grundlagen der Objektorientierung
Hauptelemente des Objektmodells
Die folgenden vier Konzepte sind die vier Hauptelemente des
Objektmodells (nach G.Booch)
Fehlt eines dieser vier Elemente, so ist das Modell nicht
objektorientiert:




Java
am IAS
Abstraktion
Kapselung
Modularität
Hierarchie
© 2012, IAS
34
Grundlagen der Objektorientierung
Abstraktion
• konzentriert sich auf die wesentlichen Charakteristika eines
Objekts
• relativ zur Perspektive des Betrachters
Java
am IAS
© 2012, IAS
35
Grundlagen der Objektorientierung
Kapselung
• verbirgt die Details der Objekt-Implementierung
• trennt somit die Schnittstelle einer Abstraktion von ihrer
Implementierung
Java
am IAS
© 2012, IAS
36
Grundlagen der Objektorientierung
Modularität
• packt Abstraktionen in eigenständige Einheiten
• Verbindungen zwischen den Modulen sind die Annahmen, die
die Module gegenseitig übereinander anstellen
Java
am IAS
© 2012, IAS
37
Grundlagen der Objektorientierung
Hierarchie
• Abstraktionen bilden eine
Hierarchie
• Klassenstruktur: “ist-ein”Hierarchie (Vererbung)
• Objektstruktur: “Teil-von”Hierarchie (Aggregation)
Java
am IAS
© 2012, IAS
38
Grundlagen der Objektorientierung
Objekt
 allgemein: Gegenstand des Interesses (einer
Beobachtung, Untersuchung, Messung)
 Objektorientierung: individuelles Exemplar
von
Methode
1
Methode
4
Gegenständen (Auto, Roboter),
Personen (Kunde, Mitarbeiter),
Begriffen der realen Welt (Auftrag) oder
Begriffen der Vorstellungswelt (Strategie)
 Kennzeichen von Objekten:
• Identität: Objekt kann deutlich von anderen
unterschieden werden
• Daten (Variablen): Eigenschaften des Objekts
• Methoden (Operationen): Lesen und
Manipulieren von Daten
Daten
Methode
2
•
•
•
•
Methode
3
 Geheimnisprinzip: Datenzugriff nur über
Methoden
Java
am IAS
© 2012, IAS
39
Grundlagen der Objektorientierung
Klasse
 allgemein: Gruppe von Gegenständen,
Lebewesen, Begriffen mit gemeinsamen
Merkmalen
 Objektorientierung:
ändern Name
“Objekt-Schablone” für
• Objekte mit denselben Variablen
(Daten) und
• denselben Operationen (Methoden)
 Objekt-Erzeugungsmechanismus
Java
am IAS
MitarbeiterKlasse
Name
Gehalt
ändern Gehalt
Mitarbeiter-Objekt
Mitarbeiter-Objekt
ändern Name
ändern Name
Name
Name
Müller
Meier
Gehalt
Gehalt
6.000
5.000
ändern Gehalt
ändern Gehalt
© 2012, IAS
40
Grundlagen der Objektorientierung
Huhn
Klasse
Name :
Größe :
Farbe :
Eier legen()
gackern()
Berta
Kunigunde
Objekte
Elsa
Elfriede
Java
am IAS
© 2012, IAS
41
Grundlagen der Objektorientierung
Vererbung
 Stellt eine Verallgemeinerung / Spezialisierung-Hierarchie
dar
 Eine untergeordnete Klasse erbt Eigenschaften und
Verhalten einer oder mehrerer übergeordneter Klassen
 „...ist ein...“ - Beziehung
Java
am IAS
© 2012, IAS
42
Grundlagen der Objektorientierung
Vererbung
Fahrzeug
Wasserfahrzeug
Landfahrzeug
PKW
Motorrad
Amphibienfahrzeug
Schiff
Cabrio
Java
am IAS
© 2012, IAS
43
Grundlagen der Objektorientierung
Aggregation
 Stellt Beziehung zwischen einem Ganzen und seinen Teilen
dar
 „...hat ein...“ - oder „...ist Teil von...“ - Beziehung
Java
am IAS
© 2012, IAS
44
Grundlagen der Objektorientierung
Aggregation
Auto
Motor
Lenkrad
Rad
Auspuff
Zündkerze
Java
am IAS
© 2012, IAS
45
Grundlagen der Objektorientierung
Unterschied zwischen Vererbung und Aggregation:
Vererbung:
 Ein Cabrio ist ein PKW.
 Ein Cabrio ist ein Fahrzeug.
 Ein Amphibienfahrzeug ist ein Landfahrzeug und ein
Wasserfahrzeug.
Aggregation:
 Ein Auto hat einen Motor, ein Lenkrad, Sitze, ...
 Ein Computer hat eine Grafikkarte, RAM, Prozessor, ...
Java
am IAS
© 2012, IAS
46
Kursüberblick
Erster Tag
Teil 1:
 Erster Überblick
 Java Grundlagen
Teil 2:
 Grundlagen der Objektorientierung
 Klassen und Objekte in Java
Java
am IAS
© 2012, IAS
47
Klassen und Objekte in Java
Programmstruktur (1)
Überblick:
Programm
*.java
*.java
*.java
class
interface
class
...
package
Java
am IAS
© 2012, IAS
48
Klassen und Objekte in Java
Programmstruktur (2)
*.java-Dateien:
 Beinhalten Klassen- und Schnittstellendeklarationen, wobei
(genau) eine Klasse/Schnittstelle als public deklariert sein muss
• Klassen-/Schnittstellenname und Dateiname müssen übereinstimmen
(Groß- und Kleinschreibung beachten)
 Beinhalten package-Anweisung
 Beinhalten import-Anweisungen
Beispiel:
// Datei Test.java
package ias.kurs.java;
import java.awt.*;
public class Test {
...
};
Java
am IAS
© 2012, IAS
49
Klassen und Objekte in Java
Programmstruktur (3)
packages (Pakete):
 Organisationseinheit für Klassen und Schnittstellen
• beliebig tiefe Schachtelung von Paketen ist möglich,
z.B. java.awt.image
• Schachtelungsstruktur wird auf Verzeichnisse abgebildet,
z.B. java/awt/image
• ohne Angabe eines Pakets wird ein namenloses Defaultpackage
zugeordnet
 Legen Namensraum fest
• alle Klassen eines packages können einander direkt referenzieren
• Klassen anderer Pakete müssen explizit importiert (import) oder
qualifiziert (vollständige Pfadangabe) werden
• alle Klassen aus dem Paket java.lang sind standardmäßig importiert
 Zur Steuerung von Zugriffsrechten nützlich
• alle Klassen eines packages können einander sehen
Java
am IAS
© 2012, IAS
50
Klassen und Objekte in Java
Programmstruktur (4)
Java Applikation:
 Durch Einfügen einer main()-Methode in eine Klasse wird eine
Applikation vervollständigt:
// Datei: HelloWorld.java
public class HelloWorld {
public static void main( String[] args ) {
System.out.println(“Hello World!”);
}
}
 Die main()-Methode ist Einstiegspunkt in das Programm
 Die vor main() stehenden Schlüsselwörter (public static
void) sowie die Parameter (String[] args) sind immer gleich
Java
am IAS
© 2012, IAS
51
Klassen und Objekte in Java
Klassen (1)
Klasse
Überblick:
Variablen
Methoden
Konstruktoren
 Variablen (Attribute):
• primitiver Typ: int i;
• Referenz:
Auto meinAuto;
• Array:
int[] intFeld1;
 Methode:
• Operation mit möglichen Rückgabewert (return)
• eindeutig durch Methodenname und Parameter
 Konstruktor:
• Zur Instanzierung von Objekten benötigt
• Default: Klassenname(){};
• weitere Konstruktoren möglich
• kein Rückgabewert!
Java
am IAS
© 2012, IAS
52
Klassen und Objekte in Java
Klassen (2)
Variablen
// Referenz auf Strings
// Motor an/aus
Methode
void starteMotor(){
// Methode starteMotor
if(motorZustand == true)
System.out.println(“Motor ist bereits an!”);
else {
motorZustand = true;
System.out.println(“Motor ist jetzt an!”);
}
}
void zeigeDaten(){
// Methode zeigeDaten
System.out.println(“Das Motorrad ist eine”
+ farbe + “e “ + modell);
}
Methode
Klasse
Beispiel:
// Datei: Motorrad.java
class Motorrad {
String modell, farbe;
boolean motorZustand;
}
Java
am IAS
© 2012, IAS
53
Klassen und Objekte in Java
Klassen (3)
Erklärungen:
 Klassendefinition durch: class Motorrad {}
 drei Variablen:
• Referenz auf Klasse String (Zeichenkette): model und farbe
• vom Datentyp boolean: motorZustand
 zwei Methoden:
• zum Starten des Motors starteMotor();
• zur Ausgabe der Motorraddaten zeigeDaten();
 Einrückungen haben für den Compiler keine Bedeutung
 keine Trennung von Deklarationen und Implementierung
Java
am IAS
© 2012, IAS
54
Klassen und Objekte in Java
Objekterzeugung mit new
 neue Objekte werden aus bestehenden Klassen mit
new-Operator erzeugt:
String str = new String();
Motorrad m2 = new Motorrad();
 Klammern dürfen nicht weggelassen werden!
 der new-Operator weist dem Objekt Speicherplatz zu und
ruft den passenden Konstruktor (Initialisierung) auf
Beispiel:
import java.util.Date;
class DatumAnzeige {
public static void main( String args[] ){
Date d1, d2;
d1 = new Date();
System.out.println(“Datum 1: “ + d1);
d2 = new Date(“April 7 1998 11:00 AM”);
System.out.println(“Datum 2: “ + d2);
}
}
Java
am IAS
© 2012, IAS
55
Klassen und Objekte in Java
Variablen (1)
Allgemein:
 Allgemeine Deklaration einer Variable:
[schlüsselwörter]
Typ/Klasse
variablenname
 Zugriff mit Hilfe der Punkt-Notation:
einObjekt.var1
//Zugriff auf var1 in einObjekt
einObjekt.v-aussen.v-innen
// verschachtelter Aufruf
Beispiel:
import java.awt.Point;
class TestPunkt {
public static void main( String args[] ) {
Point punkt = new Point ();
punkt.x = 5;
punkt.y = 12;
System.out.println(“Punkt(x/y): “ + punkt.x
+ “/” + punkt.y”);
}
}
Java
am IAS
© 2012, IAS
56
Klassen und Objekte in Java
Variablen (2)
Klassenvariablen:
 Klassenvariablen sind im Gegensatz zu „normalen“
Variablen Bestandteil der Klasse und nicht eines Objektes,
d.h. sie sind nur einmal pro Klasse vorhanden.
 Klassenvariablen werden mit dem static Schlüsselwort
definiert:
class FamilienMitglied {
static String nachname = “Mueller”;
String vorname;
}
 der Zugriff auf Klassenvariablen kann entweder über die
Klasse oder über das Objekt erfolgen:
FamilienMitglied sohn = new FamilienMitglied();
System.out.println(FamilienMitglied.nachname ); // ueber Klasse
System.out.println(sohn.nachname );
// ueber Objekt
Java
am IAS
© 2012, IAS
57
Klassen und Objekte in Java
Variablen (3)
Referenzen:
 Java kennt keine Zeiger und Zeigerarithmetik, aber
 ähnliche Möglichkeiten durch Referenzen
 Arbeiten mit Objekten bedeutet in Java hauptsächlich
Arbeiten mit Referenzen:
Beispiel:
import java.awt.Point;
class ReferenzenTest {
public static void main( String args[] ) {
Point pt1, pt2;
pt1 = new Point(100, 100);
pt2 = pt1;
pt1.x = 200;
pt1.y = 200;
System.out.println(“pt1: “ + pt1.x + “,” + pt1.y);
System.out.println(“pt2: “ + pt2.x + “,” + pt2.y);
}
}
Java
am IAS
© 2012, IAS
58
Klassen und Objekte in Java
Variablen (4)
Erklärungen zu ReferenzenTest:
pt1
1. Referenzen pt1, pt2
anlegen
pt2
2. Point-Objekt mit Wert
(100, 100) anlegen,
Referenz pt1 zeigt auf Objekt
3. Referenz pt2 zeigt auf selbes Objekt wie pt1
4. Objektwerte werden mit Hilfe von pt1 geändert
5. Werteausgabe mit Hilfe von pt1 und pt2
Java
am IAS
© 2012, IAS
Point Objekt
x: 200
y: 200
59
Klassen und Objekte in Java
Variablen (5)
Arrays:
 Arrays können beliebig viele Elemente eines Datentyps speichern
 verschiedene Datentyp-Elemente in einem Array sind nicht
möglich
 Deklaration
String[] words;
Point[] hits;
oder
String words[];
Point hits[];
 Erstellen des Array-Objekts
String[] words = new String[10];
String[] farbe = {“weiss”, “schwarz”, “rot”};
• Array kann mit new (s. words) oder mit Initialisierungswerten
(s. farbe) erstellt werden
• mit new werden die Array-Elemente automatisch initialisiert
(Initialisierungswerte (abhängig vom Datentyp): 0, false, ““)
Java
am IAS
© 2012, IAS
60
Klassen und Objekte in Java
Variablen (6)
Arrays:
 Zugriff auf Array-Elemente
String[] words = new String[10];
words[0] = “Java”;
 ein Array der Größe n hat die Indizes [0] bis [n-1]
 Zugriffe außerhalb des Arrays werden von Compiler und von der
Laufzeitumgebung erkannt, z.B. words[10] = “Error”
 die Instanzenvariable length enthält die Größe des Arrays
int laenge = words.length; // gibt 10 aus
 durch Schachtelung können mehrdimensionale Arrays
erzeugt werden:
int koord[][] = new int[5][10];
koord[0][0] = 4;
koord[4][9] = 123;
Java
am IAS
© 2012, IAS
61
Klassen und Objekte in Java
Methoden (1)
Definition:
 eine Methode besteht aus mindestens vier Teilen:
• Name der Methode
• Parameter (Argumentliste)
• Datentyp, der von der Methode zurückgegeben wird (void: kein Rückgabewert)
Signatur
• Methodenkörper
returntype methodenname(typ1 arg1, typ2 arg2, ...){
...
}
 optional können Zugriffsrechte und Ausnahmen festgelegt werden
 mit this auf das aktuelle Objekt zugegriffen werden
t = this.x;
// Zuweisung Objektvariable x
this.methode1(this); // Methodenaufruf mit this
return this;
// Rueckgabe des aktuellen Objekts
Java
am IAS
© 2012, IAS
62
Klassen und Objekte in Java
Methoden (2)
Methodenaufruf:
 Methoden werden mit Hilfe der Punkt-Notation und
Argumentliste (in Klammern) aufgerufen:
einObjekt.methode1(arg1, arg2, arg3);
 verschachtelte Methodenaufrufe sind möglich:
einObjekt.var1.methode1(arg1, arg2);
 in der Parameterliste werden primitive Datentypen als
Wert,
alle anderen als Referenz an die Methode übergeben,
d.h. wird ein referenziertes Objekt von der Methode
verändert, so bleibt die Veränderung nach Beendigung
der Methode bestehen
Java
am IAS
© 2012, IAS
63
Klassen und Objekte in Java
Methoden (3)
Beispiel:
...
class RefArgument {
int One2Zero( int arg[]) {
int count = 0;
for( int i = 0; i < arg.length; i++ ) {
if(arg[i] == 1) {
count++;
arg[i] = 0;
}}
return count;
}}
public static void main (String[] args) {
int arr[] = {1, 5, 3, 1, 1, 6, 8, 1};
int nEins;
RefArgument test = new RefArgument();
for( int i = 0; i < arr.length; i++ )
System.out.print(arr[i] + “ “);
nEins = test.One2Zero(arr);
System.out.println(“Gefundene Einsen: “ + nEins);
for( int i = 0; i < arr.length; i++ )
System.out.print(arr[i] + “ “);
}
...
Java
am IAS
© 2012, IAS
64
Klassen und Objekte in Java
Methoden (4)
Klassenmethoden:
 Klassenmethoden wirken sich (wie Klassenvariablen) auf
ganze Klassen und nicht nur auf einzelne Objekte aus
 werden dort benützt, wo Objekte nicht vorausgesetzt sind,
z.B. Klasse Math der Java-Klassenbibliothek:
float root = Math.sqrt(453.2);
 Klassenmethoden werden mit dem static Schlüsselwort
definiert:
static int max( int arg1, int arg2) {...}
 Regel: Alle Methoden, die von allgemeiner Nützlichkeit
sind und nicht auf einzelne Objekte anwendbar sind, sollten
als Klassenmethoden definiert werden.
 Frage: Kennen Sie bereits eine Klassenmethode?
 Antwort: Die main-Methode
Java
am IAS
© 2012, IAS
65
Klassen und Objekte in Java
Vergleichen von Objekten
 die meisten Operatoren sind nur auf primitive Datentypen
(int, byte, char), aber nicht auf Objekte anwendbar
 Ausnahme: == und != prüfen Objekt(un)gleichheit,
aber keine Werte(un)gleichheit
 Wertevergleich in Klasse String durch Methode equals():
Beispiel:
class EqualsTest {
public static void main(String args[]) {
String str1, str2;
str1 = “Java macht Spass!”;
str2 = str1;
System.out.println(“Gleiches Objekt? “ +
(str1 == str2));
str2 = new String(str1);
System.out.println(“Gleiches Objekt? “ +
(str1 == str2));
System.out.println(“Gleicher Wert? “ +
str1.equals(str2));
}
}
Java
am IAS
© 2012, IAS
// wahr
// falsch
// wahr
66
Klassen und Objekte in Java
Kopieren von Objekten
 mit copy() kann ein Objekt in eine Instanz derselben
Klasse kopiert werden
 im kopierten Objekt enthaltene Objekte werden nicht
mitkopiert
Point pt1, pt2, pt3;
pt1 = new Point(0, 0);
pt2 = new Point(100, 100);
pt2.copy(pt1); // alle pt1-Werte werden in pt2 kopiert
 mit clone() kann eine neue Instanz der Quellobjekt-Klasse
erzeugt und mit den Quellobjektwerten initialisiert werden
pt3 = (Point) pt2.clone();
Java
am IAS
© 2012, IAS
67
Klassen und Objekte in Java
Zusammenfassung
 Paradigma Objektorientierung:
•
•
•
•
Abstraktion
Kapselung
Modularität
Hierarchie
 Struktur eines Java-Programms:
Klassen und Pakete  Dateien und Verzeichnisse
 Aufbau einer Klasse:
objekt- und klassenbezogene Variablen und Methoden
 Arbeiten mit Objekten heißt arbeiten mit Referenzen
 Elementare Operationen auf Objekten:
Erzeugen, Vergleichen und Kopieren
Java
am IAS
© 2012, IAS
68
Kursüberblick
Zweiter Tag
Teil 1:
 Overloading, Konstruktoren, Vererbung
 Ausnahmebehandlung
Teil 2:
 Datenstreams und Dateien
Java
am IAS
© 2012, IAS
69
Overloading, Konstruktoren, Vererbung
Überladen von Methoden (1)
 Überladen von Methoden (Overloading): gleicher
Methodenname, aber unterschiedliche Argumentliste
(Anzahl und Typ)
 in Java können nur Methoden überladen werden
(Operatoren-Overloading ist nicht möglich)
 Überladen bewirkt Vereinfachung der Schnittstelle: nur ein
Methodenname muss gelernt werden, richtige Methode
wird in Abhängigkeit von Argumentliste aufgerufen
 Wichtig: Rückgabetyp kann beim Überladen nicht zur
Unterscheidung verwendet werden
Java
am IAS
© 2012, IAS
70
Overloading, Konstruktoren, Vererbung
Überladen von Methoden (2)
Beispiel - Initialisierung mit Methoden
class Rechteck1 {
int x1 = 0;
// Punktkoordinaten oben rechts
int y1 = 0;
int x2 = 0;
// Punktkoordinaten unten links
int y2 = 0;
Rechteck initRecht(int x1, int y1, int x2, int y2) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
return this;
}
}
Java
am IAS
Rechteck initRecht(Point obLinks, Point unRechts) {
x1 = obLinks.x;
y1 = obLinks.y;
x2 = unRechts.x;
y2 = unRechts.y;
return this;
}
© 2012, IAS
71
Overloading, Konstruktoren, Vererbung
Konstruktor (1)
 besondere Methodenart, die bei der Instanziierung einer
Klasse (new) automatisch aufgerufen wird
 Konstruktoren bestimmen die Initialisierung der Objekte
 Ablauf der Instanziierung mit new:
• Speicherplatz für Objekt reservieren
• Initialisierung der Instanzvariablen mit Defaultwerten
• Konstruktor-Aufruf
 Konstruktor-Definition:
• gleicher Name wie Klasse
• kein Rückgabewert!
 Konstruktoren können wie Methoden überladen werden
 Aufräumarbeiten können mit der finalize-Methode
veranlasst werden (Dekonstruktor)
Java
am IAS
© 2012, IAS
72
Overloading, Konstruktoren, Vererbung
Konstruktor (2)
Beispiel - Initialisierung mit Konstruktoren:
class
int
int
int
int
Rechteck {
x1 = 0;
y1 = 0;
x2 = 0;
y2 = 0;
// Punktkoordinaten oben rechts
// Punktkoordinaten unten links
Rechteck(int x1, int y1, int x2, int y2) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
}
Java
am IAS
Rechteck(Point obLinks, Point unRechts) {
x1 = obLinks.x;
y1 = obLinks.y;
x2 = unRechts.x;
y2 = unRechts.y;
}
© 2012, IAS
73
Overloading, Konstruktoren, Vererbung
Vererbung (1)
 ermöglicht Hierarchisierung von Klassen
 übergeordnete Superklassen vererben Variablen und
Methoden
an Subklassen, d.h. Subklassen erben von Superklassen
 in Java erben alle Klassen implizit von der Klasse Object,
welche allgemeingültige Verhaltensregeln definiert
Klassenhierarchie:
C
Java
am IAS
A
Hierarchie-Wurzel: Klasse A
(in Java Klasse Object)
B
abgeleitete Klasse B, erbt von A
D
E
© 2012, IAS
abgeleitete Klassen C, D und E
erben jeweils von B und A
74
Overloading, Konstruktoren, Vererbung
Vererbung (2)
 Vererbungsvarianten: Einfach- und Mehrfachvererbung
 Einfachvererbung: jede Klasse hat höchstens eine
Superklasse
 Mehrfachvererbung: jede Klasse kann von mehreren
Superklassen erben (in Java nicht erlaubt)
Einfachvererbung
(Baum):
Java
am IAS
Mehrfachvererbung
(Netz):
© 2012, IAS
75
Overloading, Konstruktoren, Vererbung
Vererbung (3)
Beispiel:
class Punkt {
int x;
// x-Koordinate
int y;
// y-Koordinate
void printInfoPunkt() {
System.out.println(“Punkt: “ + x + “/“ + y);
}
}
class Pixel extends Punkt {
String farbe;
// Punktfarbe
}
void printInfoPixel() {
System.out.println(“Pixel: “ + x + “/” + y);
System.out.println(“Pixelfarbe: “ + farbe”);
}
 Subklasse erbt automatisch alle Variablen und Methoden
der Superklasse
 Regel: Ableiten macht nur Sinn, wenn eine
allgemeingültige Klasse durch neue Methoden/Variablen
erweitert/verändert werden soll
Java
am IAS
© 2012, IAS
76
Overloading, Konstruktoren, Vererbung
Vererbung (4)
 Wie funktioniert ein Methodenaufruf in Java?
• zunächst in der aktuellen Klasse nach passender
Methodendefinition suchen
• falls Suche in aktueller Klasse erfolglos, Aufruf in der
Klassenhierarchie nach oben weiterreichen
 Konsequenzen:
• bereits definierte Methoden können in Subklassen ohne
Codeduplizierung wiederverwendet werden
• die Methode einer Superklasse kann in der Subklasse entweder
unverändert übernommen oder überschrieben/redefiniert
werden
 Wichtig: Überschreiben (Signatur gleich) nicht mit
Überladen (Argumentliste unterschiedlich) verwechseln!
Java
am IAS
© 2012, IAS
77
Overloading, Konstruktoren, Vererbung
Methoden überschreiben (1)
 Methoden mit identischer Signatur wie in Superklasse, aber
unterschiedliche Methodenkörper
 Warum überschreibt man Methoden?
• um geerbte Methoden vollständig zu ersetzen
• um geerbte Methoden zu erweitern
Beispiel:
class PrintKlasse {
int x = 0;
int y = 1;
void drucken() {
System.out.println(“x, y = “ + x + “ “ + y);
}
}
class PrintSubKlasse extends PrintKlasse {
int z = 3;
void drucken() { // geerbte Methode ersetzen
System.out.print(“x, y, z = “ + x + “ “ + y + “ “ + z);
}
}
Java
am IAS
© 2012, IAS
78
Overloading, Konstruktoren, Vererbung
Methoden überschreiben (2)
 das Schlüsselwort super ermöglicht den Zugriff auf die
“verdeckte” Orginalmethode in der Superklasse
Beispiel:
class PrintKlasse {
int x = 0;
int y = 1;
void drucken() {
System.out.println(“x, y = “ + x + “ “ + y);
}
}
class PrintSubKlasse extends PrintKlasse {
int z = 3;
void drucken() { // geerbte Methode erweitern
super.drucken();
System.out.print(“z = “ + z);
}
}
Java
am IAS
© 2012, IAS
79
Overloading, Konstruktoren, Vererbung
Konstruktoren überschreiben?
 Konstruktoren werden grundsätzlich nicht vererbt und
können somit auch nicht überschrieben werden
 beim Konstruktoraufruf für ein Objekt werden automatisch
alle Konstruktoren der Superklassen aufgerufen
 mit dem Schlüsselwort super wird der “richtige”
Konstruktor der Superklasse aufgerufen
Beispiel:
class BenannterPunkt extends Point{
String name;
}
Java
am IAS
BenannterPunkt(int x, int y, String name) {
super(x, y);
this.name = name;
}
© 2012, IAS
80
Overloading, Konstruktoren, Vererbung
Zugriffsrechte für Klassen
 in Java wird die Kapselung (OO-Hauptelement) mit Hilfe
von Schlüsselwörtern (modifier) verwirklicht
 für Klassen stehen zwei Zugriffsebenen zur Verfügung:
public und package
public
 mit public definierte Klassen sind für alle anderen Klassen
sichtbar
package
 ohne zusätzliche Angaben sind Klassen automatisch nur
innerhalb des gleichen Pakets sichtbar (kein packageSchlüsselwort notwendig)
Java
am IAS
© 2012, IAS
81
Overloading, Konstruktoren, Vererbung
Zugriffsrechte für Methoden und Variablen (1)
 in Java stehen für Methoden und Variablen 4
Zugriffsebenen zur Verfügung: public, package,
protected und private
 das Zugriffs-Schlüsselwort steht vor dem Methoden/Variablen-namen und wird jeweils einzeln vereinbart
public
 mit public definierte Methoden/Variablen sind für alle
anderen Klassen sichtbar, d.h. es gibt keine
Zugriffsbeschränkungen
Beispiel:
public class OffeneKlasse {
public int offenesInt;
public String offenerString;
}
Java
am IAS
public float offeneMethode() {
...
}
© 2012, IAS
82
Overloading, Konstruktoren, Vererbung
Zugriffsrechte für Methoden und Variablen (2)
package
 mit dem package-Schlüsselwort werden Klassen
in Pakete gruppiert
 falls explizit kein Zugriffsebene definiert wird gilt
automatisch die package-Schutzebene (kein packageSchlüsselwort)
 alle Methoden/Variablen dieser Ebenes sind nur innerhalb
des gleichen Pakets sichtbar
Beispiel:
package paket1;
public class PaketKlasse {
int paketInt = 2;
String paketString = “a bis z”;
}
Java
am IAS
float paketMethode() {
...
}
© 2012, IAS
83
Overloading, Konstruktoren, Vererbung
Zugriffsrechte für Methoden und Variablen (3)
protected
 nur Elemente der gleichen und davon abgeleiteter Klassen
haben Zugriff
Beispiel:
public class ProtectedKlasse {
protected int protInt = 4;
protected String pstr = “a bis z”;
protected float protectedMethod() {
...
}
}
public class GleichesPaket {
public void test() {
ProtectedKlasse pk = new ProtectedKlasse();
System.out.println(pk.pstr);
pk.protectedMethod();
}
Nicht erlaubt!
}
Java
am IAS
© 2012, IAS
84
Overloading, Konstruktoren, Vererbung
Zugriffsrechte für Methoden und Variablen (4)
private
 strengster Schutz: Methoden und Variablen nur innerhalb
der eigenen Klasse zugreifbar
 im Sinne einer umfassenden Kapselung sollten Daten
möglichst private deklariert werden
 spezielle get/set-Methoden ermöglichen den kontrollierten
Zugriff auf die private-Elemente
Beispiel:
public class Kreis {
private int x, y, radius;
public int getRadius() {
return radius;
}
public int setRadius( int value ) {
radius = value;
return radius;
}
}
Java
am IAS
© 2012, IAS
85
Overloading, Konstruktoren, Vererbung
Zugriffsrechte im Überblick
Klasse
public
für alle Klassen (auch außerhalb des
Pakets)
nur für Klassen innerhalb des Pakets
Methode/
Variable
public
für alle Klassen (auch außerhalb des
Pakets)
nur für Klassen innerhalb des Pakets
protected
private
abgeleitete Klassen und Klassen
innerhalb des Pakets
nur für eigene Klasse
Empfehlung:
• Datenelemente (Variablen) private
• Methoden protected
• get-/set-Methoden für Zugriff auf private Daten definieren
Java
am IAS
© 2012, IAS
86
Overloading, Konstruktoren, Vererbung
final-Modifier (1)
 mit dem final-Schlüsselwort können zusätzl. Einschränkungen
definiert werden, die Compiler-Optimierungen ermöglichen
Klassen
 mit final deklarierte Klassen können nicht abgeleitet werden
public final class FinalKlasse1 { ... }
Methoden
 final-Methoden können in Subklassen nicht überschrieben
werden
public class FinalKlasse2 {
public final void finalMethode() {
...
}
}
 alle Methoden in einer final-Klasse sind final
 alle private-Methoden sind implizit final
Java
am IAS
© 2012, IAS
87
Overloading, Konstruktoren, Vererbung
final-Modifier (2)
Variablen
 mit final werden in Java Konstanten deklariert
public class FinalKlasse3 {
public final int CONSTINT = 243;
public final String CSTR = “Kaffee”;
}
 der konstante Wert wird während der Deklaration
zugewiesen
 lokale Variablen können nicht als final deklariert werden
while( summe <= 10 ) {
...
final int LOCALINT;
...
}
Java
am IAS
Nicht erlaubt!
© 2012, IAS
88
Overloading, Konstruktoren, Vererbung
abstract-Modifier
 abstrakte Klassen sind ein Design-Element: mit abstract
gekennzeichnete Klassen können nicht instanziiert werden
 in einer abstrakten Klasse werden Methoden ohne
Implementierung (Methodenkörper) mit abstract
gekennzeichnet
Beispiel:
public abstract class AbstrakteKlasse {
int i;
public void tuWas() {
...
}
}
public abstract void absMethode();
Object a = new AbstrakteKlasse();
Nicht erlaubt!
Java
am IAS
© 2012, IAS
89
Overloading, Konstruktoren, Vererbung
Schnittstellen (1)
Problem: “Tierhierarchie”
Tier
Säugetier
Merkmale:
+ lebende Jungen
+ Fell
Vogel
+ legen Eier
+ Schnabel
Wohin gehört das Schnabeltier (Fell & Schnabel)?
Ziel:
gemeinsames Verhalten verwenden, ohne
Codeduplizierung
Lösung:
a) Mehrfachvererbung: in Java nicht erlaubt
b) Schnittstellen
Java
am IAS
© 2012, IAS
90
Overloading, Konstruktoren, Vererbung
Schnittstellen (2)
 Schnittstelle: Sammlung von abstrakten
Methodendeklarationen
und Konstanten ohne Methodenimplementierungen
und Instanzvariablen
Definition
 Deklaration mit Schlüsselwort interface
 Schnittstellenmethoden sollten als public abstract und
Konstanten als public static final deklariert sein
 Schnittstellen gehören zu Paketen und können andere
Pakete importieren
 Schnittstellen können mit extends in Hierarchien
organisiert werden
public interface Iface {
public static final int incr = 10;
public static final long maxNum = 1000000;
public abstract void doIt();
}
Java
am IAS
© 2012, IAS
91
Overloading, Konstruktoren, Vererbung
Schnittstellen (3)
Anwendung
 Schnittstellen werden durch das Schlüsselwort implements
in eine Klassendefinition eingebunden
 alle in der Schnittstelle deklarierten Methoden müssen von
der einbindenden Klasse implementiert werden
 eine Klasse darf mehrere Schnittstellen implementieren
 Regel: Schnittstellen können mit wenigen Ausnahmen
überall dort verwendet werden, wo auch Klassen verwendet
werden
Beispiel:
public interface Fruchtartig {
public abstract void verfallen();
public abstract void auspressen();
}
public class Frucht implements Fruchtartig {
private Color farbe;
public void verfallen() { ... }
public void auspressen() { ... }
}
Java
am IAS
© 2012, IAS
92
Kursüberblick
Zweiter Tag
Teil 1:
 Overloading, Konstruktoren, Vererbung
 Ausnahmebehandlung
Teil 2:
 Datenstreams und Dateien
Java
am IAS
© 2012, IAS
93
Ausnahmebehandlung
Ausnahmefälle (1)
 Design und Implementierung von Klassen und Methoden
beschreiben normalen Ablauf, nicht jedoch den Ablauf in
“Ausnahmefällen”
 Java bietet die Möglichkeit, Ausnahmefälle zu deklarieren und
zu behandeln, d.h. ungewöhnliche Situationen werden
handhabbar, ohne den normalen Quellcode aufzubrechen
 Ausnahmefälle sind Objekte, die in einer Klassenhierarchie
organisiert sind
 Java kennt drei Arten von Ausnahmefällen, die alle von der
Superklasse Throwable abgeleitet sind:
• Ausnahmen (Exception): ClassNotFound, FileNotFound
• Laufzeitausnahmen (RuntimeException):
IndexOutOfBounds
• Fehler (Error): OutOfMemory, StackOverflow
Java
am IAS
© 2012, IAS
94
Ausnahmebehandlung
Ausnahmefälle (2)
Ausnahmefälle deklarieren
 Ausnahmefälle, die innerhalb einer Klasse oder Methode
auftreten können, werden mit dem throws-Schlüsselwort
deklariert
public class AusnahmeKlasse {
public void ausnahmeMethode1() throws AusnameFall1 {
...
}
 Fehler und Laufzeitausnahmen müssen nicht deklariert
werden
 Wenn in einer Methode Ausnahmen auftreten können, müssen
diese a) potentiellen Aufrufern mit der throws-Deklaration
explizit bekanntgegeben werden oder b) von der Methode
selbst gehandhabt werden
Java
am IAS
© 2012, IAS
95
Ausnahmebehandlung
Ausnahmefälle (3)
Ausnahmen handhaben (Exception Handling)
 Ausnahmefälle werden mit den try/catch-Anweisungen
gehandhabt
public void methode2() {
AusnahmeKlasse aKlasse = new AusnahmeKlasse();
try {
// ausnahmeträchtiger Code
aKlasse.ausnahmeMethode1();
} catch ( AusnahmeFall1 ) {
...
}
}
 eingetretene Ausnahmen werden in der MethodenAufrufhierarchie nach oben gereicht, bis sie a) behandelt
werden oder b) das Programm mit einer Fehlermeldung
abgebrochen wird
Java
am IAS
© 2012, IAS
96
Ausnahmebehandlung
Ausnahmefälle (4)
Ausnahmen auswerfen
 mit Hilfe der throw-Anweisung werden Ausnahmen
“ausgeworfen”
public class AusnahmeKlasse {
public void ausnahmeMethode1() throws AusnahmeFall1 {
// normaler Code
if( ungewoehnlicherVorfall() ) {
throw new AusnahmeFall1();
// hier wird die Ausfuehrung abgebrochen
}
}
}
 tritt eine Ausnahme ein, so werden alle Anweisungen hinter
der throw-Anweisung ignoriert
Java
am IAS
© 2012, IAS
97
OO-Konzepte & Ausnahmebehandlung
Zusammenfassung
 Überladen von Methoden
 Konstruktoren
 Vererbung
 Überschreiben von Methoden/Konstruktoren
 Zugriffsrechte für Klassen, Methoden und Variablen
 final-Modifier
 abstrakte Klassen und Methoden
 Schnittstellen
 Behandlung von Ausnahmen
Java
am IAS
© 2012, IAS
98
Kursüberblick
Zweiter Tag
Teil 1:
 Overloading, Konstruktoren, Vererbung
 Ausnahmebehandlung
Teil 2:
 Datenstreams und Dateien
Java
am IAS
© 2012, IAS
99
Datenstreams und Dateien
Datenstreams




Informationen aus einer Quelle einlesen
Informationen an ein Ziel ausgeben
z.B. Datei, Bildschirm
allgemeiner Ablauf:
Lesen
Einen Stream öffnen
Solange noch Informationen vorhanden
Information lesen
Stream schließen
Schreiben
Einen Stream öffnen
Solange noch Informationen vorhanden
Information schreiben
Stream schließen
Java
am IAS
© 2012, IAS
100
Datenstreams und Dateien
Datenstreams
 von Quelle/Ziel muss nur der Name bekannt sein
 Package java.io
 Basis: abstrakte Klassen
JDK 1.0 (8bit)
InputStream
OutputStream
seit JDK 1.1 (16 bit)
Reader
Writer
notwendig wegen 16bit Unicode
 höhere Interpretationsebenen darauf aufbauend möglich
(z.B. Serialisation 1.1. --> 1.0)
 Fehlerbehandlung: IOExceptions
Unterklasse von Exception
behandelt alle bei Datenstreams möglichen Ein- und
Ausgabefehler
Java
am IAS
© 2012, IAS
101
Datenstreams und Dateien
Datenstreams
 Trennung der Klassenhierarchie in
- Eingabe-(Input-)Streams
und
- Ausgabe-(Output-)
Streams
 Trennung der Klassenhierarchie in
- Charakter-Streams
(Zeichen) und
- Byte-Streams
(Binärdaten)
Java
am IAS
© 2012, IAS
102
Datenstreams und Dateien
Überblick Zeichen-Streams (Character Streams)
BufferedReader
LineNumberReader
CharArrayReader
InputStreamReader
FileReader
FilterReader
PushbackReader
Reader
PipedReader
StringReader
Lesen/Schreiben
Java
am IAS
Daten verarbeiten
© 2012, IAS
103
Datenstreams und Dateien
Überblick Zeichen-Streams (Character Streams) (Forts.)
BufferedWriter
CharArrayWriter
OutputStreamWriter
Writer
FileWriter
FilterWriter
PipedWriter
StringWriter
PrintWriter
Lesen/Schreiben
Java
am IAS
Daten verarbeiten
© 2012, IAS
104
Datenstreams und Dateien
Überblick Byte-Streams
FileInputStream
InputStream
PipedInputStream
LineNumberInputStream
FilterInputStream
DataInputStream
ByteArrayInputStream
BufferedInputStream
SequenceInputStream
PushbackInputStream
StringBuffferInputStream
ObjectInputStream
FileOutputStream
OutputStream
PipedOutputStream
PrintStream
FilterOutputStream
DataOutputStream
ByteArrayOutputStream
BufferedOutputStream
ObjectOutputStream
Java
am IAS
© 2012, IAS
105
Datenstreams und Dateien
EingabeStreams (InputStream) und Leser (Reader)
 Grundlage aller Eingabeoperationen von Java
 InputStream (Reader) definiert die Grundlagen für das
Lesen eines Byte-Streams (Zeichen-Datenstream) von
einer Quelle.
 Identität der Quelle und Art der Erstellung und Beförderung
von Bytes (Zeichen) nicht relevant
 Reader und seine Unterklassen sind weitgehend analog der
Klasse InputStream, sie benutzen nur Zeichen anstelle
Bytes.
 Alle auf InputStream (Reader) aufbauende DatenstreamKlassen besitzen die auf den folgenden drei Folien
vorgestellten Methoden.
Java
am IAS
© 2012, IAS
106
Datenstreams und Dateien
EingabeStreams und Leser (Forts.)
Methode read(): Liest Bytes (Zeichen) von einer Quelle
 wartet, bis alle angeforderten Eingaben zur Verfügung stehen
--> Threads
notw. da abstrakte
 import java.io.* notwendig
Klasse
Beispiel (versucht, den gesamten Puffer zu füllen)
InputStream s = getAnInputStream();
byte[]
bbuffer = new byte[256];
// beliebige Größe
if (s.read(bbuffer) != bbuffer.length)
System.out.println(“Weniger erhalten als erwartet.”);
 read() liefert Anzahl der gelesen Byte (Zeichen) zurück
bzw. -1 zurück, wenn der Eingabestring zu Ende oder leer ist.
 weitere read() Methoden, um einen Bereich des Puffers
zu füllen oder einzelne Bytes (Zeichen) einzulesen
Java
am IAS
© 2012, IAS
107
Datenstreams und Dateien
EingabeStreams und Leser (Forts.)
 skip(anz): überspringt anz Bytes (Zeichen) im Datenstream
 available(): gibt an, wieviele Bytes (Zeichen) ein
Datenstream momentan umfasst.
Antwort nicht immer möglich.
 ready(): gibt an, ob weitere Bytes (Zeichen) bereitstehen
Antwort nicht immer möglich.
 mark() und reset(): Markierung einer Position im
Datenstream und Zurücksetzen auf die Position, um die Bytes
(Zeichen) erneut einzulesen
Wird nicht von allen Datenstreams unterstützt
--> Methode markSupported(): prüft, ob Markierung möglich
Java
am IAS
© 2012, IAS
108
Datenstreams und Dateien
EingabeStreams und Leser (Forts.)
 Methode close(): Schließen des Datenstreams und Freigabe
der Ressourcen
Beispiel
Reader
r = makeAReader();
if (r != null) {
try {
...
} finally {
r.close();
}
}
// r benutzen
Durch Verwendung von finally wird der Datenstream auf
jeden Fall geschlossen. Durch Prüfung auf null wird der
Misserfolg bei der Erzeugung des Datenstreams abgefangen.
Java
am IAS
© 2012, IAS
109
Datenstreams und Dateien
ByteArrayInputStream und CharArrayReader
 lesen Byte-(Zeichen-)Arrays aus dem Speicher
Beispiel
byte[] bbuffer = new byte[256];
fillBuffer(bbuffer);
// Puffer (Datenquelle)
// irgendwie füllen
InputStream s = new ByteArrayInputStream(bbuffer);
// Erstellen(!) eines Streams
StringBufferInputStream und StringReader
 analog ByteArrayInputStream bzw. CharArrayReader, nur
dass Zeichenketten statt Byte-(Zeichen-)Arrays verwendet
werden.
PipedInputStream und PipedReader
 zweiwegige Kommunikation zwischen Threads
Java
am IAS
© 2012, IAS
110
Datenstreams und Dateien
PushbackInputStream und PushbackReader
 Parser: einzelne Bytes (Zeichen) werden zurückgeschrieben
ObjectInputStream
 Serilisation: Umwandlung eines Objektes in einen
Datenstream (zusammen mit ObjectOutputStream)
FileInputStream und FileReader
 Datenstream aus einer Datei
Beispiel
Reader r = new FileReader(new File(“/Pfad/datei.ext“));
 FileReader ist triviale Unterklasse der Klasse
InputStreamReader:
kapselt beliebigen Eingabestream und wandelt ihn in einen
Zeichenstream um
Java
am IAS
© 2012, IAS
111
Datenstreams und Dateien
SequenceInputStream
 ermöglicht die Bildung zusammengesetzter Datenstreams
Beispiel
InputStream s1 = new FileInputStream(“dat1.ext“));
InputStream s2 = new FileInputStream(“dat2.ext“));
InputStream s
= new SequenceInputStream(s1, s2);
 Mit read() wird nacheinander aus jedem beteiligten Stream
gelesen.
 Wird eingesetzt bei Methoden, die nur einen InputStream
erwarten.
Java
am IAS
© 2012, IAS
112
Datenstreams und Dateien
FilterInputStream und FilterReader
 zur Verarbeitung der durchfließenden Bytes (Zeichen)
 besitzen Unterklassen für bestimmte Verarbeitungen
 können verschachtelt werden
Beispiel
InputStream
FilterInputStream
s = getInputStream();
s1 = new FilterInputStream(s)
Bei einer Leseoperation auf s1 wird die Anfrage an s
übergeben.
 FilterReader ist eine abstrakte Klasse!
 Zwei Filtertypen (Stream/Reader) lassen sich nicht mischen.
Java
am IAS
© 2012, IAS
113
Datenstreams und Dateien
BufferedInputStream und BufferedReader
 verwenden ein gepuffertes Byte-(Zeichen-)Array
 effizient, Vorauslesen von Daten möglich
Beispiel (Gepufferter FileReader)
Reader r = new BufferedReader(new FileReader(“dat.ext“));
 Möglichkeit, mit readLine() Zeichenzeilen zu lesen (mit ‘\r‘,
‘\n‘ oder ‘\r\n‘ abgeschlossen):
BufferedReader
String
Java
am IAS
r = new BufferedReader(new
FileReader(“dat.ext“));
line = r.readLine; // Nächste Zeile
// einlesen
© 2012, IAS
114
Datenstreams und Dateien
DataInputStream
 besitzt Methoden für komplexere Datenstreams und zum
Lesen primitiver Datentypen
void
boolean
int
readFully(byte[] bbuffer) throws IOException;
readBoolean() throws IOException;
readInt() throws IOException;
String
readLine() throws IOException; // Zeilen lesen
...
 EOFException, wenn das Ende eines Streams erreicht wird:
DataInputStream s = new DataInputStream(getAnInpStream());
try {
while (true) {
byte b = (byte) s.readByte();
... // b verarbeiten
}
} catch (EOFException e) {
... // Ende erreicht
}
Java
am IAS
© 2012, IAS
115
Datenstreams und Dateien
LineNumberInputStream und LineNumberReader
 ermöglichen eine Zeilennummerierung
Beispiel
LineNumberReader
String
r = new LineNumberReader(new
FileReader(“dat.ext“));
line;
while ((line = r.readLine()) != null) {
...
// Zeilen verarbeiten
System.out.println(r.getLineNumber() + “ Zeilen.“);
}
 Beim Verschachteln von Streams auf die Reihenfolge achten.
Filterstreams und Puffer immer in die Mitte der Kette.
Beispiel
new DataInputStream(new LineNumberInputStream(
new BufferedInputStream(new FileInputStream(“dat.ext“))));
Java
am IAS
© 2012, IAS
116
Datenstreams und Dateien
AusgabeStreams (OutputStream) und Writer
 Zu (fast) jedem InputStream bzw. Reader existiert ein
passender OutputStream bzw. Writer.
 OutputStream (Writer) sind abstrakte Klassen, welche die
Grundlagen der Unterklassen für das Schreiben eines ByteStreams (Zeichen-Datenstream) in ein Ziel definieren.
 Writer und seine Unterklassen sind analog der Klasse
OutputStream, sie benutzen nur Zeichen anstelle Bytes.
 Alle auf OutputStream (Writer) aufbauende DatenstreamKlassen besitzen die auf der folgenden Folie vorgestellten
Methoden.
Java
am IAS
© 2012, IAS
117
Datenstreams und Dateien
Ausgabestreams (OutputStream) und Writer (Forts.)
Methode write(): Schreibt Bytes (Zeichen) in ein Ziel
Beispiel
OutputStream s = getAnOutputStream();
byte[]
bbuffer = new byte[256];
// beliebige Größe
fill(bbuffer);
// Auszugebende Daten
s.write(bbuffer);
 weitere write() Methoden, um einen Bereich des Puffers
auszugeben oder einzelne Bytes (Zeichen) zu schreiben
 Methode flush(): leert den Ausgabestream und schreibt alle
gepufferten Daten aus
 Methode close(): schließt den Datenstream
Java
am IAS
© 2012, IAS
118
Datenstreams und Dateien
ByteArrayOutputStream und CharArrayWriter
 schreibt Byte-(Zeichen-)Arrays in den Speicher
Beispiel
Writer w = new CharArrayWriter();
w.write(‘\n‘);
 size() gibt aktuelle Anzahl Bytes (Zeichen) im
geschriebenen Byte-(Zeichen-) Array an.
StringWriter
 analog CharArrayWriter, nur dass Zeichenketten statt
Zeichen-Arrays verwendet werden.
PipedOutputStream und PipedWriter
 zweiwegige Kommunikation zwischen Threads
Java
am IAS
© 2012, IAS
119
Datenstreams und Dateien
FileOutputStream und FileWriter
 Datenstream in eine Datei
Beispiel
import java.io.*;
public class FileWriterBeispiel {
public static void main(String[] args) {
String str = "Hallo Welt.\r\n";
FileWriter fw;
try {
fw = new FileWriter(“welt.txt");
fw.write(str);
fw.close();
} catch (IOException e) {
System.out.println("Fehler beim Dteierstellen");
}
}
}
Java
am IAS
© 2012, IAS
120
Datenstreams und Dateien
FilterOutputStream und FilterWriter
 zur Verarbeitung der durchfließenden Bytes (Zeichen)
 können verschachtelt werden
BufferedOutputStream und BufferedWriter
 verwenden ein gepuffertes Byte-(Zeichen-)Array
Writer w = new BufferedWriter(new FileWriter(“dat.ext“));
 Möglichkeit, mit newLine() systemabhängige Zeichenzeilen
zu schreiben (z.B. ‘\r‘, ‘\n‘ oder ‘\r\n‘ als Zeilenabschluss).
DataOutputStream
 besitzt Methoden für komplexere Datenstreams und zum
Schreiben primitiver Datentypen
void
void
writeBoolean(boolean b) throws IOException;
writeInt(int i) throws IOException;
void
writeChars(String s) throws IOException;
...
Java
am IAS
© 2012, IAS
121
Datenstreams und Dateien
PrintStream und PrintWriter
 für formatierte Ausgabe
 häufigster Einsatz: Ausdruck in die Standardausgabe
System.out.println(...); // Instanz von PrintStream in der
// Variablen out der Klasse
// System
 löst keine IOException aus
 implementiert flush(), close(), write()
 implementiert verschiedene Methoden zur Ausgabe primitiver
Datentypen und Zeichenketten:
void print(String s);
void print(Char c);
void print(int i);
...
Java
am IAS
© 2012, IAS
122
Datenstreams und Dateien
Dateien verarbeiten
 z.B. Öffnen, zeilenweises Lesen, Ausgeben in andere Datei
DataInput
DataOut
String
aDI = new DataInputStream(
new FileInputStream(“in“));
aDO = new DataOutputStream(
new FileOutputStream(“out“));
line;
while ((line = aDI.readLine()) != null) {
StringBuffer modifiedLine = new StringBuffer(line);
...
// Zeile modifiedLine verarbeiten
aDO.writeBytes(modifiedLine.toString());
}
aDI.close(),
aDO.close();
 Einbettung in Methode notwendig, die IOException auslöst.
Java
am IAS
© 2012, IAS
123
Datenstreams und Dateien
Klasse file
 Abstraktion eines Dateinames
 File-Objekt kann für eine Datei oder ein Verzeichnis stehen
 Konstruktor:
public File(String pathname)
// Dateiname inkl. Pfad
public File(String parent, String child)
// Pfad und Dateiname getrennt
Beispiel
new File("c:\\temp\\bsp.txt")
 Methoden zum Zugriff auf Bestandteile des Dateinames:
• getName(): Name der Datei bzw. des Verzeichnisses ohne Pfad
• getPath(): kompletter Name inklusive Verzeichnisinfo
• getParent(): Name des Vaterverzeichnisses
...
 Methoden zum Zugriff auf Informationen über die Datei:
• lastModified(): Zeitpunkt der letzten Änderung
• isDirectory(), isFile(): zur Unterscheidung Datei/Verzeichn.
• canWrite(): Schreibzugriff möglich?
...
Java
am IAS
© 2012, IAS
124
Datenstreams und Dateien
Zugriff auf Verzeichnisse
 weitere Methode der Klasse File, falls das Objekt ein
Verzeichnis ist
• list(): Verzeichnisinhalt (Ergebnis vom Typ String[])
• mkdir(): Unterverzeichnis erstellen
...
 Methoden um Verzeichnisse und Dateien zu Löschen oder
umzubennen:
• renameTo(File dest): Umbenennen einer Datei
• delete(): Löschen einer Datei/eines Verzeichnisses
...
Java
am IAS
© 2012, IAS
125
Datenstreams und Dateien
Ausgabe verschiedener Dateiund Verzeichnisinformationen
import java.io.*;
import java.util.*;
public class FileTest {
public static void main(String[] args) {
File f = new File("TestFile.java");
TestFile.printFileInfo(f);
f = new File("..");
TestFile.printFileInfo(f);
}
}
Java
am IAS
static void printFileInfo(File f) {
System.out.println("Name= "+f.getName());
System.out.println("Path= "+f.getPath());
System.out.println("Parent= "+f.getParent());
System.out.println("exists= "+f.exists());
System.out.println("canWrite= "+f.canWrite());
System.out.println("isFile= "+f.isFile());
System.out.println("isDirectory= "+f.isDirectory());
if (f.isDirectory()) {
String fils[] = f.list();
for (int i=0; i<fils.length; ++i) {
System.out.println(" "+fils[i]);
}
}
System.out.println(
"lastModified= "+(new Date(f.lastModified())));
System.out.println("length= "+f.length());
System.out.println("");
}
© 2012, IAS
126
Kursüberblick
Vierter Tag
Teil 1:
 Applet-Grundlagen
Teil 2:
 Elemente des AWT
Java
am IAS
© 2012, IAS
127
Applet-Grundlagen
Applet contra Applikation
 Applikation
• eigenständiges Programm
• keine Beschränkungen
 Applet
• Einbettung in HTML-Seite, Ausführung im Browser
• kein Zugriff auf Client-Dateisystem
• keine Kommunikation mit anderen
Netzwerk-Servern
• keine Ausführung anderer Programme
auf dem Client-System
“Sandbox”
 Applikation und Applet sind nicht unvereinbar - ein JavaProgramm kann gleichzeitig Applikation und Applet sein
Java
am IAS
© 2012, IAS
128
Applet-Grundlagen
Applet-Erstellung
 Applets sind immer eine Subklasse von
java.applet.Applet
 die Applet Superklasse ist Teil der AWT-Hierarchie, d.h.
Applets können auf graphische Oberflächenelemente und
Ereignisbehandlung zurückgreifen
public class MeinApplet extends java.applet.Applet {
...
}
 Applets benötigen keine main()-Methode
 die Applet-Klasse muss public deklariert werden, alle
anderen Sub- und Hilfsklassen können beliebige
Zugriffsrechte vereinbaren
Java
am IAS
© 2012, IAS
129
Applet-Grundlagen
Applet-Methoden (1)
 der Lebenszyklus eines Applets besteht aus verschiedenen
Aktivitäten, die jeweils durch eine eigene Methode
repräsentiert sind: Initialisieren, Starten, Stoppen,
Zerstören und Anzeigen
Initialisieren
 Vorgang, bei dem das Applet geladen wird
 definiert grundlegendes Aussehen/Verhalten (z.B. Lesen
von Parametern, Erstellen von Hilfsobjekten, Laden von
Bildern)
 init()-Methode:
public void init() {
...
// Initialisierungaktivitaeten
}
Java
am IAS
© 2012, IAS
130
Applet-Grundlagen
Applet-Methoden (2)
Starten
 erfolgt nach der Initialisierung
 jedes Applet wird nur einmal initialisiert, kann jedoch
mehrfach gestartet werden
 start()-Methode:
public void start() {
...
}
Stoppen
 Vorgang, wenn Benutzer Seite verlässt oder Applet manuell
gestoppt wird
 stop()-Methode:
public void stop() {
...
}
Java
am IAS
© 2012, IAS
131
Applet-Grundlagen
Applet-Methoden (3)
Zerstören
 Aufräumen (z.B. Resourcen freigeben), wenn Applet oder
Browser beendet wird
 destroy()-Methode
public void destroy() {
...
}
Zeichnen
 bestimmt, was und wie auf den Bildschirm gezeichnet wird
 wird im Applet-Lebenszyklus sehr häufig aufgerufen
 paint()-Methode
public void paint(Graphics g) {
...
}
 benötigt Argument: Objekt der Klasse java.awt.Graphics
Java
am IAS
© 2012, IAS
132
Applet-Grundlagen
Graphiken (1)
 Graphikoperationen sind in Java meistens Methoden der
java.awt.Graphics-Klasse
 jedes Applet verfügt über ein Koodinatensystem
 die Koordinaten werden in Pixel (Integerwerte) angegeben
Ursprung
(0,0)
X
(10,10)
(30,20)
Y
Java
am IAS
© 2012, IAS
133
Applet-Grundlagen
Graphiken (2)
 Linien werden mit drawLine() gezeichnet:
g.drawLine( x1, y1, x2, y2 );
Anfangspunkt
Endpunkt
 Rechtecke werden mit drawRect() oder fillRect()
gezeichnet:
g.drawRect( x1, y1, dx, dy );
Ausdehnung
 Polygone werden mit drawPolygon() oder fillPolygon()
gezeichnet:
int x[] = { x1, x2, x3, x4 };
int y[] = { y1, y2, y3, y4 };
int punkte = x.length;
g.drawPolygon( x, y, punkte );
Java
am IAS
© 2012, IAS
134
Applet-Grundlagen
Graphiken (3)
 Polygone werden automatisch geschlossen. Für offene
Polygone steht die Methode drawPolyline() zur Verfügung:
int x[] = { x1, x2, x3, x4 };
int y[] = { y1, y2, y3, y4 };
int punkte = x.length;
g.drawPolyline( x, y, punkte );
 Ovale werden mit drawOval() oder fillOval() gezeichnet:
g.drawOval( x1, y1, dx, dy );
 Bögen werden mit drawArc() oder fillArc() gezeichnet:
g.drawArc( x1, y1, dx, dy, start, grad );
umgebendes Rechteck
Java
am IAS
Startwinkel
© 2012, IAS
überstrichener Winkel
+
135
Applet-Grundlagen
Graphiken (4)
 mit copyArea() wird ein rechteckiger Bereich in eine
andere Position (transx, transy) kopiert
g.copyArea( x1, y1, dx, dy, transx, transy );
 mit clearRect() wird ein Bereich auf die aktuelle
Hintergrundfarbe gesetzt
g.clearRect( x1, y1, dx, dy );
 mit Hilfe der size()-Methode wird das gesamte Applet
gelöscht
g.clearRect( 0, 0, size().width, size().height );
Java
am IAS
© 2012, IAS
136
Applet-Grundlagen
Graphiken (5)
Beispiel:
// Graphik-Beispiel
import java.awt.*;
public class Grafik extends java.applet.Applet {
public void paint( Graphics g ) {
g.drawLine(80, 20, 80, 140);
g.drawLine(20, 80, 140, 80);
g.drawRect(40, 70, 20, 20);
g.drawRect(100, 70, 20, 20);
g.fillOval(70, 70, 20, 20);
g.drawOval(50, 50, 60, 60);
g.drawArc(20, 20, 120, 120, 90, 90);
g.drawArc(20, 20, 120, 120, 0, -90);
}
}
Java
am IAS
© 2012, IAS
137
Applet-Grundlagen
Graphiken (6)
Beispiel (Forts.):
Java
am IAS
© 2012, IAS
138
Applet-Grundlagen
Text & Schrift (1)
 im Zusammenhang mit Text und Schriften sind zwei
Klassen wichtig:
• java.awt.Font bestimmt Schriftart, Stil, Punktgröße
• java.awt.FontMetrics zusätzliche Informationen über die
aktuelle Schriftart
 neue Schriften werden vor der Benutzung instanziiert:
Font f = new Font(“TimesRoman”, Font.BOLD, 24);
Schriftart
Fontstil
Schriftgröße
“Courier”
Font.PLAIN
(in Punkten)
“Helvetica” Font.ITALIC
 prinzipiell können alle auf einem System installierten
Schriften verwendet werden, Standardschriften sind jedoch
vorzuziehen
Java
am IAS
© 2012, IAS
139
Applet-Grundlagen
Text & Schrift (2)
 mit drawString() bzw. drawChar() werden einzelne
Strings und Zeichen ausgegeben
Beispiel:
public void paint( Graphics g ) {
Font f = new Font(“TimesRoman”, Font.BOLD, 32);
g.setFont(f);
g.drawString(“Java am IAS”, 40, 40);
}
 die Klasse FontMetrics liefert spezifische Informationen
über die aktuelle Schriftart
•
•
•
•
Java
am IAS
stringWidth(String): volle Breite des Strings in Pixel
charWidth(): Breite eines bestimmten Zeichens
getLeading(): “Freiraum” zwischen zwei Zeilen
getHeight(): Gesamthöhe der Schriftart
© 2012, IAS
140
Applet-Grundlagen
Text & Schrift (3)
Beispiel
// Zentrieren eines Strings im Applet
import java.awt.*;
public class Zentriert extends java.applet.Applet {
public void paint( Graphics g ) {
Font f = new Font(“TimesRoman”, Font.PLAIN, 32);
FontMetrics fm = getFontMetrics(f);
g.setFont(f);
String s = “Java im Zentrum!”;
int xstart = (getSize().width - fm.stringWidth(s))/2;
int ystart = getSize().height / 2;
g.drawString( s, xstart, ystart );
}
Java
am IAS
}
© 2012, IAS
141
Applet-Grundlagen
Farben (1)
Java Farbmodell
 die Klasse java.awt.Color bietet Unterstützung bei der
Arbeit mit Farben
 das Farbmodell in Java verwendet 24-Bit-Farben, wobei jede
Farbe eine Kombination aus Rot-, Grün- und Blauwerten ist, z.B.
• Weiß:
• Blau:
(255, 255, 255)
(0, 0, 255)
 das Farbmodell wird auf die Systemmöglichkeiten abgebildet
 zur Arbeitserleichterung ist ein Set von Standardfarben
vordefiniert:
• Color.white
• Color.black
• ...
 eigene Farben können jederzeit definiert werden:
Color meineFarbe = new Color( 7, 242, 128 );
Java
am IAS
© 2012, IAS
142
Applet-Grundlagen
Farben (2)
Farben verwenden
 eine neue Farbe wird vor der Benutzung für
Text/Zeichnungen eingerichtet
g.setColor( Color.green );
 die Hinter- und Vordergrundfarbe für ein Applet kann
eingestellt werden
setBackground( Color.green );
setForeground( Color.white );
 mit entsprechenden get-Methoden kann die aktuelle Farbe
sowie die Hinter- und Vordergrundfarbe abgefragt werden
getBackground();
getForeground();
Java
am IAS
© 2012, IAS
143
Applet-Grundlagen
Bilder (1)
 mit den Methoden der Klasse java.awt.Image können
Bilder geladen und in einem Applet angezeigt werden
Bilder laden
 mit getImage() wird ein Bild als Image-Objekt geladen
Image img = getImage( new
URL(“http://www.serv.de/files/imi01.gif”));
 um absolute Pfadangaben zu vermeiden kann
getDocumentBase() oder getCodeBase() verwendet
werden
Image img = getImage( getDocumentBase(),
“files/imi01.gif”);
 Java unterstützt z. Zt. nur Bilder im GIF oder JPEG Format
Java
am IAS
© 2012, IAS
144
Applet-Grundlagen
Bilder (2)
Bilder zeichnen
 die Ausgabe des Bildes im Applet erfolgt mit der
drawImage()-Methode
g.drawImage( img, 20, 20, this );
Bildpunkt links oben
 durch zusätzliche Angabe einer gewünschten Breite und
Höhe nach der Angabe des linken oberen Bildpunktes kann
eine Skalierung/Verzerrung erreicht werden
 die Orginaldimension des Bildes wird mit getWidth() und
getHeight() ermittelt
int bildBreite = img.getWidth(this);
int bildHoehe = img.getHeight(this);
Java
am IAS
© 2012, IAS
145
Applet-Grundlagen
Bilder (3)
Beispiel:
// Text und Bilder
import java.awt.*;
public class IASJava extends java.applet.Applet {
Image logo;
public void init() {
logo = getImage( getCodeBase(), "ias.gif");
setBackground( Color.white );
}
}
Java
am IAS
public void paint( Graphics g ) {
g.setColor( Color.red );
Font f = new Font( "TimesRoman", Font.BOLD, 36 );
g.setFont(f);
g.drawString( "Java am IAS", 20, 40 );
int iwidth = logo.getWidth( this );
int iheight = logo.getHeight( this );
g.drawImage( logo, 40, 60, iwidth, iheight, this );
}
© 2012, IAS
146
Applet-Grundlagen
Bilder (4)
Beispiel (Forts.)
Java
am IAS
© 2012, IAS
147
Applet-Grundlagen
Ereignisse & Interaktivität (1)
 Ereignisse sind eine wichtige Kommunikationsform in der
Computerwelt
 für Java-Programme sind Ereignisse interessant, die vom
Benutzer oder System verursacht werden:
•
•
•
•
•
Mausklicks
Mausbewegungen
Tastaturanschläge
Ereignisse der Benutzeroberfläche
Fensterereignisse
 Java unterstützt z.Zt. in der AWT zwei verschiedene
Ereignismodelle:
• JDK 1.02
• seit JDK 1.1 “Event-Listener-Konzept”
Java
am IAS
© 2012, IAS
148
Applet-Grundlagen
Ereignisse & Interaktivität (2)
JDK 1.02
 alle Ereignisse werden in einer einzigen handleEvent()Methode behandelt
Applet
Ereignis:
Maustaste
gedrückt
handleEvent()
mouseDown()
Ereignis:
Taste
gedrückt
keyDown()
weiterleiten
Java
am IAS
© 2012, IAS
149
Applet-Grundlagen
Ereignisse & Interaktivität (3)
ab JDK 1.1
Applet
init()
Fensterereignis
... initialize applet
... register mouse
listener
... initialize button
... register buttonaction listener
Mausereignis
Registriert
mouse listener
Tastenereignis
Registriert
Schaltflächenereignis
actions listener
Java
am IAS
© 2012, IAS
150
Applet-Grundlagen
JDK 1.1 - Ereignismodell (1)
Das Verwenden von Ereignissen in einem Applet erfolgt
nach festgelegten Spielregeln:
 Schritt 1: entscheiden, welche Ereignisse für das Applet
wichtig
sind und zugehörige Listener-Typen herausfinden
 Schritt 2: Code für diese Listener und die
Ereignisverarbeitung erstellen
 Schritt 3: Listener mit Applet registrieren
Java
am IAS
© 2012, IAS
151
Applet-Grundlagen
JDK 1.1 - Ereignismodell (2)
Schritt 1: Ereignisse und Listener-Schnittstellen
 die API-Dokumentation gibt Auskunft über Ereignisse und
ihre zugehörigen Listener-Schnittstellen
Listener-Interface
Ereignis
Definition (alle public void)
MouseListener
mouseDown
mouseUp
mouseEnter
mouseExit
mouseClicks
mousePressed (MouseEvent e)
mouseReleased (MouseEvent e)
mouseEntered (MouseEvent e)
mouseExited (MouseEvent e)
mouseClicked (MouseEvent e)
MouseMotionListener
mouseMove
mouseDrag
mouseMoved (MouseEvent e)
mouseDragged (MouseEvent e)
KeyListener
keyUp
keyDown
keyTyped
keyReleased (KeyEvent e)
keyPressed (KeyEvent e)
keyTyped (KeyEvent e)
Java
am IAS
© 2012, IAS
152
Applet-Grundlagen
JDK 1.1 - Ereignismodell (3)
Schritt 2: Listener-Schnittstellen implementieren
 der Ereignis-Listener ist eine Klasse, die die ListenerSchnittstelle implementiert
 Schnittstellen-Implementierung kann auf zwei Arten erfolgen:
(A) separate Listener-Klasse: elegante Lösung für größere
Programme
(B) Listener wird direkt in der Applet-Klasse implementiert:
schnelle Lösung für kleinere Applets
zu (A):
 separate Listener-Klasse muss Schnittstelle vollständig
implementieren
 für viele Listener stehen in java.awt.event sog. Adapterklassen
mit Default-Implementierungen zur Verfügung, z.B.:
MouseAdapter
MouseMotionAdapter
KeyAdapter
Java
am IAS
für
für
für
© 2012, IAS
MouseListener
MouseMotionListener
KeyListener
153
Applet-Grundlagen
JDK 1.1 - Ereignismodell (4)
Schritt 2 (Forts.): Listener-Schnittstellen implementieren
zu (A):
 von den Listener-Adapterklassen werden eigene ListenerKlassen abgeleitet, welche die relevanten
Ereignisbehandlungs-Methoden (z.B. mousePressed())
überschreiben
import java.awt.event.*;
class MeinMausListener extends MouseAdapter {
public void mousePressed( MouseEvent e ) {
...
}
}
Java
am IAS
© 2012, IAS
154
Applet-Grundlagen
JDK 1.1 - Ereignismodell (5)
Schritt 2 (Forts.): Listener-Schnittstellen implementieren
zu (B):
 das Applet ist sein eigener Event-Listener:
import java.awt.event.*;
public class MeinApplet extends java.applet.Applet
implements MouseListener, KeyListener {
// Ereignisbehandlung
public void mousePressed( MouseEvent e ) {
...
}
}
// Leer-Implementierungen der Schnittstelle
public void mouseReleased( MouseEvent e ) {}
...
 Wichtig: gesamte Schnittstelle muss implementiert
werden
Java
am IAS
© 2012, IAS
155
Applet-Grundlagen
JDK 1.1 - Ereignismodell (6)
Schritt 3: Listener registrieren
 Verbindung zwischen Listener und Applet mit
Registrierungsmethoden herstellen:
addMouseListener();
addMouseMotionListener();
addKeyListener();
 für separate Listener-Klasse
m1 = new MeinMausListener();
addMouseListener( m1 );
 Applet ist Listener
addMouseListener( this );
Java
am IAS
© 2012, IAS
156
Applet-Grundlagen
Mausereignisse (1)
Beispiel:
 folgendes Applet zeichnet gerade Linien auf den Bildschirm
durch Ziehen der Maus vom Anfangs- zum Endpunkt. Es
können maximal 10 Linien gezeichnet werden.
// Linien.java
import java.awt.*;
import java.awt.event.*;
public class Linien extends java.applet.Applet
implements MouseListener, MouseMotionListener {
final int MAXLINES = 10;
Point starts[] = new Point[MAXLINES]; // Startpunkte
Point ends[] = new Point[MAXLINES];
// Endpunkte
Point anchor;
// Start aktuelle Linie
Point currentpoint;
// Ende aktuelle Linie
int currline = 0;
// Anzahl Linien
Java
am IAS
© 2012, IAS
157
Applet-Grundlagen
Mausereignisse (2)
Beispiel (Forts.)
public void init() {
setBackground( Color.white );
// Event-Listener registrieren
addMouseListener( this );
addMouseMotionListener( this );
}
// Leerimplementierungen der Schnittstellen
public void mouseMoved( MouseEvent e) {}
public void mouseClicked( MouseEvent e) {}
public void mouseEntered( MouseEvent e) {}
public void mouseExited( MouseEvent e) {}
public void mousePressed( MouseEvent e ) {
if( currline < MAXLINES )
anchor = new Point( e.getX(), e.getY() );
else
System.out.println( "Too many lines ..." );
}
Java
am IAS
© 2012, IAS
158
Applet-Grundlagen
Mausereignisse (3)
Beispiel (Forts.)
public void mouseReleased( MouseEvent e ) {
if( currline < MAXLINES )
addLine( e.getX(), e.getY() );
}
public void mouseDragged( MouseEvent e ) {
if( currline < MAXLINES ) {
currentpoint = new Point( e.getX(), e.getY() );
repaint();
}
}
void addLine( int x, int y ) {
starts[currline] = anchor;
ends[currline] = new Point(x, y);
currline++;
currentpoint = null;
anchor = null;
repaint();
}
Java
am IAS
© 2012, IAS
159
Applet-Grundlagen
Mausereignisse (4)
Beispiel (Forts.)
public void paint( Graphics g ) {
for ( int i = 0; i < currline; i++ ) {
g.drawLine( starts[i].x, starts[i].y,
ends[i].x, ends[i].y );
}
}
Java
am IAS
}
g.setColor( Color.blue );
if( currentpoint != null )
g.drawLine( anchor.x, anchor.y,
currentpoint.x, currentpoint.y);
// Linien-Applet Ende
© 2012, IAS
160
Applet-Grundlagen
Mausereignisse (5)
Beispiel (Forts.)
Java
am IAS
© 2012, IAS
161
Applet-Grundlagen
Zusammenfassung
 Unterschied Applet - Applikation
 Applet-Aktivitäten: Initialisieren, Starten, Stoppen,
Zerstören, Anzeigen
 einfache Graphikoperationen: Linien, Rechtecke, ...
 Umgang mit Schriften
 Applet-Farben
 Bilder in Applets
 Ereignismodelle 1.1 und 1.02
 Ereignisbehandlung in Java
Java
am IAS
© 2012, IAS
162
Kursüberblick
Vierter Tag
Teil 1:
 Applet-Grundlagen
Teil 2:
 Elemente des AWT
Java
am IAS
© 2012, IAS
163
Elemente des AWT
AWT-Übersicht
 AWT bietetet eine Vielzahl von Komponenten für
graphische Benutzeroberflächen
 AWT-Elemente können in Containern verschachtelt werden
 wichtige AWT-Komponenten
• Container ermöglichen Verschachtelungen, sie können
konkrete Komponenten oder andere Container enthalten.
Häufigster Vertreter: Panel (Applet ist von Panel abgeleitet)
• Canvas ist ein Zeichenbereich zur Erstellung von Graphiken
• GUI-Komponenten, wie z.B. Labels, Schaltflächen,
Listenfelder, Textfelder, Kontrollfelder, u.s.w.
• Fensterkomponenten, wie z.B. Fenster, Rahmen,
Menüleisten, Dialogfelder
 alle Elemente sind als Klassenhierarchie im java.awt-Paket
organisiert
Java
am IAS
© 2012, IAS
164
Elemente des AWT
AWT- Label (1)
 Label: nicht-editierbare Zeichenkette, die zur Beschriftung
anderer Komponenten dient
 Vorteile von Labels (gegenüber drawString()):
• keine paint()-Anweisungen notwendig
• automatische Layout-Anpassungen
 Label-Konstruktoren:
• Label() erzeugt leeres, links ausgerichtetes Label
• Label( String ) erzeugt Label mit Zeichenkette
• Label( String, int ) ermöglicht Ausrichtung mit Hilfe von
Label-Klassenvariablen Label.RIGHT, Label.LEFT,
Label.CENTER
 die Schrift des Labels kann mit setFont() beliebig
geändert werden
Java
am IAS
© 2012, IAS
165
Elemente des AWT
AWT- Label (2)
Beispiel
import java.awt.*;
public class LabelTest extends java.applet.Applet {
public void init() {
setFont( new Font(“Helvetica”, Font.BOLD, 16));
setLayout( new GridLayout( 3, 1 ));
add( new Label(“linksgerichtet”, Label.LEFT));
add( new Label(“zentriert”, Label.CENTER));
add( new Label(“rechtsgerichtet”, Label.RIGHT));
}
}
 Label-Methoden:
• getText() gibt die Zeichenkette des Labels aus
• setText(String) ändert den Label-Text
• getAlignment() gibt die Ausrichtung des Label als Integer
zurück:
0 (links), 1 (zentriert) oder 2 (rechts)
• setAlignment(int) ändert die Label-Ausrichtung
Java
am IAS
© 2012, IAS
166
Elemente des AWT
AWT - Schaltflächen
 Schaltfläche (Button): kann mit der Maus “angeklickt”
werden und Aktionen auslösen
 Konstruktoren:
• Button() erzeugt Schaltfläche ohne Beschriftung
• Button( String ) erzeugt Schaltfläche mit String als
Beschriftung
 Methoden:
• getLabel() gibt die Beschriftung der Schaltfläche zurück
• setLabel( String ) beschriftet die Schaltfläche mit String
Beispiel
public class ButtonTest extends java.applet.Applet {
public void init() {
add( new Button(“OK”));
add( new Button(“Cancel”));
}
}
Java
am IAS
© 2012, IAS
167
Elemente des AWT
AWT - Kontrollfelder
 Kontrollfelder (Checkbox) stellen Optionen bereit, die gewählt
oder nicht gewählt werden können. Die Optionen schließen
sich nicht gegenseitig aus (Mehrfachauswahl möglich)
 Konstruktoren:
• Checkbox() erzeugt unbeschriftetes, nicht gewähltes Kontrollfeld
• Checkbox( String ) erzeugt Kontrollfeld mit StringBeschriftung
• Checkbox( String, boolean ) erzeugt beschriftetes
Kontrollfeld, welches ausgewählt (true) oder nicht ausgewählt
(false) ist
 Methoden:
•
•
•
•
Java
am IAS
getLabel() gibt Feldbeschriftung aus
setLabel( String ) ändert Feldbeschriftung
getState() gibt true oder false (je nach Selektion) aus
setState(boolean) ändert Auswahlstatus des Kontrollfeldes
© 2012, IAS
168
Elemente des AWT
AWT - Optionsfelder
 Optionsfelder (CheckboxGroup) sind ähnlich wie Kontrollfelder,
es kann allerdings nur eine Option gewählt werden. Die
einzelnen Optionen werden in einer CheckboxGroup gruppiert
Beispiel
public void init() {
setLayout( new FlowLayout( FlowLayout.LEFT ));
CheckboxGroup cbg = new CheckboxGroup();
add( new Checkbox( “Rot”, false, cbg));
add( new Checkbox( “Gruen”, false, cbg));
add( new Checkbox( “Blau”, true, cbg));
}
 Methoden:
•
•
•
•
Java
am IAS
getCheckboxGroup() gibt das aktuelle Optionsfeld zurück
setCheckboxGroup(CheckboxGroup) setzt aktuelles Optionsfeld
getSelectedCheckbox() gibt aktuell angewähltes Option zurück
setSelectedCheckbox(Checkbox) wählt die gewünschte Option an
© 2012, IAS
169
Elemente des AWT
AWT - Auswahlmenüs
 Auswahlmenüs (Choice) sind Pop-Up-Listen, aus denen ein
Listenelement ausgewählt werden kann
Beispiel
public void init() {
Choice c = new Choice();
c.add(“Java”);
c.add(“C++”);
c.add(“Ada95”);
add( c );
}
 Methoden:
getItem( int ) gibt Zeichenkette der gewählten Stelle (0,...) aus
getItemCount() gibt die Anzahl der Menüelemente aus
getSelectedIndex() gibt Index des gewählten Elements zurück
getSelectedItem() gibt Zeichenkette des gewählten Elements
zurück
• select( int ) wählt Element an der angegebenen Stelle
• select( String ) wählt Element mit der angegebenen Zeichenkette
•
•
•
•
Java
am IAS
© 2012, IAS
170
Elemente des AWT
AWT - Textfelder (1)
 Textfelder (TextField) stellen editierbaren Bereich für die
Eingabe einer Textzeile zur Verfügung
 Konstruktoren:
• TextField() erzeugt leeres Textfeld
• TextField( String ) erzeugt mit Zeichenkette initialisiertes
Textfeld, Breite wird durch aktuellen Layout-Manager
vorgegeben
• TextField( String, int ) erzeugt initialisiertes Textfeld mit
vorgegebener Breite (Zeichen)
TextField tf = new TextField(“ Erstes Textfeld”, 30);
add( tf );
 zur Beschriftung des Textfeldes muss ein zusätzliches Label
verwendet werden
Java
am IAS
© 2012, IAS
171
Elemente des AWT
AWT - Textfelder (2)
 Methoden:
getText() gibt Text als Zeichenkette aus
setText( String ) setzt Zeichenkette in das Feld
getColumns() gibt Breite des Textfeldes aus
select( int, int ) wählt Text zwischen beiden Positionen
aus
• selectAll() wählt den gesamten Text aus
• isEditable() gibt aus, ob Text editierbar ist (true/false)
• setEditable( boolean ) ermöglicht (true) oder verbietet
(false) editieren des Textes
•
•
•
•
Beispiel
public void init() {
setLayout( new GridLayout( 1, 2, 5, 15 ) );
add( new Label(“Name:”) );
add( new TextField(“Ihren Namen bitte”, 40) );
}
Java
am IAS
© 2012, IAS
172
Elemente des AWT
Layout-Manager
 jedes Applet (Panel) kann konkrete Komponenten oder
weitere Panels enthalten
 ein Layout-Manager bestimmt, wie die AWT-Elemente in
einem Panel dynamisch angeordnet werden
 jedes Panel kann einen eigenen Layout-Manager besitzten
 das AWT beinhaltet fünf verschiedene Layout-Manager:
FlowLayout, GridLayout, BorderLayout, CardLayout und
GridBagLayout
 ein Manager wird in einem Panel verwendet, indem a) eine
Instanz einer Layout-Manager-Klasse gebildet wird und b)
die setLayout()-Methode für das umgebende Panel
aufgerufen wird
 die Reihenfolgen, in der AWT-Elemente in das Layout
eingefügt werden (add()-Methode), ist entscheidend für
ihre Positionierung
Java
am IAS
© 2012, IAS
173
Elemente des AWT
FlowLayout
 das FlowLayout ordnet die Komponenten zeilenweise von links
nach rechts an. Passt eine Komponente nicht in die Zeile, wird
automatisch eine neue Zeile begonnen
 die zentrierte Zeilenausrichtung kann mit den Klassenvariablen
FlowLayout.RIGHT und FlowLayout.LEFT verändert werden
 der horizontale und vertikale Abstand kann durch zwei
Integer-Argumente angegeben werden
Beispiel
import java.awt.*;
public class FlowTest extends java.applet.Applet {
public void init() {
setLayout(new FlowLayout(FlowLayout.LEFT, 20, 20));
add(new Button("Eins"));
add(new Button("Zwei"));
add(new Button("Drei"));
add(new Button("Vier"));
}
}
Java
am IAS
© 2012, IAS
174
Elemente des AWT
GridLayout
 bei GridLayout wird das Panel in Zeilen und Spalten
unterteilt. Die Komponenten werden von links nach rechts
und von oben nach unten eingefügt
 auch hier können zusätzliche horizontale und vertikale
Abstände zwischen den Komponenten angegeben werden
Beispiel
import java.awt.*;
public class GridTest extends java.applet.Applet {
public void init() {
setLayout(new GridLayout(2, 2, 3, 10));
add(new Button("Eins"));
add(new Button("Zwei"));
add(new Button("Drei"));
add(new Button("Vier"));
}
}
Java
am IAS
© 2012, IAS
175
Elemente des AWT
BorderLayout
 beim BorderLayout werden Komponenten mit Hilfe von
geographischen Angaben (North, East, South, West,
Center) angeordnet
Beispiel
import java.awt.*;
public class BorderTest extends java.applet.Applet {
public void init() {
setLayout(new BorderLayout(5, 10));
add("North", new Button("Eins"));
add("East", new Button("Zwei"));
add("South", new Button("Drei"));
add("West", new Button("Vier"));
}
}
Java
am IAS
© 2012, IAS
176
Elemente des AWT
Card- und GridBagLayout
 die Karten in einem CardLayout sind unterschiedliche
Panels, die nacheinander eingefügt und angezeigt werden.
Es kann jeweils nur eine Karte angezeigt werden, aber man
kann zwischen den Karten wechseln
 das GridBagLayout ist der mächtigste, aber auch der
komplizierteste Layout-Manager - er ermöglicht die
Anordnung der Komponenten in einem rasterähnlichen
Layout
 im GridBagLayout kann zusätzlich die Weite der einzelnen
Zellen, sowie die Proportionen zwischen Zeilen und Spalten
kontrolliert werden
 die Fähigkeiten des GridBag-Manager können meistens
durch Verschachteln einfacherer Manager nachgebildet
werden
Java
am IAS
© 2012, IAS
177
Elemente des AWT
Listener für GUI-Komponenten (1)
Listener-Interface
Ereignis
Definition (alle public void)
ActionListener
Aktion
ItemListener
Liste
gewählt
itemStateChanged(ItemEvent e)
FocusListener
Fokuserhalt
Fokusverlust
focusGained(FocusEvent e)
focusLost(FocusEvent e)
TextListener
Text geändert textValueChanged(TextEvent e)
actionPerformed(ActionEvent e)
 die meisten dieser Listener-Schnittstellen (bis auf
FocusListener) besitzten keine Adapterklassen, d.h. die
Schnittstellen müssen von Hand implementiert werden
Java
am IAS
© 2012, IAS
178
Elemente des AWT
Listener für GUI-Komponenten (2)
 bei der Implementierung der Listener-Schnittstelle kann
mit Hilfe der getSource()-Methode eine Referenz auf die
Komponente ermittelt werden, die das Ereignis erhalten hat
public void actionPerformed( ActionEvent e ){
Button ursprung = e.getSource();
if( ursprung.getLabel().equals(“OK”)) {
// Behandlung von OK
} else if( ursprung.getLabel().equals(“Cancel”)) {
// Behandlung von Cancel
}
}
 Listener werden durch spezielle Methoden mit den
GUI-Elementen verbunden
addActionListener();
addItemListener();
addFocusListener();
Java
am IAS
© 2012, IAS
179
Elemente des AWT
Listener für GUI-Komponenten (3)
 für die Registrierung des Listeners in der init()-Methode
muss bei jeder empfangenden Komponente einzeln
registriert werden
Button OKButton = new Button(“OK”);
// OKButtonAction implementiert ActionListener
OKButtonAction ok = new OKButtonAction();
OKButton.addActionListener( ok );
 Details können der API-Dokumentation des jeweiligen
Oberflächenelements oder der Schnittstelle entnommen
werden
Java
am IAS
© 2012, IAS
180
Elemente des AWT
Listener für GUI-Komponenten (4)
Beispiel
import java.awt.*;
import java.awt.event.*;
public class MultiListener extends java.applet.Applet
implements ActionListener {
TextArea leftTextArea;
TextArea rightTextArea;
Button button1, button2;
public void init() {
GridLayout gridbag = new GridLayout(3, 2, 5, 5);
setLayout(gridbag);
Label l = new Label("Das Applet hoert:");
add(l);
Label r = new Label("Die externe Klasse hoert:");
add(r);
Java
am IAS
© 2012, IAS
181
Elemente des AWT
Listener für GUI-Komponenten (5)
Beispiel (Forts.)
leftTextArea = new TextArea(5, 20);
leftTextArea.setEditable(false);
add(leftTextArea);
rightTextArea = new TextArea(5, 20);
rightTextArea.setEditable(false);
add(rightTextArea);
button1 = new Button("Schaltflaeche 1");
add(button1);
button2 = new Button("Schaltflaeche 2");
add(button2);
button1.addActionListener(this);
button2.addActionListener(this);
button2.addActionListener(new
ExtListener(rightTextArea));
} // Ende init()-Methode
Java
am IAS
© 2012, IAS
182
Elemente des AWT
Listener für GUI-Komponenten (6)
Beispiel (Forts.)
public void actionPerformed(ActionEvent e) {
leftTextArea.append(e.getActionCommand() + "\n");
}
}
// Ende MultiListener-Klasse
class ExtListener implements ActionListener {
TextArea myTextArea;
public ExtListener(TextArea ta) {
myTextArea = ta;
}
public void actionPerformed(ActionEvent e) {
myTextArea.append(e.getActionCommand() + "\n");
}
}
Java
am IAS
© 2012, IAS
183
Elemente des AWT
Listener für GUI-Komponenten (7)
Java
am IAS
© 2012, IAS
184
Elemente des AWT
Zusammenfassung
 AWT bietet graphische Oberflächenelemente:
•
•
•
•
•
•
Labels
Schaltflächen
Kontrollfelder
Optionsfelder
Auswahlmenüs
Textfelder
 mit den fünf Layout-Managern können AWT-Komponenten
dynamisch angeordnet werden
 für die Komponenten-Ereignisse stehen spezielle
Schnittstellen
zur Verfügung
 eine Listener muss jeder einzelnen empfangenden
Komponente registriert werden
Java
am IAS
© 2012, IAS
185
Was wurde nicht behandelt?
 Threads (“Miniprozesse”)
z.B. Drucken im Hintergrund
 Java-Applikationen mit AWT
 Netzkommunikation, Client/Server-Applikationen
Java
am IAS
© 2012, IAS
186
Wie geht’s weiter ...
Selbststudium
 Literatur
 kleinere Programmierprojekte
Angebote am IAS
 Softwaretechnik-Praktikum am IAS
Ansprechpartner: Dipl.-Ing. Alexander Faul, Tel. 685-67305
Java
am IAS
© 2012, IAS
187
Herunterladen