Java Schulung Syntax - . Dr. Nikolaus Wulff 2 Agenda: Java Grundlagen Java Syntax Java Datentypen Kontrollstrukturen Klassen und Objekte berschreiben/berladen von Methoden

  • View
    215

  • Download
    0

Embed Size (px)

Transcript

  • 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