If you can't read please download the document
Upload
phamhanh
View
232
Download
0
Embed Size (px)
Citation preview
Prof. Dr. Nikolaus Wulff
Java SchulungJava Schulung
Objektorientierte Programmierung in JavaTeil II: Java Grundlagen und Syntax
Prof. Dr. Nikolaus Wulff 22
Agenda: Java Grundlagen
Java SyntaxJava DatentypenKontrollstrukturenKlassen und Objekteberschreiben/berladen von MethodenSichtbarkeit Behandlung von Ausnahmen (Exceptions)Die wichtigsten Java Pakete
Prof. Dr. Nikolaus Wulff 33
Abstrakte DatentypenKlassen sind die logische Erweiterung des Konzepts des ADT.In prozeduralen Sprachen werden ADT's durch Records (Pascal), Structs
(C), Common-Blcke (Fortran) oder Copy-Strecken (Cobol/PL1) realisiert.
Dies sind jedoch lediglich reine Datencontainer. In der Objektorientierung werden diese ADT's um die Deklaration der
mglichen, erlaubten Manipulationen erweitert.Klasse Daten + MethodenEin Objekt ist eine Instanz einer Klasse
Der entsprechende Speicherplatz fr die Daten ist alloziiert und die Methoden knnen auf diese zugreifen.
Prof. Dr. Nikolaus Wulff 44
Kapselung
Kapselung
Kapselung bedeutet, da auf alle nicht exportierten Eigenschaften eines Objekts von auen nicht direkt zugegriffen werden kann.
Wird die konkrete Reprsentation des Zustands verborgen, spricht man auch vom Geheimnisprinzip (Information Hiding, nach [Parnas72]).
Kapselung heit auch, da die Signatur und das abstrakte Verhalten einer Operation bekannt ist, die Implementation aber verborgen bleibt.
Nicht alle oo Programmiersprachen realisieren die Kapselung von Zustand und Implementationen geeignet.
Prof. Dr. Nikolaus Wulff 55
Eine Klasse in Java
public class Sparbuch { public void auszahlen( float betrag ) { ... } public void einzahlen( float betrag ) { ... } public void berechneZinsen() { ... }
private float saldo; private float zinssatz;}
Fr jede Klasse wird in Java eine eigene Datei angelegt.Beispiel: Sparbuch.java
Operationen,(Methoden, Routinen)
Attribute
Blockanfang
Blockende
Prof. Dr. Nikolaus Wulff 6
Hauptprogramm
Die Virtual-Machine wird unter Angabe eines Klassennamens gestartet. In dieser Klasse wird nach einer statischen Operation mit eine bestimmten Signatur gesucht, nmlich: public static void main(String[] args).
Eine solche Operation kann es auch mehrfach in unterschiedlichen Klassen geben. Je nachdem welches main() gestartet werden soll, wird der entsprechende Klassenname der Virtual-Maschine bergeben.
public class HelloWorld { public static void main(String[] args) {
System.out.println("Hello, world");}
}
Prof. Dr. Nikolaus Wulff 7
Konstruktoren
EinschrnkungenKonstruktoren drfen keinen Rckgabetyp besitzen.
"Nicht einmal" void. Sie knnen vom Programmierer nicht explizit
aufgerufen werden. Sie werden vom Compiler automatisch eingefgt, sobald er auf eine Codezeile trifft, in der ein neues Objekt erzeugt wird.
Um dem Programmierer zu ermglichen, die Initalisierung der Variablen eines Objekts zu beeinflussen, gibt es in Java die Mglichkeit, sogenannte Konstruktoren zu vereinbaren. Sie werden automatisch aufgerufen, wenn ein Objekt erzeugt wird. Konstruktoren sind Operationen, die den gleichen Namen wie die Klasse haben.
Prof. Dr. Nikolaus Wulff 8
Objekte erzeugen
Objekte mssen zur Laufzeit durch einen expliziten Ausdruck erzeugt werden. Dazu wird der Konstruktor mit dem Schlsselwort new verwendet. Sparbuch einUrlaubssparbuch = new Sparbuch();Sparbuch einNotgroschen = new Sparbuch();
Wird eine Variable mit dem Typ einer Klasse deklariert, so hat sie solange den Initialwert null, bis ihr ein Objekt zugewiesen wird.Sparbuch einUrlaubssparbuch; // nullSparbuch einNotgroschen; // nulleinUrlaubssparbuch = new Sparbuch();einNotgroschen = einUrlaubssparbuch;
Prof. Dr. Nikolaus Wulff 99
Schlsselworte
abstract default if private throwboolean do implements protected throwsbreak double import public transientbyte else instanceof return trycase extends int short voidcatch final interface static volatilechar finally long super whileclass float native switchconst* for new synchronizedcontinue goto* package this
* momentan nicht genutzt
Beachte: case-sensitive!
Keine Schlsselworte: true, false, nullNeu ab JDK1.4: assertNeu ab JDK1.5: enum
Prof. Dr. Nikolaus Wulff 1010
Java KonventionenBezeichner: Neue Wrter beginnen mit Grobuchstaben. Keine Unterstriche
zur Trennung verwenden. Also nicht drucke_kunden, sondern druckeKunden.
Klassennamen beginnen mit einem Grobuchstaben, z.B. Girokonto.Operationsnamen beginnen mit einem Kleinbuchstaben, z.B. zahleEin.Einige Entwickler lassen Attributnamen mit einem Unterstrich beginnen,
z.B. _saldo. (Aber bitte einheitlich!) Nach jeder ffnenden und vor jeder schlieenden geschweiften Klammer
eine neue Zeile beginnen.Optional: Vor jeder ffnenden geschweiften Klammer eine neue Zeile
beginnen.Nach jeder ffnenden geschweiften Klammer eine Einrckung vornehmen.
Vor der schlieenden geschweiften Klammer diese Einrckung wieder zurcknehmen.
Pro Anweisung eine Zeile.Moderne IDE's ermglichen automatische Formatierung.
Prof. Dr. Nikolaus Wulff 1111
Java Bean Konvention
In Java werden Attribute durch getXXX und setXXX Operationen gelesen bzw. gesetzt.
Arrays werden entsprechend mit getXXX(int index) und setXXX(int index, Object val) angesprochen.
Fr boolean Attribute kann optional auch die Operation isXXX statt getXXX verwendet werden.
Tools (IDE's und Generatoren) sowie die Java Reflection API verwenden diese Konvention!
D.h. eine Klasse mit einer Eigenschaft XYZ hat eine entsprechende public XYZ getXYZ() Methode fr den lesenden Zugriff und einepublic void setXYZ (XYZ v) Methode fr schreibenden Zugriff.
Diese Namenskonvention ist fr den Entwickler bindend (insbesondere set und get, gibX und setzeX ist nicht konform!) .
Prof. Dr. Nikolaus Wulff 1212
Elementare Typen
Imperative und objektorientierte Programmiersprachen bieten i.d.R. einen Satz elementarer Typen an:
Natrliche Zahlen (Integer)reale Zahlen (Float oder Real)Zeichen (char) und Wahrheitswerte (boolean).
Java verfgt ber eine Reihe von elementaren Typen (basic oder primitive types): int, short, long, float, double, byte, boolean und char.
Der Typ einer Variable legt fest die Wertemenge (z.b. int nur ganze Zahlen) und die zulssigen Operationen (z.B. int Addieren, Subtrahieren)
Prof. Dr. Nikolaus Wulff 1313
Basisdatentypen und Literale
Wahrheitswerte (boolean):Konstanten: true, false
Zeichen (char):Konstanten: o, \t,
\u78ab (Unicode hexadezimal)Zeichenketten (String):
Konstanten: Hallo, Hello + + World\n
ganze Zahlen: Konstanten: 47, 47890L (long), 077 (oktal), 07777L (oktal long),
0x89ab (hexadezimal), 0XC0B0L (hex long)Fliekommazahlen:
Konstanten: 3.141F, 6.02E23, 6.02E23F, 6.02E23D
Escape Sequenzen
\ b /* backspace */\ t /* horizontal tab */\ n /* line feed */\ f /* form feed */\ r /* carriage return */\ " /* double quote " */\ ' /* simple quote ' */\ \ /* backslash \ */
Prof. Dr. Nikolaus Wulff 1414
Die numerischen Datentypen numerische Datentypen: Jede prozedurale Programmierspache bietet elementaren numerischen Datentypen
mit den zugehrigen Operationen an. Die Wertebereiche dieser Datentypen sind meist maschinenabhngig, was die
bertragbarkeit von Programmen erschwert.In Java sind die elementaren Datentypen systemunabhngig festgelegt.
Typ Gre Wertebereichbyte 1 Byte -128 bis 127short 2 Bytes -32.768 bis 32.767int 4 Bytes -2.147.483.648 bis 2.147.483.647long 8 Bytes -9.223.372.036.854.775.808 bis
9.223.372.036.854.775.807float 4 Bytes 1,40239846*10-45 bis 3,40282347*1038double 8 Bytes 4,94065645841246544*10-324 bis
1,79769313486231570*10308
Prof. Dr. Nikolaus Wulff 1515
Basisdatentypen vs. Klassen (1)
Fr einige Typen existieren sowohl Basisdatentypen als auch Klassen, z.B. int (Basisdatentyp) und Integer (Klasse).
Auf den Basisdatentypen sind mathematische Operationen vordefiniert, z.B. +, -, *, \.
Die Klassen bieten weitere Methoden zur Manipulation an, z.B. Integer.parseInt(89) zum Umwandeln einer Zeichenkette in eine Zahl.
Werte der Basisdatentypen sind keine Objekte (Superklasse Object) und knnen daher an einigen Stellen nicht verwendet werden. Beispiele: Vector, Hashtable.
Seit JDK1.5 gibt es autboxing 1 wird in Integer(1) verwandelt und addElement(1) funktioniert automatisch...
Vector v = new Vector(); // Vektor von Objektenv.addElement(1); // Fehler 1 ist kein Objektv.addElement(new Integer(1)); // o.k.
Prof. Dr. Nikolaus Wulff 1616
Basisdatentypen vs. Klassen (2)
Literale evaluieren zu Werten von Basisdatentypen, z.B. 1 zu int.Ausnahme: Zeichenketten werden zu Objekten der Klasse String.
Objekte mssen explizit angelegt werden, z.B. new Integer(1).
public class Int { private int value; public Int(int aValue) { value = aValue; } public void setValue(int value) { this.value = value; } public int getValue() { return value; }}
Prof. Dr. Nikolaus Wulff 1717
Basisdatentypen vs. Klassen (3)
Unterschiede beim Vergleich (Wertgleichheit vs. Objektidentitt):
Unterschiede bei der Zuweisung (Kopie vs.Referenz):
1 == 1 new Int(1) != new Int(1)
int a = 75;int b = 100;b = a;a = 200;// b == 75// a != b
Int a = new Int(75);Int b = new Int(100);b = a; // Objektreferenz wird genderta.setValue(200);// b.getValue() == 200// a == b
75
100
a
b75