Programmierung in Java

Werbung
Programmierung in Java
Primitive Datentypen von Java sind:
boolean
byte
char
short
int
long
float
double
P raktische Inf ormatik
entweder true oder false
Zahlen von −128 bis 127 (8 Bit)
16-Bit (2 Byte) Unicode-Zeichen
Zahlen von −32768 bis 32767 (16 Bit)
Zahlen von −231 bis 231 − 1 (32 Bit)
Zahlen von −263 bis 263 − 1 (64 Bit)
Fließkommazahlen
Fließkommazahlen mit doppelter Genauigkeit
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 1
Strings in Java
Strings sind vordefinierte Klasse; nicht primitiv
Methoden für Strings:
+
length(),
charAt(int),
substring(anfangsindex, endindex),
equals(String other).
Zwei Strings werden verbunden
Test der Inhalts-Gleichheit.
Bei s == t wird Objektidentität geprüft!
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 2
Umlaute, Unicode-Darstellung,
Escape-Sequenzen
ä
ö
ü
ß
Ä
Ö
Ü
\u00E4
\u00F6
\u00FC
\u00DF
\u00C4
\u00D6
\u00DC
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
\n
\r
\“
\’
\\
(27. April2005)
Seite 3
Zeilenumbruch (newline)
carriage return
Doppeltes Anführungszeichen
Einfaches Anführungszeichen
ergibt \
Operatoren auf primitiven Daten
∗, /, +, −
Infix-Ops (für mehrere Typen)
%
modulo-Rechnung 7%3 ergibt 1
++
addiere 1: z.B. i++ (erst verwende i; addiere 1)
++i (addiere 1; verwende i )
subtrahiere 1: i-- (verwende i; subtrahiere 1)
--
--i
<, <=, >
>=, ==, ! =
P raktische Inf ormatik
2, SS
(subtrahiere 1; verwende i )
arithmetische Infix Vergleiche
2005, F olien Java;2,
(27. April2005)
Seite 4
Operatoren auf primitiven Daten (2)
!
Negation (Prefix)
&, |
striktes und, oder für Boolesche Ausdrücke
(werden auch für bitweise Operation verwendet)
&&, ||
lazy und, oder
^
exklusives oder
+=
x += y entspricht x
op=
Abkürzung für: x op= a entspricht x = x op a
andere op sind möglich
= x + y
Es gibt weitere Operationen, . . .
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 5
Ausdrücke
Ausdruck
=
Programmfragment,
das nach Ausführung einen Wert hat
(analog zu Haskell)
Zum Beispiel
arithmetische Ausdrücke; Boolesche Ausdrücke.
Funktionsausdrücke;
Methoden-Anwendungen
Methoden müssen dazu Rückgabetyp haben und
mittels return den Wert zurückgeben.
Auswahloperator: a ? b : c
wirkt wie ein if mit Wertrückgabe
In Haskell: if-then-else leistet beides
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 6
Beispiel für Boolesche Ausdrücke
(a == b)
(a != b)
(a > b)
Zusammengesetzte Boolesche Ausdrücke:
(a > 0
&& a <= 10)
(3*a +5 < 20
P raktische Inf ormatik
2, SS
||
b == c)
2005, F olien Java;2,
(27. April2005)
Seite 7
Anweisungen
Anweisung
P raktische Inf ormatik
2, SS
=
Programmfragment,
das den Zustand ändert
(Befehl, Kommando)
2005, F olien Java;2,
(27. April2005)
Seite 8
Anweisungen
if . then . else .
Syntax:
if (hAusdrucki) hAnweisungi else hAnweisungi
•
•
•
Hinter if muss ein Boolescher Ausdruck stehen.
Mehrere Anweisungen, mit { und } geklammert,
zählen als eine Anweisung.
Das else kann weggelassen werden.
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 9
switch
Syntax:
(Einrückung zur besseren Lesbarkeit)
switch (hAusdrucki) {
case hKonstantei: hAnweisungeni break ;
...
case hKonstantei: hAnweisungeni break ;
default: hAnweisungeni
}
Nebenbedingungen:
•
•
•
Typ des Ausdrucks: elementar
Konstanten müssen zur Kompilierzeit bekannt sein.
break’s sollten jeden Fall abschließen,
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 10
while
Syntax:
while (hAusdrucki) hAnweisungi
Der Rumpf der Schleife wird ausgeführt,
solange der hAusdrucki den Wert true hat.
Besondere Anweisungen:
continue:
break:
P raktische Inf ormatik
Sprung ans Ende des Rumpfes
Beenden der Schleife
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 11
do-while
Syntax:
do hAnweisungi while (hAusdrucki)
Der Rumpf der Schleife wird ausgeführt,
bis der Ausdruck den Wert false hat.
Der Rumpf wird auf jeden Fall einmal ausgeführt.
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 12
for
Syntax:
for (hIniti; hBedingungi; hAusdrucki) hAnweisungi
Der Rumpf (Anweisung) der for-Schleife wird ausgeführt,
solange der Bedigungs-Ausdruck den Wert true hat.
Man kann mit der continue Anweisung ans Ende des Rumpfes springen.
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 13
Beispiel
for (int i = 0; i <= 10; i++)
<Anweisung>;
Diese Schleife wird für i = 0, . . . , 10 durchlaufen.
Alternativ zu i++ : i = i+1 oder i += 1
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 14
Marken, Labels
Anweisungen sind markierbar mit Marken (Labels):
marke1:
while (i < 0)
i--;
Bei geschachtelten Schleifen:
beenden mit break marke1,
ans Ende mit continue marke1
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 15
Felder (Arrays)
Folgen von Objekten gleichen Typs,
die mit Index angesprochen werden können.
Felder können mehrdimensional sein.
Beispiel
int [] a;
//
a = new int [10] ;
integer feld a ist erkl\"art
// integer feld a ist jetzt ansprechbar
// und hat 10 Eintraege: von 0 bis 9
// nicht initialisiert
for (int i = 0; i < a.length; i++) {
a [i] = i ;
}
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 16
Felder (Arrays): mehrdimensional
Beispiel für ein zweidimensionales Feld mit direkter Initialisierung:
String[][] matrix = {
{"AA","AB","AC","AD"},
{"BA","BB","BC","BD"},
{"CA","CB","CC","CD"}
};
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 17
Kommentare
Es gibt drei Arten von Java-Kommentaren:
• Kommentar bis Zeilenende //
• Kommentare zwischen /* und */.
Schachtelung ist jedoch nicht erlaubt.
• Kommentare zwischen /** und */
Die letzeren können mit javadoc extrahiert und bearbeitet werden.
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 18
Konstruktoren
Beispiel:
class Rechteck extends geometrischesObjekt {
Rechteck (int x, int y, int b, int h) {
this.x = x; this.y = y; this.b = b; this.h = h;
}
int x, y, b, h;
void move (int xd; int yd) {
this.x = x + xd;
this.y = y + yd;
}
}
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 19
Konstruktoren
•
•
new hClassi konstruiert neues Objekt.
new ruft die Konstruktor-Methode (den Konstruktor) von hClassi auf.
•
•
•
•
Name des Konstruktors = Name der Klasse
Verschiedene Konstruktoren sind erlaubt
Auswählen der Bindung genau wie beim Überladen.
this(...) ruft Konstruktor der gleichen Klasse auf.
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 20
Konstruktoren: Aufrufprinzipien
•
Bei konkreter Klassenhierarchie:
Aufruf der Konstruktoren von oben nach unten
Notwendig: Aufruf super() am Anfang
Aufruf super() und this() nicht gleichzeitig im Konstruktor
Grund: geordnetes Abarbeiten der Konstruktoren.
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 21
Klassenkonversion, Typkonversion, cast
Die Syntax des cast-Operators ist:
hClassi Objekt
Beispiel:
varfloat = (float) vardouble
Die umgekehrte Zuweisung kann Java automatisch richtig umsetzen,
da keine Information verlorengeht.
vardouble = (float) varfloat ist erlaubt.
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 22
Beispiel Klassenkonversion
Sei geoObj Oberklasse von Rechteck.
ist erlaubt; der Inhalt wird nicht verändert.
vargeoobj = varrechteck
varechteck = vargeoobj
ist verboten, denn :
vargeoobj könnte ein Kreisobjekt sein
Erlaubt: varrechteck = (Rechteck) vargeoobj
Exception zur Laufzeit, wenn vargeoobj ein Kreis ist.
Typkonversion und Typangaben:
•
•
unterstützen die Typsicherheit und den Typcheck zur Kompilezeit
geben Flexibilität beim Programmieren
Z.B. Zusammenfassen von Objekte
verschiedener Klassen (Vector, Liste)
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 23
Ausnahmen, Exceptions
Exceptions (Ausnahmen)
sind Laufzeitfehler bzw. unerwartete Reaktionen:
•
•
•
Fehler bei externen Aufrufen,
Division durch 0
usw.
try, catch, throw: Umgang mit Exceptions
catch
try
throw
Abfangen von Exceptions
Einpacken von Anweisungen als Vorbereitung für catch
Erzeugen von programmierten Ausnahmen.
Abbruch des Programms, wenn keine Ausnahmebehandlung programmiert ist.
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 24
Ausnahmen, Exceptions
. . . throws Exception1, ...:
zeigt an, dass die Methode Ausnahmen erzeugen kann.
Verwendung von try und catch:
Nach dem try-Block :
try Ausdruck
folgen catch-Blöcke:
catch (Exception exception) Anweisung
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 25
Zugriffsrechte
public, private. Seltener verwendet: protected
Beispiel
....
class Rechteck extends geometrischesObjekt {
private int x, y, b, h;
public void move (int xd; int yd) {
this.x = x + xd;
this.y = y + yd;
}
}
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 26
Zugriffsrechte
public
Methode move darf von außerhalb benutzt werden
die Nachricht move(10,10) ist immer erlaubt.
private
Attribute x,y,b,h dürfen nicht von außen abgefragt/
geändert werden
(Wie lokale Variablen)
protected
Dürfen innerhalb des Packages aufgerufen werden
Attribute dürfen nur von Methoden der Unterklassen
geändert werde
keine Angabe:
Alle Methoden des Packages haben Zugriff
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 27
Modifikatoren
static:
final:
P raktische Inf ormatik
kennzeichnet Klassen-Attribut bzw. -Methoden
Definiert globale Variablen der Klasse
z.B. die Anzahl aller Objekte einer Klasse kann man so
definieren
Klassen-Attribute sind aufrufbar mittels Klasse.attribut.
Klassenmethoden kann man benutzen ohne Objekt
d.h. die Variable this ist nicht verwendbar.
Aufruf: Klassenname. Methodenname(params).
Z.B. main ist in einer Applikation stets eine Klassenmethode.
nicht überschreibbare Attribute bzw. Methoden.
Zur Definition von festen Konstanten;
verwendbar in Bibliotheken / Standard Pakete.
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 28
Fahrzeugbeispiel:
Beispiel
zu Klassendefinition
Erzeugung von Objekten
Ist Java-Applikation
Demonstriert verschiedene Techniken: u.a. static Attribut.
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 29
Fahrzeugbeispiel: Quellkode
// abgewandeltes Beispiel aus Hannover Skript
class Fahrt {
private double Geschwindigkeit;
public String Fahrtrichtung;
private Fahrzeug Benfahrzeug;
public Fahrt (double Geschwindigkeit, String Fahrtrichtung,
Fahrzeug Benfahrzeug) {
this.Geschwindigkeit = Geschwindigkeit;
this.Fahrtrichtung = Fahrtrichtung;
this.Benfahrzeug = Benfahrzeug;
}
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 30
Fahrzeugbeispiel: Quellkode(2)
public double beschleunigt_5() {
Geschwindigkeit = Geschwindigkeit +5;
return Geschwindigkeit;
}
public double Geschwindigkeit () {
return this.Geschwindigkeit ;
}
}
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 31
Fahrzeugbeispiel: Quellkode(2)
class Fahrzeug {
public double Hoechstgeschwindigkeit;
private String Eigentuemer;
private static long Anzahl;
static {
Anzahl = 0;
}
public static long Anzahl() {
return Anzahl;
}
public Fahrzeug() {
Anzahl = Anzahl + 1;
}
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
//
Seite 32
Konstruktur:
Fahrzeugbeispiel: Quellkode(3)
public Fahrzeug(double Hoechstgeschwindigkeit,
String Eigentuemer) {
Anzahl = Anzahl +1;
this.Eigentuemer = Eigentuemer;
this.Hoechstgeschwindigkeit = Hoechstgeschwindigkeit;
}
public double Hoechstgeschwindigkeit () {
return Hoechstgeschwindigkeit ;
}
public void loesche_Fahrzeug() {
Anzahl = Anzahl - 1;
}
public String Eigentuemer () {
return Eigentuemer;
}
}
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 33
Fahrzeugbeispiel: Quellkode(4)
class Auto extends Fahrzeug {
public String Autokennzeichen;
public Auto(double Hoechstgeschwindigkeit,
String Eigentuemer, String kennzeichen) {
super(Hoechstgeschwindigkeit, Eigentuemer);
this.Hoechstgeschwindigkeit = Hoechstgeschwindigkeit;
this.Autokennzeichen = kennzeichen;
}
}
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 34
Fahrzeugbeispiel: Quellkode(4b)
class Boot extends Fahrzeug {
public double Tiefgang;
public Boot(double Hoechstgeschwindigkeit,
String Eigentuemer, double tiefgang) {
super(Hoechstgeschwindigkeit, Eigentuemer);
this.Hoechstgeschwindigkeit = Hoechstgeschwindigkeit;
this.Tiefgang = tiefgang;
}
}
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 35
Fahrzeugbeispiel: Quellkode(5)
class FahrzeugProg2 {
public static void main(String[] args) {
System.out.println("Anzahl Args: " + args.length);
for (int i = 0; i < args.length; i=i+1)
System.out.println(args[i] + " ");
System.out.println();
System.out.println("Anzahl Fahrzeuge: " + Fahrzeug.Anzahl());
Auto MeinGolf = new Auto(180.0, "myself","B-SE-1");
System.out.println("Neues Auto, maxkm:" + MeinGolf.Hoechstgeschwindigk
+ " Besitzer:" +
MeinGolf.Eigentuemer() + " AutoKZ:" + MeinGolf.Autokennzeichen)
Boot boot = new Boot(20.0,"Gaby",2.5);
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 36
Fahrzeugbeispiel: Quellkode(6)
System.out.println("Neues Boot, maxkm:" + boot.Hoechstgeschwindigkeit
+ " Besitzer:" +
boot.Eigentuemer() + " Tiefgang:" + boot.Tiefgang ) ;
System.out.println("Anzahl Fahrzeuge nach 2 X new: " + Fahrzeug.Anzahl
Fahrt bootsfahrt = new Fahrt(12.0,"Norden",boot);
System.out.println("Geschwindigkeit(boot): " +
bootsfahrt.Geschwindigkeit());
System.out.println("Richtung(boot): " +
bootsfahrt.Fahrtrichtung);
bootsfahrt.beschleunigt_5();
System.out.println("Geschwindigkeit(boot): " +
bootsfahrt.Geschwindigkeit());
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 37
Fahrzeugbeispiel: Quellkode(7)
System.out.println("MaximalGeschwindigkeit (MeinGolf): " +
MeinGolf.Hoechstgeschwindigkeit());
System.out.println("Eigent\u00FCmer (boot): " +
boot.Eigentuemer());
bootsfahrt = null;
boot.loesche_Fahrzeug();
boot = null;
MeinGolf.loesche_Fahrzeug();
MeinGolf = null;
System.out.println();
System.out.println("Anzahl Fahrzeuge nach L\u00F6schen: "
+ Fahrzeug.Anzahl());
}
}
P raktische Inf ormatik
2, SS
2005, F olien Java;2,
(27. April2005)
Seite 38
Herunterladen